计算性和复杂度理论2
本文主要是关于图灵可确定,不可确定问题和半确定问题等
本文中可判定或不可判定也翻译为可决定(确定),不可决定(确定),这里我统一用可判定与不可判定
预备知识
可数与不可数集合
可数集合
可数集合:一个集合MMM称为可数的,当MMM是空的,或者当有一个满射的函数c:N→Mc:\mathbb{N}\rightarrow Mc:N→M存在
- 每一个可数集合的元素都可以被枚举出来
- 每一个有限集合都是可数的
- 对于一个可数的无限集合都存在一个双射函数c:N→Mc:\mathbb{N}\rightarrow Mc:N→M
- 所有可数的无限集合和自然数集合N\mathbb{N}N等势
可数集合举例:
- 有限字母集合Σ\SigmaΣ所有构成的词的集合Σ∗\Sigma^*Σ∗,例如:{0,1}∗\{0,1\}^*{0,1}∗在卡农顺序下可以枚举为:
ϵ,0,1,00,01,10,11,000,001,010,011,100,101,...\epsilon,0,1,00,01,10,11,000,001,010,011,100,101,... ϵ,0,1,00,01,10,11,000,001,010,011,100,101,...
- 哥德尔数Gödelnummer的集合。因为Gödelnummer的词是关于字母集{0,1}的
- 所有图灵机的集合。因为每个图灵机都可以通过一个Gödelnummer表示
符号
对于二维字母集合Σ={0,1}\Sigma=\{0,1\}Σ={0,1}我们将在卡农顺序下的第i个词表示为wiw_iwi
对于第i个卡农顺序下的图灵机Gödelnummer我们记为MiM_iMi
不可数聚合
定理:自然数集的幂集P(N)\mathcal{P}(\mathbb{N})P(N)是不可数的
证明:反证法
假设P(N)\mathcal{P}(\mathbb{N})P(N)是可数的
那么令S0,S1,S2,S3,...S_0,S_1,S_2,S_3,...S0,S1,S2,S3,...为一个P(N)\mathcal{P}(\mathbb{N})P(N)的枚举
我们定义一个二维无限的邻接矩阵(Ai,j)i,j∈N(A_{i,j})_{i,j\in \mathbb{N}}(Ai,j)i,j∈N
Ai,j={1如果j∈Si0其他A_{i,j}= \begin{cases} 1& \quad 如果j\in S_i\\ 0& \quad 其他 \end{cases} Ai,j={10如果j∈Si其他
上述两行分别定义对角线集合SdiagS_{diag}Sdiag和其补集Sˉdiag\bar S_{diag}Sˉdiag
注:对角线集合SdiagS_{diag}Sdiag和其补集Sˉdiag\bar S_{diag}Sˉdiag都是自然数集合的子集,因此在P(N)\mathcal{P}(\mathbb{N})P(N)存在一个元素Sk,k∈NS_k,k\in\mathbb{N}Sk,k∈N使得Sˉdiag=Sk\bar S_{diag} = S_kSˉdiag=Sk
现在有两种情况,都可以导致矛盾:
第一种情况:Ak,k=1⇒Def.Sˉdiagk∉Sˉdiag⇒k∉Sk⇒Def.AAk,k=0第一种情况: A_{k,k} = 1\overset{Def. \bar S_{diag}}\Rightarrow k\notin \bar S_{diag} \Rightarrow k\notin S_k \overset{Def. A}\Rightarrow A_{k,k}=0第一种情况:Ak,k=1⇒Def.Sˉdiagk∈/Sˉdiag⇒k∈/Sk⇒Def.AAk,k=0
第二种情况:Ak,k=0⇒Def.Sˉdiagk∈Sˉdiag⇒k∈Sk⇒Def.AAk,k=1第二种情况: A_{k,k} = 0\overset{Def. \bar S_{diag}}\Rightarrow k\in \bar S_{diag} \Rightarrow k\in S_k \overset{Def. A}\Rightarrow A_{k,k}=1第二种情况:Ak,k=0⇒Def.Sˉdiagk∈Sˉdiag⇒k∈Sk⇒Def.AAk,k=1
所以不存在P(N)\mathcal{P}(\mathbb{N})P(N)的枚举,因此不可数
不可判定问题
对角线语言
定义:D={w∈{0,1}∗∣w=wi且Mi不接受w}D=\{w\in\{0,1\}^*|w=w_i且M_i不接受w\}D={w∈{0,1}∗∣w=wi且Mi不接受w}
换句话说:第i个词wiw_iwi(卡农顺序下对于{0,1}∗\{0,1\}^*{0,1}∗)在对角线语言D中,当且仅当第i个图灵机MiM_iMi(在卡农顺序下的Gödelnummer)不接受这个词wiw_iwi。
注:这里图灵机MiM_iMi不接受www有两种情况:1.图灵机MiM_iMi拒绝了www;2.图灵机MiM_iMi对于输入www不停
定理:对角线语言DDD是不可判定的
证明:反证法
假设对角线语言D是可判定的,则存在一个MjM_jMj,可以判定D
对角线语言补集的不可判定性
相似的,对角线补集的定义为Dˉ={w∈{0,1}∗∣w=wi且Mi接受w}\bar D=\{w\in\{0,1\}^*|w=w_i且M_i接受w\}Dˉ={w∈{0,1}∗∣w=wi且Mi接受w}
定理:对角线语言补集Dˉ\bar DDˉ是不可判定的
证明:反证法
假设Dˉ\bar DDˉ是可判定的,那么存在一个图灵机MDˉM_{\bar D}MDˉ,判定Dˉ\bar DDˉ。可以用图灵机MDˉM_{\bar D}MDˉ构造出可以判定对角线语言DDD的图灵机MDM_DMD,造成矛盾。
如下构造:
子程序技术
上面的这个证明过程就用到了子程序技术
其具体方法为:
已经有一个被证明是不可判定的语言L’,要求证一个新的语言L不可判定,只要构造运用一个子程序图灵机MLM_LML(其可判定语言L)的图灵机也可以判定语言L’
观察:
当一个语言L⊆{0,1}∗L\subseteq\{0,1\}^*L⊆{0,1}∗不可判定时,那么他的补集也不可判定
同样的当一个语言L⊆{0,1}∗L\subseteq\{0,1\}^*L⊆{0,1}∗可判定时,那么他的补集也可判定
停机问题
定义:H={<M>w∣M在输入为w的时候能停}H = \{<M>w|M在输入为w的时候能停\}H={<M>w∣M在输入为w的时候能停}
注:停机问题是所有图灵机Gödelnummer<M><M><M>加上能使他停的词www的集合
定理:停机问题H是不可判定的
证明:子程序
- 1号子程序根据输入w在卡农顺序下的下标i(也就是找到wi=ww_i = wwi=w),然后根据下标i得到MiM_iMi的Gödelnummer
- 将<Mi>wi<M_i>w_i<Mi>wi作为输入进入2号子程序MHM_HMH,如果MiM_iMi在w_i处不停机则拒绝,如果停机则接受进入3号子程序。(因为MHM_HMH接受<Mi>wi<M_i>w_i<Mi>wi只是说明MiM_iMi在输入wiw_iwi处停了,接受或拒绝未知,而对于对角线语言补集是只要求能被MiM_iMi接受的语言)
- 3号子程序通用图灵机模拟MiM_iMi对于输入wiw_iwi的运行过程。(因为MHM_HMH接受<Mi>wi<M_i>w_i<Mi>wi,所以MiM_iMi对于输入wiw_iwi会停,当MiM_iMi接受wiw_iwi时,通用图灵机UUU也会接受,反过来也一样)
正确性证明:
需要证明:
- w∈Dˉ⇒MDˉ接受ww \in \bar D \Rightarrow M_{\bar D} 接受ww∈Dˉ⇒MDˉ接受w
- w∉Dˉ⇒MDˉ拒绝ww \notin \bar D \Rightarrow M_{\bar D} 拒绝ww∈/Dˉ⇒MDˉ拒绝w
ϵ\epsilonϵ-停机问题
定义:Hϵ={<M>w∣M在输入为ϵ的时候能停}H_\epsilon = \{<M>w|M在输入为\epsilon的时候能停\}Hϵ={<M>w∣M在输入为ϵ的时候能停}
定理:ϵ\epsilonϵ-停机问题HϵH_\epsilonHϵ是不可判定的
证明:子程序技术
首先判断输入是否是以正确的Gödelnummer开始的,如果不是,则直接拒绝
如果输入格式正确,则用该输入构造一个新的图灵机Gödelnummer<Mw∗><M^*_w><Mw∗>,该图灵机有以下特征:
1)如果Mw∗M^*_wMw∗含有输入ϵ\epsilonϵ,那么在运行时,它先将词w写在带子上,之后模拟图灵机M在输入为w的行为(这里是使得w在M上停等价于下面MϵM_\epsilonMϵ接受Mw∗M^*_wMw∗,反之w在M上不停就不接受)
2)如果输入不是ϵ\epsilonϵ,那么就无所谓Mw∗M^*_wMw∗的行为(因为证明里不需要)。我们可以设定,Mw∗M^*_wMw∗会进入无限循环,也就是不停
最后将Gödelnummer<Mw∗><M^*_w><Mw∗>作为输入进入图灵机MϵM_\epsilonMϵ,然后整个MHM_HMH输出接受,当且仅当MϵM_\epsilonMϵ接受
正确性证明:
首先如果输入不符合<M>w<M>w<M>w这个形式的,MHM_HMH直接拒绝,下面,当输入符合<M>w<M>w<M>w形式,则需要证明:
<M>w∈H⇒MH接受<M>w<M>w\in H \quad \Rightarrow \quad M_H 接受<M>w<M>w∈H⇒MH接受<M>w
<M>w∉H⇒MH拒绝<M>w<M>w\notin H \quad \Rightarrow \quad M_H 拒绝<M>w<M>w∈/H⇒MH拒绝<M>w
莱斯定理
由图灵机计算的偏分方程具有以下形式:
fM:{0,1}∗→{0,1}∗∪{⊥}f_M:\{0,1\}^*\rightarrow \{0,1\}^*\cup\{\bot\}fM:{0,1}∗→{0,1}∗∪{⊥}
对于判定问题有以下形式:
fM:{0,1}∗→{0,1,⊥}f_M:\{0,1\}^*\rightarrow \{0,1,\bot\}fM:{0,1}∗→{0,1,⊥}
其中0表示拒绝,1表示接受,⊥\bot⊥表示不停
定理内容:
令R\mathcal{R}R是由图灵机计算的所有偏分方程的集合。
令S\mathcal{S}S是R\mathcal{R}R的一个子集,且有∅⊂S⊂R,S≠∅,S≠R\varnothing\subset \mathcal{S}\subset \mathcal{R},\mathcal{S}\ne\varnothing,\mathcal{S}\ne\mathcal{R}∅⊂S⊂R,S=∅,S=R
则语言L(S)={<M>∣M计算一个来自于S的函数}L(\mathcal{S}) =\{<M>|\ M 计算一个来自于\mathcal{S}的函数\}L(S)={<M>∣ M计算一个来自于S的函数}是不可判定的
注:莱斯定理只针对于计算函数的图灵机哥德尔编码,不涉及到图灵机的运行时间,运行内容
证明:ML(S)M_{L(\mathcal{S})}ML(S)作为MϵM_\epsilonMϵ的子程序
令u为一般的未定义的函数u(w)≡⊥u(w)\equiv \botu(w)≡⊥
u∉Su\notin \mathcal{S}u∈/S
令f是S\mathcal{S}S里的一个函数
令N是一个计算f的图灵机
如果输入不是由正确的Gödelnummer组成,MϵM_\epsilonMϵ则拒绝这个输入
否则,MϵM_\epsilonMϵ则从输入<M><M><M>中计算图灵机M∗M^*M∗的Gödelnummer:
输入x在M∗M^*M∗上的行为如下:
1)首先M∗M^*M∗在一个事先设计好的路径(Spur)上模拟图灵机M在输入为ϵ\epsilonϵ时的行为(如果M不停机,那么M∗M^*M∗就也不停机,那也就是计算的是u(w)≡⊥u(w)\equiv \botu(w)≡⊥,那么在之后ML(S)M_{L(\mathcal{S})}ML(S)肯定会输出拒绝)
2)之后M∗M^*M∗模拟图灵机N在输入为x的行为。一旦N停下来,那么M∗M^*M∗也就停下来,并且将N的输出作为M∗M^*M∗的输出。(这里指当输入ϵ\epsilonϵ在M上停机了,那么运行N,输入为x,输出自然就是f(x))
最后将<M∗><M^*><M∗>作为输入进入图灵机ML(S)M_{L(\mathcal{S})}ML(S)中。我们接受当且仅当ML(S)M_{L(\mathcal{S})}ML(S)接受。
正确性证明:
封闭性
当语言L是可判定的,那么它的补集Σ∗−L\Sigma^*-LΣ∗−L也是可判定的
当两个语言L1L_1L1和L2L_2L2是可判定的,则
- L1∩L2L_1\cap L_2L1∩L2可判定
- L1∪L2L1\cup L_2L1∪L2可判定
可判定的语言集合在交并补下面是封闭的
递归可枚举性与归约
一个语言L被一个图灵机M所判定,当
- 对于任何一个输入M都会停
- M只接受来自于L里的词
一个语言L会被一个图灵机所识别,当
- M接受所有来自于L里的词
- M不接受任何一个不是L里的词
当存在一个图灵机,其可以识别L,那么则称这个语言L是半可判定的(semi-entscheidbar)
递归可枚举性
一个枚举器对于一个语言L⊆Σ∗L\subseteq\Sigma^*L⊆Σ∗是一个图灵机的变种,其连接着一个打印机
这个打印机是一个额外的输出带,读取头只能在这个带上向右移动且只能进行写操作。
- 枚举器会由空的工作带开始,并且随着时间会输出来自于L里的所有单词到打印机上
- 输出的词会被一个不来自于Σ\SigmaΣ分隔符分开
- 枚举器只打印来自于L里的单词
定义:当一个语言L有一个枚举器时,则称L是递归可枚举的
定理:一个语言L是递归可枚举的,当且仅当L是半可判定的
证明:
递归可枚举→\rightarrow→半可判定
假设L是递归可枚举的且A为其枚举器。如下方式构造一个图灵机M,使其识别语言L:
在一条带上模拟这个枚举器A,并把结果输出到带子上(就是接管了打印机的功能)
每当有一个单词在带子上打印出来之后,图灵机M就比较这个单词和w,并且当相等时u,输出接受。
正确性:
当w∈Lw\in Lw∈L,则在某一时刻,www必然会被打印出来,那么这时候M会输出接受
当w∉Lw\notin Lw∈/L,则w永远都不会被打印出来,M就会不停也就不会输出接受
半可判定→\rightarrow→递归可枚举
假设L是半可判定的且被图灵机M所识别。如下方式构造一个枚举器A给语言L:
注:因为目的是要将能被图灵机M接受的词输出打印出来,但是对于某些词,M可能无限不停机。因此我们模拟是只运行固定步骤,然后采用多轮次进行模拟,每轮多模拟一个词,这样就解决了无限多个词语无限多步的冲突
在第k轮里(k=1,2,3,…)
枚举器A用图灵机M模拟w1,w2,...,wkw_1,w_2,...,w_kw1,w2,...,wk中每个词,并且每个词只运行k步
在模拟过程中每当M接受了某个词,那么枚举器A就会把这个词打印出来
正确性:
很明显,构造出来的这个枚举器只接受来自于L的词。那么需要证明该枚举器是否能打印出所有来自L里的单词。
- 令wiw_iwi是语言L中的一个单词。那么wiw_iwi会被图灵机M在有限步骤tit_iti时接受
- 所以,k轮过后(k≥max{i,ti}k\ge \mathbb{max}\{i,t_i\}k≥max{i,ti}),wiw_iwi在每一轮都会被打印出来
封闭性
当两个语言L1L_1L1和L2L_2L2是递归可枚举的,则
- L1∩L2L_1\cap L_2L1∩L2递归可枚举
- L1∪L2L1\cup L_2L1∪L2递归可枚举
引理:
当一个语言L⊆Σ∗L\subseteq\Sigma^*L⊆Σ∗和其补集Lˉ:=Σ∗−L\bar L:=\Sigma^*-LLˉ:=Σ∗−L都是递归可枚举时,则LLL是可判定的
用子程序技术即可证明这个引理
Hˉ\bar HHˉ和Hˉϵ\bar H_\epsilonHˉϵ不是递归可枚举的
证:因为停机问题H是递归可枚举的,当Hˉ\bar HHˉ也是递归可枚举的,则根据上述引理可推出停机问题是可判定的。然而事实是停机问题不可判定,所以Hˉ\bar HHˉ不是递归可枚举的。
同理Hˉϵ\bar H_\epsilonHˉϵ不是递归可枚举的。
可计算性语言分类
观察:每一个语言L都属于以下四个类别里中的一个
- L可判定的(L和Lˉ\bar LLˉ都是递归可枚举的)
- LLL是递归可枚举的,而Lˉ\bar LLˉ不是
- Lˉ\bar LLˉ是递归可枚举的,而LLL不是
- LLL和Lˉ\bar LLˉ都不是递归可枚举的
归约
定义:令L1L_1L1和L2L_2L2是两个关于字母集Σ\SigmaΣ的语言。我们称L1L_1L1在L2L_2L2上可归约的(L1≤L2L_1\le L_2L1≤L2),当存在一个可计算的函数f:Σ∗→Σ∗f: \Sigma^*\rightarrow \Sigma^*f:Σ∗→Σ∗,使得对于所有的x∈Σ∗x\in \Sigma^*x∈Σ∗满足:x∈L1⇔f(x)∈L2x\in L_1 \Leftrightarrow f(x)\in L_2x∈L1⇔f(x)∈L2.
即x∈L1⇒f(x)∈L2;x∉L1⇒f(x)∉L2x \in L_1 \Rightarrow f(x)\in L_2;x\notin L_1 \Rightarrow f(x)\notin L_2x∈L1⇒f(x)∈L2;x∈/L1⇒f(x)∈/L2
定理:如果两个语言L1≤L2L_1\le L_2L1≤L2
L2L_2L2可判定的⇒\quad \Rightarrow \quad⇒$ L_1$可判定的
L2L_2L2递归可枚举的⇒\quad \Rightarrow \quad⇒ L1L_1L1递归可枚举的
L1L_1L1不可确定的⇒\quad \Rightarrow \quad⇒$ L_2$不可判定的
L1L_1L1不是递归可枚举的⇒\quad \Rightarrow \quad⇒L2L_2L2不是递归可枚举的
使用子程序技术即可证明:
完全停机问题
定义:Htot={<M>∣M在每一个输入都会停}H_{tot} = \{<M>|M在每一个输入都会停\}Htot={<M>∣M在每一个输入都会停}
就是HtotH_{tot}Htot里的图灵机不存在对于某个输入会不停
定理:Hˉtot\bar H_{tot}Hˉtot和HtotH_{tot}Htot都不是递归可枚举的
证明:
已知Hˉϵ\bar H_\epsilonHˉϵ不是递归可枚举的,那么需要证:
- Hˉϵ≤Hˉtot\bar H_\epsilon \le \bar H_{tot}Hˉϵ≤Hˉtot
- Hˉϵ≤Htot\bar H_\epsilon \le H_{tot}Hˉϵ≤Htot
Hˉϵ≤Hˉtot\bar H_\epsilon \le \bar H_{tot}Hˉϵ≤Hˉtot
构造一个可计算的函数fff,使得对于x∈Σ∗x\in \Sigma^*x∈Σ∗有x∈Hˉϵ→f(x)∈Hˉtot;x∉Hˉϵ→f(x)∉Hˉtot\quad x\in \bar H_\epsilon \rightarrow f(x)\in \bar H_{tot};\quad x\notin \bar H_\epsilon \rightarrow f(x)\notin \bar H_{tot}x∈Hˉϵ→f(x)∈Hˉtot;x∈/Hˉϵ→f(x)∈/Hˉtot,构造方式如下:
令www是Hˉϵ\bar H_\epsilonHˉϵ的一个输入
当www不是哥德尔数时,直接令f(w)=wf(w) = wf(w)=w
当w=<M>w=<M>w=<M>对于一个图灵机M,则令f(w):=<Mϵ∗>f(w):=<M_\epsilon^*>f(w):=<Mϵ∗>是图灵机Mϵ∗M_\epsilon^*Mϵ∗的哥德尔数,并且该图灵机有以下行为:
Mϵ∗M_\epsilon^*Mϵ∗忽略它的输入直接模拟M在输入为ϵ\epsilonϵ时的行为
正确性证明:
w∈Hˉϵ⇒f(w)∈Hˉtotw\in \bar H_\epsilon \Rightarrow f(w)\in \bar H_{tot}w∈Hˉϵ⇒f(w)∈Hˉtot
w∉Hˉϵ⇒f(w)∉Hˉtotw\notin \bar H_\epsilon \Rightarrow f(w)\notin \bar H_{tot}w∈/Hˉϵ⇒f(w)∈/Hˉtot
首先当w不是哥德尔数时,满足w∈Hˉϵw\in \bar H_\epsilonw∈Hˉϵ和f(w)∈Hˉtotf(w)\in \bar H_{tot}f(w)∈Hˉtot
当w=<M>w=<M>w=<M>是一个图灵机的哥德尔数时,
Hˉϵ≤Htot\bar H_\epsilon \le H_{tot}Hˉϵ≤Htot
构造一个可计算的函数fff,使得对于x∈Σ∗x\in \Sigma^*x∈Σ∗有x∈Hˉϵ→f(x)∈Htot;x∉Hˉϵ→f(x)∉Htot\quad x\in \bar H_\epsilon \rightarrow f(x)\in H_{tot};\quad x\notin \bar H_\epsilon \rightarrow f(x)\notin H_{tot}x∈Hˉϵ→f(x)∈Htot;x∈/Hˉϵ→f(x)∈/Htot,构造方式如下:
令www是Hˉϵ\bar H_\epsilonHˉϵ的一个输入。令w′w'w′是来自于HtotH_{tot}Htot的任意一个输入。
当w不是一个有效的哥德尔数时,令f(w)=w′f(w) = w'f(w)=w′
当w=<M>w=<M>w=<M>是一个有效的哥德尔数时,则令f(w):=<M′>f(w):=<M'>f(w):=<M′>,图灵机M′M'M′在长度为lll的输入x时如下运行:
首先M′M'M′模拟在lll步骤内模拟输入ϵ\epsilonϵ在M上面的行为。当M在这lll步内停下来,那么M′M'M′就进入无线循环;否则M没有在这lll步内停下来则M′M'M′停止
正确性证明:
w∈Hˉϵ⇒f(w)∈Htotw\in \bar H_\epsilon \Rightarrow f(w)\in H_{tot}w∈Hˉϵ⇒f(w)∈Htot
w∉Hˉϵ⇒f(w)∉Htotw\notin \bar H_\epsilon \Rightarrow f(w)\notin H_{tot}w∈/Hˉϵ⇒f(w)∈/Htot
首先当w不是哥德尔数时,满足w∈Hˉϵw\in \bar H_\epsilonw∈Hˉϵ和f(w)=w′∈Htotf(w) = w'\in H_{tot}f(w)=w′∈Htot
当w=<M>w=<M>w=<M>是一个图灵机的哥德尔数时,
解题思路
可判定证明:
设计出图灵机使其对于所有该语言中的词都接受,不属于该语言的都不接受
使用可计算性问题
交并补
的封闭性证明该语言和其补集都是递归可枚举的
不可判定证明:
- 对角化构成矛盾, 当问题出现对于第i个语言,然后Mi不接受,就可以用
- 如果问题描述的是图灵机计算一个偏函数,则可以使用Satz von Rice定理
- 规约,将某个已判定不可判定问题规约到该问题上
- 子程序技术
递归可枚举证明:
- 构造一个图灵机,使得所有属于语言L的词能被这个图灵机接受,其他的不能被接受
不可递归可枚举证明:
- 先证明不可判定,然后证明补集递归可枚举即可
- 规约,将某个不可递归可枚举的问题规约到该问题上
计算性和复杂度理论2相关推荐
- 原创:语义相似度(理论篇)
原创:语义相似度(理论篇) 如果本文观点有不对的地方,欢迎指正! author:佟学强 开场白:对于事物的理解,一般分3个层次:①看山是山,看水是水②看山不是山,看水不是水③看山是山,看水是水.对AI ...
- 可逆计算:下一代软件构造理论
可逆计算:下一代软件构造理论 众所周知,计算机科学得以存在的基石是两个基本理论:图灵于1936年提出的图灵机理论和丘奇同年早期发表的Lambda演算理论.这两个理论奠定了所谓通用计算(Universa ...
- 语义相似度(理论篇)
如果本文观点有不对的地方,欢迎指正! author:佟学强 开场白:对于事物的理解,一般分3个层次:①看山是山,看水是水②看山不是山,看水不是水③看山是山,看水是水.对AI和nlp的理解,同样会有这三 ...
- 使用spark计算文档相似度
2019独角兽企业重金招聘Python工程师标准>>> 1.TF-IDF文档转换为向量 以下边三个句子为例 罗湖发布大梧桐新兴产业带整体规划 深化伙伴关系,增强发展动力 为世界经济发 ...
- ES : 软件工程学的复杂度理论及物理学解释
系统论里面总是有一些通用的专业术语 比如复杂度.熵.焓,复杂度专门独立出来,成为复杂度理论 文章摘抄于:<非线性动力学> 刘秉政 编著 5.5 复杂性及其测度 热力学的几个专业术语 熵. ...
- ML:文本、图像等数值化数据相似度计算之余弦相似度计算三种python代码实现
ML:文本.图像等数值化数据相似度计算之余弦相似度计算三种python代码实现 目录 相似度计算之余弦相似度计算 输出结果 三种python代码实现
- es6与java的相似度_计算字符串的相似度-两种解法
一直不理解,为什么要计算两个字符串的相似度呢.什么叫做两个字符串的相似度.经常看别人的博客,碰到比较牛的人,然后就翻了翻,终于找到了比较全面的答案和为什么要计算字符串相似度的解释.因为搜索引擎要把通过 ...
- 【转载保存】在python中如何用word2vec来计算句子的相似度
在python中,如何使用word2vec来计算句子的相似度呢? 第一种解决方法 如果使用word2vec,需要计算每个句子/文档中所有单词的平均向量,并使用向量之间的余弦相似度来计算句子相似度,代码 ...
- 计算字符串的相似度/华为机试(C/C++)
题目描述 对于不同的字符串,我们希望能有办法判断相似程度,我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法如下: 1 修改一个字符,如把"a"替换为" ...
- 欧几里得最短距离公式_推荐算法原理(二)欧几里得距离计算物品间相似度
在上篇文章中介绍了如何利用余弦定理计算两个物品间的相似度:KiKlaus:推荐算法原理(一)余弦定理计算物品间相似度zhuanlan.zhihu.com 这种计算方法虽然简单,但是在衡量空间两个向量 ...
最新文章
- 图解DotNet框架系列
- Web开发者必备的12款超赞jQuery插件
- web.xml隐藏html,web.xml
- SSM查看详情功能逻辑代码以及关联码表显示
- 谷歌40人发表59页长文:为何真实场景中ML模型表现不好?
- python下载文件的11种方式_Python 中常见的几种下载文件方法
- TSYS2.0对动态碎片的一点理解
- Advanced Installer Architect创作工具
- Java面试题!mysql格式化查询结果
- 四大名著红楼梦第一回 甄士隐梦幻识通灵 贾雨村风尘怀闺秀
- NanUI 无边框拖拽
- Date类和Calander类
- 从零点亮一个led灯
- Android相关简述题
- 华为交换机查看网口光功率命令
- 11款最受欢迎的亚马逊卖家工具
- 使用Excel宏来群发邮件或工资条
- Python的选择语句
- CSS---Chrome 102:新增两个 HTML 属性(-^-)
- 第十二届蓝桥杯省赛c++b组—杨辉三角形
热门文章
- pip install xx 时遇到There was a problem confirming the ssl certificate...的解决办法
- There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED]
- 联想电脑 功能键切换正常键盘模式(简单)
- 服务器网卡不显示了,重装系统后网络适配器怎么不见了?没有网络适配器解决方法...
- php满一百人随机发放奖品,php按照奖品百分比随机抽奖 阿星小栈
- python 捕捉和模拟鼠标键盘操作
- 支持向量机_4:Outliers
- 乐动手环app下载安装_乐动健康手环app下载-乐动健康客户端v2.34 安卓最新版 - 极光下载站...
- 方便快捷给 PDF 加水印
- 抓包工具Fiddler : 启动后无法打开网页_您的连接不是私密连接_隐私设置错误