【计算理论】06 可归约性

文章目录

本章要点

  1. 可归约性定义;
  2. 映射可归约:若 A ≤ m B A\le_m B AmB A A A不可判定,则 B B B也是不可判定证明; A ≤ m B A \le_m B AmB A ‾ ≤ m B ‾ \overline A \le_m \overline B AmB等价性证明;
  3. H A L T T M , E T M , R E G U L A R T M , E Q T M HALT_{TM}, E_{TM}, REGULAR_{TM}, EQ_{TM} HALTTM,ETM,REGULARTM,EQTM的归约;
  4. E Q T M EQ_{TM} EQTM和其补都不是图灵可识别的证明。

可归约性

在以图灵机为通用计算机的前提下,可判定章节讨论了一些在图灵机上可解的问题;并给出了一个图灵机不可解的实例: A T M A_{TM} ATM

在可归约章节中,将进一步给出其他图灵机不可解的实例,并通过论证 A T M A_{TM} ATM可以归约到这些实例,证明其不可解性。

简单来说,就是 A T M A_{TM} ATM问题可以归约到 B B B问题(可以使用 B B B问题构造出 A T M A_{TM} ATM的判定器),如果 B B B问题可解(可判定),那么 A T M A_{TM} ATM也会可判定,导致矛盾,从而反证出 B B B不可判定。

映射可归约

和黑书顺序不同,这里先把这个概念明确一下。

映射可归约是一种简单的从一个问题归约到另一个问题的方法。核心理念是,通过一个可计算函数,将问题 A A A转化为问题 B B B的实例,然后解决问题 B B B。这种思想在时间复杂度、空间复杂度的完全性问题,以及本章中将要讨论的几个不可解问题中,有充分体现。

首先给出可计算函数的定义:

定义:称 f : Σ ∗ → Σ ∗ f: \Sigma^* \to \Sigma^* f:ΣΣ是一个可计算函数,如果 f f f对所有的输入 w w w都停机,并且停机后只有 f ( w ) f(w) f(w)出现在带子上。

进而定义映射可归约性:

定义:如果存在可计算函数 f : Σ ∗ → Σ ∗ f:\Sigma^* \to \Sigma^* f:ΣΣ,对每个 w ∈ A w \in A wA,都有
w ∈ A ⇔ f ( w ) ∈ B w \in A \Leftrightarrow f(w) \in B wAf(w)B
则称语言 A A A映射可归约到语言 B B B,记 A ≤ m B A \le_m B AmB,称 f f f A A A B B B的归约。

定理:如果 A ≤ m B A \le_m B AmB B B B是可判定的,则 A A A也是可判定的。

证明:已知 B B B可判定,使用 B B B的判定器 M M M,根据映射可归约的定义,构造 A A A的判定器 N N N
N = “对输入 w : 1. 计算 f ( w ) ; 2. 在 f ( w ) 上运行 M ,输出 M 的输出。” \begin{array}{l} N = \text{“对输入}w:\\ 1.计算f(w);\\ 2.在f(w)上运行M,输出M的输出。\text{”} \end{array} N=对输入w:1.计算f(w);2.f(w)上运行M,输出M的输出。
推论:若 A ≤ m B A\le_m B AmB A A A不可判定,则 B B B也是不可判定的。

证明:若 A ≤ m B A\le_m B AmB A A A不可判定,假设 B B B可判定,则根据定理可知, A A A应该是可判定的,矛盾,故 B B B应该是不可判定的。

该推论是证明问题不可判定的常用工具。

由于映射可归约是一种简单的归约方法,故不是所有的归约都属于映射可归约,对于难以找到可计算函数的归约问题,可能采用的就不是映射可归约。事实上,下文可判定归约证明中就有不是映射可归约证明的。

图灵可判定归约证明

图灵可归约的证明通常基于构造已经得证的不可判定图灵机进行,例如构造若B成立,则可由B规约 A T M A_{TM} ATM,因为 A T M A_{TM} ATM不可判定,所以B不成立

H A L T T M HALT_{TM} HALTTM不可判定

给出 H A L T T M HALT_{TM} HALTTM的定义,并回顾下 A T M A_{TM} ATM的定义:
H A L T T M = { < M , w > ∣ M 为图灵机,对输入 w 停机 } A T M = { < M , w > ∣ M 为图灵机, M 接受 w } HALT_{TM} = \{<M, w>| M为图灵机,对输入w停机\}\\ A_{TM} = \{<M, w> | M为图灵机,M接受w\} HALTTM={<M,w>M为图灵机,对输入w停机}ATM={<M,w>M为图灵机,M接受w}
证明思路 A T M A_{TM} ATM M M M拒绝和循环的输出都是拒绝,因此首先使用 H A L T T M HALT_{TM} HALTTM的判定器判定是否停机,不停机就拒绝;然后再在 w w w上模拟 M M M

证明:假设 H A L T T M HALT_{TM} HALTTM是可判定的,使用 H A L T T M HALT_{TM} HALTTM归约 A T M A_{TM} ATM,设判定 H A L T T M HALT_{TM} HALTTM的图灵机为 R R R,构造判定 A T M A_{TM} ATM的图灵机 S S S
S = “对输入 < M , w > : 1. 在输入 < M , w > 上运行 R ; 2. 若 R 拒绝,则拒绝 ; 3. 若 R 接受,在 w 上运行 M ,直到停机 ; 4. 若 M 接受,则接受;若 M 拒绝,则拒绝。” \begin{array}{l} S = \text{“对输入}<M, w>:\\ 1.在输入<M,w>上运行R;\\ 2.若R拒绝,则拒绝;\\ 3.若R接受,在w上运行M,直到停机;\\ 4.若M接受,则接受;若M拒绝,则拒绝。\text{”} \end{array} S=对输入<M,w>:1.在输入<M,w>上运行R;2.R拒绝,则拒绝;3.R接受,在w上运行M,直到停机;4.M接受,则接受;若M拒绝,则拒绝。
从上面的构造可以看出,若 R R R可判定 H A L T T M HALT_{TM} HALTTM,则 S S S可判定 A T M A_{TM} ATM,因为 A T M A_{TM} ATM是不可判定的,故 H A L T T M HALT_{TM} HALTTM也应该是不可判定的。

E T M E_{TM} ETM不可判定

给出 E T M E_{TM} ETM的定义:
E T M = { < M > ∣ M 为图灵机, L ( M ) = ∅ } E_{TM} = \{<M> | M为图灵机,L(M) = \varnothing\} ETM={<M>M为图灵机,L(M)=}
证明思路:仍然需要构造 A T M A_{TM} ATM的判定器,但 E T M E_{TM} ETM A T M A_{TM} ATM的联系性是比较难想的。这个联系等价于找到 ∅ \varnothing w w w的关系,即如果 M M M接受/不接受 w w w,应该推导出 ∅ \varnothing

可以根据 M M M w w w的描述,尝试构造这样一台新的图灵机 M 1 M_1 M1
M 1 = “对输入 x : 1. 若 x ≠ w , 则拒绝 ; 2. 若 x = w , 则在 w 上模拟 M ,若 M 接受,则接受。” \begin{array}{l} M_1 = \text{“对输入}x:\\ 1.若x\ne w, 则拒绝;\\ 2.若x = w, 则在w上模拟M,若M接受,则接受。\text{”} \end{array} M1=对输入x:1.x=w,则拒绝;2.x=w,则在w上模拟M,若M接受,则接受。
图灵机 M 1 M_1 M1唯一能够识别的串就是 w w w,当且仅当 x = w x = w x=w时, L ( M 1 ) ≠ ∅ L(M_1) \ne \varnothing L(M1)=。如果 E T M E_{TM} ETM是可判定的,就可以通过判定 M 1 M_1 M1的语言是否为 ∅ \varnothing ,得知 M M M是否接受 w w w。设 E T M E_{TM} ETM的判定器为 R R R,如果 R R R接受,则意味着 L ( M 1 ) = ∅ L(M_1) = \varnothing L(M1)=,即 M M M不接受 w w w;反之,则意味着 M M M接受 w w w

证明:假设 E T M E_{TM} ETM是可判定的,设其判定器为 R R R,构造判定 A T M A_{TM} ATM的判定器 S S S
S = 对输入 < M , w > : 1. 使用 M 和 w 的描述,构造只接受 w 的图灵机 M 1 ; 2. 使用 R 判定 M 1 ; 3. 若 R 接受,则拒绝;若 R 拒绝,则接受。” \begin{array}{l} S = \text{对输入}<M, w>:\\ 1.使用M和w的描述,构造只接受w的图灵机M_1;\\ 2.使用R判定M_1;\\ 3.若R接受,则拒绝;若R拒绝,则接受。\text{”} \end{array} S=对输入<M,w>:1.使用Mw的描述,构造只接受w的图灵机M1;2.使用R判定M1;3.R接受,则拒绝;若R拒绝,则接受。
从上面的构造可以看出,若 R R R可以判定 E T M E_{TM} ETM,则 S S S可以判定 A T M A_{TM} ATM,由于 A T M A_{TM} ATM是不可判定的,故 E T M E_{TM} ETM也应该是不可判定的。

R E G U L A R T M REGULAR_{TM} REGULARTM不可判定

给出 R E G U L A R T M REGULAR_{TM} REGULARTM的定义:
R E G U L A R T M = { < M > ∣ M 为图灵机,且 L ( M ) 为正则语言 } REGULAR_{TM} = \{<M>| M为图灵机,且L(M)为正则语言\} REGULARTM={<M>M为图灵机,且L(M)为正则语言}
证明思路:与 E T M E_{TM} ETM的思路类似,我们需要找到判定正则语言与判定接受 w w w之间的联系,即,如果 M M M接受 w w w,则 L ( M ) L(M) L(M)为正则语言;如果 M M M不接受 w w w,则 L ( M ) L(M) L(M)为非正则语言。构造图灵机 M 2 M_2 M2来描述这种关系(设字母表为 { 0 , 1 } \{0,1\} {0,1}):
M 2 = “对输入 x : 1. 若 x 具有形式 0 n 1 n ,则接受,此时 M 2 的语言为非正则 ; 2. 若 x 具有形式 Σ ∗ ,则在 w 上运行 M 。若 M 接受 w ,则接受。此时 M 2 的语言是正则语言。” \begin{array}{l} M_2 = \text{“对输入}x:\\ 1.若x具有形式0^n1^n,则接受,此时M_2的语言为非正则;\\ 2.若x具有形式\Sigma^*,则在w上运行M。若M接受w,则接受。此时M_2的语言是正则语言。\text{”} \end{array} M2=对输入x:1.x具有形式0n1n,则接受,此时M2的语言为非正则;2.x具有形式Σ,则在w上运行M。若M接受w,则接受。此时M2的语言是正则语言。
证明:假设 R E G U L A R T M REGULAR_{TM} REGULARTM可判定,且判定器为 R R R,构造判定 A T M A_{TM} ATM的判定器 S S S
S = 对输入 < M , w > : 1. 使用 M 和 w 构造上述的图灵机 M 2 ; 2. 在输入 < M 2 > 上运行 R ; 3. 若 R 接受,则接受;若 R 拒绝,则拒绝。  \begin{array}{l} S = \text{对输入}<M, w>:\\ 1.使用M和w构造上述的图灵机M_2;\\ 2.在输入<M_2>上运行R;\\ 3.若R接受,则接受;若R拒绝,则拒绝。\ \end{array} S=对输入<M,w>:1.使用Mw构造上述的图灵机M2;2.在输入<M2>上运行R;3.R接受,则接受;若R拒绝,则拒绝。 
从上述构造中可以看出,如果 R R R可以判定 R E G U L A R T M REGULAR_{TM} REGULARTM,则 S S S可以判定 A T M A_{TM} ATM,由于 A T M A_{TM} ATM不可判定,故 R E G U L A R T M REGULAR_{TM} REGULARTM应该是不可判定的。

M 2 M_2 M2的构造中, x x x的形式没有固定要求,只要一个是正则一个是非正则就好,因为重点不是 M 2 M_2 M2识别的语言具体是什么,而是能否用判定器 R R R判定 M 2 M_2 M2的语言是不是正则语言。

E Q T M EQ_{TM} EQTM不可判定

给出 E Q T M EQ_{TM} EQTM的定义:
E Q T M = { < M 1 , M 2 > ∣ M 1 , M 2 都是图灵机,且 L ( M 1 ) = L ( M 2 ) } EQ_{TM} = \{<M_1, M_2>|M_1, M_2都是图灵机,且L(M_1) = L(M_2)\} EQTM={<M1,M2>M1,M2都是图灵机,且L(M1)=L(M2)}
证明思路 E Q T M EQ_{TM} EQTM利用 E T M E_{TM} ETM来进行构造,同样是要寻找两者之间的联系:令 L ( M 1 ) = ∅ L(M_1) = \varnothing L(M1)=,若 E Q ( M 1 , M 2 ) EQ(M_1, M_2) EQ(M1,M2),则 M 2 M_2 M2的语言也应该是空的。

证明:假设 E Q T M EQ_{TM} EQTM可判定,设判定器为 R R R,构造判定 E T M E_{TM} ETM的判定器 S S S
S = 对输入 < M > : 1. 在输入 < M , M 1 > 上运行 R , M 1 为拒绝所有输入的图灵机,即 L ( M 1 ) = ∅ 2. 如果 R 接受,则接受;如果 R 拒绝,则拒绝。” \begin{array}{l} S = \text{对输入}<M>:\\ 1.在输入<M, M_1>上运行R,M_1为拒绝所有输入的图灵机,即L(M_1) = \varnothing\\ 2.如果R接受,则接受;如果R拒绝,则拒绝。\text{”} \end{array} S=对输入<M>:1.在输入<M,M1>上运行RM1为拒绝所有输入的图灵机,即L(M1)=2.如果R接受,则接受;如果R拒绝,则拒绝。
从上述构造中可以看出,如果 R R R可以判定 E Q T M EQ_{TM} EQTM,则 S S S可以判定 E T M E_{TM} ETM,因为 E T M E_{TM} ETM不可判定,故 E Q T M EQ_{TM} EQTM也是不可判定的。

图灵可识别的归约性

映射可归约性对求补运算是敏感的,在可判定章节,我们提到了补图灵可识别的概念,这里对其归约性进行说明。

首先给出图灵可识别的归约定理,形式上非常类似映射可归约一节中可判定性的归约定理:

定理:如果 A ≤ m B A \le_m B AmB B B B是图灵可识别的的,则 A A A也是图灵可识别的。

只需要将上文中证明的判定器改为识别器,就可以证明该定理。推论同理:

推论:若 A ≤ m B A\le_m B AmB A A A不可识别,则 B B B也是不可识别的。

推论 A ≤ m B A \le_m B AmB A ‾ ≤ m B ‾ \overline A \le_m \overline B AmB具有相同含义。

证明:已知 A ≤ m B A \le_m B AmB,则有对应关系:
∀ w ∈ A ⇔ ∀ f ( w ) ∈ B \forall\ w \in A \Leftrightarrow \forall\ f(w) \in B  wA f(w)B
∃ w ∈ A ‾ \exist\ w \in \overline A  wA,使得 f ( w ) ∉ B f(w) \notin B f(w)/B,则意味着该 f ( w ) ∈ B ⇔ w ∈ A f(w) \in B \Leftrightarrow w \in A f(w)BwA,导致矛盾。

∀ w ∈ A ‾ \forall\ w \in \overline A  wA,都应有 f ( w ) ∈ B ‾ f(w) \in \overline B f(w)B

这个证明记一下,可能会考。

上述定理在证明可识别性归约问题有典型的应用:因为 A T M ‾ \overline {A_{TM}} ATM不是图灵可识别的,因此如果想要证明 B B B不是图灵可识别的,可以证明 A T M ≤ m B ‾ A_{TM} \le_m \overline B ATMmB,就相当于证明 A T M ‾ ≤ m B \overline {A_{TM}} \le_m B ATMmB

定理 E Q T M EQ_{TM} EQTM既不是图灵可识别的,也不是补图灵可识别的。

证明

  1. 首先证明 E Q T M EQ_{TM} EQTM不可识别,给出从 A T M A_{TM} ATM E Q T M ‾ \overline {EQ_{TM}} EQTM的归约:
    F = “对输入 < M , w > , M 为图灵机, w 为串 : 1. 构造图灵机 M 1 , M 2 : M 1 = “对任何输入 : a . 拒绝。” M 2 = “对任何输入 : a . 在 w 上运行 M ,若 M 接受,则接受。” 2. 输出 < M 1 , M 2 > 。” \begin{array}{l} F = \text{“对输入}<M, w>, M为图灵机,w为串:\\ 1.构造图灵机M_1, M_2:\\ M_1 = \text{“对任何输入}:\\ \ \ \ \ a.拒绝。\text{”}\\ M_2 = \text{“对任何输入}:\\ \ \ \ \ a.在w上运行M,若M接受,则接受。\text{”}\\ 2.输出<M_1, M_2>。\text{”} \end{array} F=对输入<M,w>,M为图灵机,w为串:1.构造图灵机M1,M2M1=对任何输入:    a.拒绝。M2=对任何输入:    a.w上运行M,若M接受,则接受。2.输出<M1,M2>
    由于 M 1 M_1 M1什么也不接受,若 M M M接受 w w w,则 M 2 M_2 M2接受,两个机器不等价;反之,如果 M M M不接受 w w w,则两个机器等价。因为 A T M ‾ \overline {A_{TM}} ATM不是图灵可识别的,且 A T M ≤ m E Q T M ‾ ⇔ A T M ‾ ≤ m E Q T M A_{TM} \le_m \overline {EQ_{TM}} \Leftrightarrow\overline {A_{TM}} \le_m EQ_{TM} ATMmEQTMATMmEQTM,故 E Q T M EQ_{TM} EQTM不是可识别的。

  2. 同理,只需将 M 1 M_1 M1的描述改为对任何输入都接受,可以得到 A T M A_{TM} ATM E Q T M EQ_{TM} EQTM的归约,从而证明补图灵不可识别。

参考

  • 《计算理论导引》第二版,机械工业出版社

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

组件注入 # 注入的属性_注入域对象而不是基础结构组件

组件注入 # 注入的属性依赖注入是Java&#xff08;以及许多其他编程语言&#xff09;中广泛使用的软件设计模式&#xff0c;用于实现控制反转 。 它提高了可重用性&#xff0c;可测试性&#xff0c;可维护性&#xff0c;并有助于构建松耦合的组件。 如今&#xff0c;依赖注入是…

docker $PWD路径_Docker安装Jenkins+Shell脚本自动化部署项目

本文同名博客老炮说Java&#xff1a;https://www.laopaojava.com/&#xff0c;每天更新Spring/SpringMvc/SpringBoot/实战项目等文章资料SentinelNacos 是微服务环境搭建必不可少的两个组件&#xff0c;这里给大家推荐一套微服务教程&#xff1a;SpringCloud微服务电商项目教程…

flyme Android7.0 root,手把手教你如何免ROOT卸载Flyme7系统自带APP

本教程需要使用adb&#xff0c;adb的全称为Android Debug bridge&#xff0c;就是起到调试桥的作用。借助adb工具&#xff0c;我们可以管理设备或手机模拟器的状态。本教程需要使用adb&#xff0c;adb的全称为Android Debug bridge&#xff0c;就是起到调试桥的作用。借助adb工…

C语言 -- 字符串中根据特定字符(串)分割

版权C语言字符串操作函数有很多&#xff0c;这里举出需要用到的&#xff0c;其他请自行查找。1、len strlen(p) &#xff1b;//取字符串长度 原型&#xff1a;size_t strlen(const char *s); 功能&#xff1a;统计字符串string中字符的个数&#xff0c;字符串的长度在 size_t…

javaone_JavaOne 2014:会议与合同利益冲突

javaone杜克街咖啡馆&#xff0c;工程师可以在街上进行走廊交谈 。 与签约不兼容 我的第11届JavaOne会议&#xff08;2004年至2014年为11 10 1&#xff09;非常出色。 值得参加此活动并结识社区中所有的人。 现在&#xff0c;这里是绅士的&#xff0c;但 。 除了经济上的明显…

什么流读取MultipartFile_深入理解并运用Node中的IO模型流

在 NodeJs 中&#xff0c;流随处可见&#xff0c;读/写文件流&#xff0c;HTTP请求/返回流&#xff0c;stdin/stdout流。理解并运用好流会让你的Node更具力量。Streamlib/_stream_readable.jslib/_stream_writable.jslib/_stream_tranform.jslib/_stream_duplex.js流主要有可读…

android状态机是线程么,Java中的线程状态机 - java

有没有一种方法可以将线程保留在状态中等待更改&#xff1f;我的意思是&#xff0c;等一下事情发生了(更改var&#xff0c;调用方法等)。也许它需要使用事件监听器或同步的对象/方法。这样的状态机通常的方法statemachine example它使用一个do {..} while(true)循环&#xff0c…

C 线程的创建

前言线程创建很容易&#xff0c;直接调用std::thread&#xff0c;就创建一个新线程了。该线程拿到任务后立即开始执行。线程的创建者&#xff08;父线程&#xff09;必须管理创建的线程&#xff08;子线程&#xff09;&#xff0c;应该等到子线程完成其任务或者让子线程从自己身…

apache karaf_未来是Apache Karaf上的微服务架构

apache karaf这是Jamie Goodyear的客座博客文章&#xff08; 博客 &#xff0c; icbts &#xff09;。 他是Savoir Technologies的开源倡导者&#xff0c;Apache开发人员和计算机系统分析师&#xff1b; 他为全球大型组织设计&#xff0c;批判和支持了体系结构。 他拥有纽芬兰…

AppScan api登录接口 postman_如何通过Postman调用EDI系统的API?

知行EDI系统主要是用来实现贸易双方的数据交换的过程&#xff0c;这个过程中&#xff0c;贸易双方往往需要根据国际通用的消息格式收发信息&#xff0c;我们称符合国际规范的消息文件为EDI报文&#xff0c;然而不同的公司会结合ERP的接口情况选择不同的集成方式&#xff0c;例如…

指针函数和函数指针

概述指针函数和函数指针是C语言里两个比较绕的概念。但是不仅面试题爱考&#xff0c;实际应用中也比较广泛。很多人因为搞不清这两个概念&#xff0c;干脆就避而远之&#xff0c;我刚接触C语言的时候对这两个概念也比较模糊&#xff0c;特别是当指针函数、函数指针、函数指针变…

android显示绘图动画,Android自定义View绘图实现渐隐动画

实现了一个有趣的小东西&#xff1a;使用自定义view绘图&#xff0c;一边画线&#xff0c;画出的线条渐渐变淡&#xff0c;直到消失。效果如下图所示&#xff1a;用属性动画或者渐变填充(shader)可以做到一笔一笔的变化&#xff0c;但要想一笔渐变(手指不抬起边画边渐隐)&#…

csrf spring_无状态Spring安全性第1部分:无状态CSRF保护

csrf spring如今&#xff0c;随着RESTful架构变得越来越标准&#xff0c;可能值得花一些时间重新考虑当前的安全方法。 在这一小系列博客文章中&#xff0c;我们将探索以无状态方式解决与Web相关的安全性问题的几种相对较新的方法。 这第一篇文章是关于保护您的网站免受跨站请求…

python网络编程项目_python网络编程详解

最近在看《UNIX网络编程 卷1》和《FREEBSD操作系统设计与实现》这两本书&#xff0c;我重点关注了TCP协议相关的内容&#xff0c;结合自己后台开发的经验&#xff0c;写下这篇文章&#xff0c;一方面是为了帮助有需要的人&#xff0c;更重要的是方便自己整理思路&#xff0c;加…

C - 指针总结

指针是什么&#xff1f;指针是一变量或函数的内存地址&#xff0c;是一个无符号整数&#xff0c;它是以系统寻址范围为取值范围&#xff0c;32位&#xff0c;4字节。指针变量&#xff1a;存放地址的变量。在C 中&#xff0c;指针变量只有有了明确的指向才有意义。指针类型int* …

android网络转圈,android基于dialog加载时转圈圈很好的demo

【实例简介】这是一个android基于dialog加载时转圈圈很好的完整demo&#xff0c;很适合新手学习&#xff0c;希望对有需要的朋友能得到帮助【实例截图】【核心代码】dialog_anim└── dialog_anim├── AndroidManifest.xml├── bin│ ├── AndroidManifest.xml│ ├…

spring期刊状态_无状态Spring安全性第2部分:无状态认证

spring期刊状态Spring Stateless Security系列的第二部分是关于以无状态方式探索身份验证的方法。 如果您错过了有关CSRF的第一部分&#xff0c;可以在这里找到。 因此&#xff0c;在谈论身份验证时&#xff0c;其全部内容就是让客户端以可验证的方式向服务器标识自己。 通常&…

分享10个值得关注的C语言开源项目

来源于网络&#xff0c;如有侵权&#xff0c;告知必删。

python3 x默认使用的编码_python3默认使用什么编码

python3默认编码为unicode&#xff0c;由str类型进行表示。二进制数据使用byte类型表示。 字符串通过编码转换成字节码&#xff0c;字节码通过解码成为字符串encode&#xff1a;str --> bytes&#xff08;推荐学习&#xff1a;Python视频教程&#xff09; decode&#xff1a…

html中写css代码,开发DIV CSS时 先写CSS代码还是先写HTML代码

相信良多&#xff2c;&#xff2f;&#xff36;&#xff25;用DIVCSS技术启示重构网页的爱好者友好&#xff0c;在起源学习DIVCSS的时分都邑想一个标题&#xff0c;想晓得DIVCSS妙手或有教育者在开发制作html页面的时刻&#xff0c;下场是先写html照样先写css&#xff1f;带着这…