﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-&lt;table border="0" cellspacing="0" cellpadding="0" style="margin-left:5%;display:inline;height:30px;"&gt;&lt;tr&gt;&lt;td style="font-weight:bolder; font-size:16px; line-height:30px;"&gt;一年十二月&amp;nbsp&amp;nbsp谁主春秋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-size:14px; line-height:30px;"&gt;关注：基础系统工程 密码学 人工智能&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;-随笔分类-Compute Theory</title><link>http://www.cppblog.com/qinqing1984/category/21447.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 18 Mar 2026 02:16:32 GMT</lastBuildDate><pubDate>Wed, 18 Mar 2026 02:16:32 GMT</pubDate><ttl>60</ttl><item><title>关于（零知识）计算复杂性的总结</title><link>http://www.cppblog.com/qinqing1984/archive/2024/02/09/230277.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Fri, 09 Feb 2024 14:19:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2024/02/09/230277.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230277.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2024/02/09/230277.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230277.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230277.html</trackback:ping><description><![CDATA[<strong style="font-size: 12pt;">经典的复杂性关系</strong>&nbsp;<br />
&nbsp;P是多项式时间确定型图灵机可识别的语言类，NP是多项式时间<span style="color: #ff0000;">非确定型</span>图灵机可识别的语言类，NPC表示NP完全问题类，coNP表示NP的补，coNPC表示NPC的补。确定型图灵机是一种从不选择移动的特殊的非确定型图灵机，故自然有P属于NP<br />
<br />
&nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/classical-complexity-classes.png" alt="" /><br />
&nbsp;<br />
&nbsp;<strong>coNP、coNPC的定义之集合表述</strong><br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/conp-conpc-define-with-set.png" width="176" height="46" alt="" /><br />
&nbsp;上面顶部的图有个假设前提是：<span style="color: #ff00ff;">coNPC不属于NP</span>，即我们相信NP完全问题的补都不属于NP。但<span style="color: #ff0000;">当P=NP或NP=coNP</span>时，可以发现coNPC属于NP<br />
<strong><span style="font-size: 10pt;"><br />
&nbsp;&#9670;&nbsp;</span>为什么coNPC属于coNP？<br />
</strong>&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-conpc-belongto-conp.png" width="269" height="115" alt="" /><br />
<span style="font-weight: bold; font-size: 10pt;"><br />
&nbsp;&#9670;&nbsp;</span><strong>为什么NPC 不属于coNP？</strong><br />
<strong>&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-npc-nobelongto-conp.png" width="335" height="122" alt="" /></strong><br />
<span style="font-size: 13.3333px; font-weight: 700;"><br />
&nbsp;&#9670;&nbsp;</span><strong>为什么P属于coNP?</strong><br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-p-belongto-conp.png" width="272" height="115" alt="" /><br />
<br />
<span style="font-size: 13.3333px; font-weight: 700;">&nbsp;&#9670;&nbsp;</span><strong>当P=NP时，为什么NP=coNP？<br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-np-eq-conp-while-p-eq-np.png" alt="" /><br />
</strong><span style="font-size: 13.3333px; font-weight: 700;">&nbsp;&#9670;&nbsp;</span><strong>当NP=coNP时，为什么NPC=coNPC？<br />
&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-npc-eq-conpc-while-np-eq-conp.png" width="708" height="309" alt="" /><br />
<br />
</strong>
<div>&nbsp;前文的关系演变图没考虑多项式空间问题类PS与递归问题类（因为那两个条件不会影响到它们），<strong>PS（NPS）</strong>是带多项式空间限制的确定型（非确定型）图灵机可接受的语言类，但不限制运行时间可能需超多项式或指数时间，在外围加上PS与递归语言类后如下<br />
<br />
&nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/classical-complexity-classes2.png" alt="" /><br />
<span style="font-size: 13.3333px; font-weight: 700;"><br />
&nbsp;&#9670;&nbsp;</span><strong>为什么coNP 属于PS？<br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-conp-belongto-ps.png" width="269" height="160" alt="" /><br />
<br />
</strong><strong style="font-size: 11pt;">&nbsp; 用于分析加密</strong><strong style="font-size: 12pt;"><br />
</strong><strong>
</strong>&nbsp; &nbsp; 无论对称还是公钥加密，统一设加密运算为E，解密为D。对于正常用户，E和D皆为DTM（确定性图灵机）；对于敌手，若攻击对称加密，则E和D为NTM（非确定性图灵机），攻击公钥则解密为NTM。由于E和D输入为密钥和明文或密文，因此DTM和NTM可采用多道/多带结构。DTM代表P类计算，NTM代表NP类计算，故对于公钥加密安全保障要求<span style="color: red;">P!=NP</span>，这是一个<span style="color: red;">必要条件</span>。另根据计算理论定理，必有L(NTM)=L(DTM)，但是它对应的DTM可能要多花费指数时间，这亦说明破解公钥的解密是困难的
<br />
<br />
<br />
<strong style="font-size: 12pt;">
零知识复杂性关系</strong><br />
<div>&nbsp; 依据Oded Goldreich的《密码学基础》，关系如下<br />
<br />
&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/zk-complexity-classes-set.png" width="577" height="330" alt="" /><br />
<div>&nbsp; <br />
&nbsp; 相关原文片段引用如下</div>
</div>
<strong style="font-size: 12pt;">
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/zk-complexity-classes.PNG" width="540" height="412" alt="" /><br />
</strong>&nbsp;&nbsp;<strong>BPP</strong>是可被概率多项式时间图灵机(即随机化算法)识别的语言类，IP是所有具有交互证明系统的语言构成的类，等于多项式空间语言类即前文经典复杂性关系中的PS，如下图所述<br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/zk-ip-eq-pspace.PNG" width="540" height="161" alt="" /><br />
&nbsp; &nbsp;<strong>SZK!=CZK</strong>是因为计算不可分辨不一定能推出统计不可分辨，<strong>BPP!=PZK</strong>之原因可理解为BPP是退化的特殊的完备交互证明系统（证明者什么都不做，仅由验证者概率性地决定是否接受或拒绝）。<br />
&nbsp;当（非均匀）单向函数存在时<strong>CZK=IP</strong>，涉及的命题与定理如下<br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/one-way-fun-exist-prg-exist.PNG" width="536" height="196" alt="" /><br />
<hr />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/prg-bit-commitment-scheme.PNG" width="503" height="443" alt="" /><br />
<hr />
<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/zk-proof-system-for-ip.PNG" width="540" height="411" alt="" /><br />
<div><br />
&nbsp;也就是说PS类中的每种语言都具有零知识证明系统，比如NP有如下构造<br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/np-zk-proof-system.PNG" width="536" height="243" alt="" /></div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2024-02-09 22:19 <a href="http://www.cppblog.com/qinqing1984/archive/2024/02/09/230277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于自动机和正则的一些重要定理</title><link>http://www.cppblog.com/qinqing1984/archive/2023/09/09/230074.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Sat, 09 Sep 2023 00:11:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2023/09/09/230074.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230074.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2023/09/09/230074.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230074.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230074.html</trackback:ping><description><![CDATA[<div>1. 若DFA D是用子集构造法从NFA N构造出来的，则L(D)=L(N)</div><div>2. 一个语言L被某个DFA接受，当且仅当被某个NFA接受</div><div>3. 一个语言L被某个&#163;-NFA接受，当且仅当被某个DFA接受</div><div>4. 若对于某个DFA A，L=L(A)，则存在一个正则表达式R使得L=L(R)</div><div>5. 每一个用正则表达式定义的语言也可用有穷自动机定义</div><div>6. 若通过填表算法不能区分两个状态，则它们是等价的</div><div>7. DFA的状态等价性是传递的</div><div>8. 若对于DFA每个状态q及与q等价的所有状态组成块，则不同的状态块形成状态集合的划分。也就是说，每个状态恰好属于一个块，同一块中的所有成员都是等价的，从不同块中选择的状态对都不是等价的</div><div>9. 根据等价状态划分算法最小化DFA D得到的DFA M是唯一的。也就是说，不存在其它等价于D的DFA N，其状态数比M少<br />----------------------------------------------------------------------------------------</div><div>10. 对于正则表达式，空集是并运算的单位元、连接运算的零元，空串是连接运算的单位元</div><div>11. 若L和M都是正则语言，则L和M的并、交、差也是</div><div>12. 若L是字母表T上的正则语言，则~L=T*&#8212;L也是</div><div>13. 若L是正则语言，则L的反转也是</div><div>14. 若L是字母表T上的正则语言，h是T上的一个同态，则h(L)也是正则的</div><div>15. 若h是字母表A到字母表T的同态，且L是T上的正则语言，则逆同态h^-1(L)也是正则的</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230074.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2023-09-09 08:11 <a href="http://www.cppblog.com/qinqing1984/archive/2023/09/09/230074.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则语言R和上下文无关语言CFL的判定性质总结</title><link>http://www.cppblog.com/qinqing1984/archive/2023/09/09/230073.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Sat, 09 Sep 2023 00:09:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2023/09/09/230073.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230073.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2023/09/09/230073.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230073.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230073.html</trackback:ping><description><![CDATA[<div><strong>1. 空性</strong>：对于R，若给定形式是自动机比如&#163;-NFA，则等价于判定能否从初始状态到达接受状态，这需计算可达状态集合，若任一接受状态在里面，则为非空，否则为空。耗时不超过O(n^2)，n为自动机的状态数。若给定形式是正则表达式，则可先转为&#163;-NFA，再计算可达状态集合，如此增多转化时间O(s)，s为正则表达式的长度。也可不转为自动机，直接根据基础归纳规则用递推法判定，耗时为O(s)。 对于CFL，等价于判定开始符号是否为产生的，若是则非空，否则为空。如直接用产生变元的基础归纳法计算，那耗时O(n^2)，n为文法G的规模，接近变元的个数。一个改进的算法实现，预先建立以变元为索引的数组、每个变元的链接（产生式内链接、产生式间链接），则耗时O(n)</div><div><strong>2. 成员性</strong>：设串w的长度为n。对于R，等价于判定自动机能否接受w，若给定形式是DFA，则耗时O(n)。若给定形式是NFA，则耗时O(n*s^2)，s为状态数，如NFA有&#163;转移，那需先计算它的闭包，耗时增多O(s^2)，可见总耗时还是O(n*s^2)。若给定形式是正则表达式，则先转为NFA，耗时增多O(r)，r为表达式的长度。 对于CFL，等价于判定从文法G的开始符号S能否推导出w，一般用CYK算法构造产生式三角表，再查看S是否属于表的顶点集合，若属于则能推导出w，否则不能，耗时为O(n^3)</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2023-09-09 08:09 <a href="http://www.cppblog.com/qinqing1984/archive/2023/09/09/230073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么素检测存在概率多项式时间算法</title><link>http://www.cppblog.com/qinqing1984/archive/2023/09/09/230072.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Sat, 09 Sep 2023 00:07:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2023/09/09/230072.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230072.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2023/09/09/230072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230072.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230072.html</trackback:ping><description><![CDATA[<div>因为一个整数p，若检测为合数，这永远是真命题；而检测为素数，这命题只以较大概率成立。 可构造一种NP检测算法，步骤如下：</div>
<div>1. 猜测p（位长度n）的因子列表｛p1,p2,&#8230;pi｝，这是非确定的，每个分支耗时O(n)</div>
<div>2. 验证p1*p2*&#8230;pi？=p-1，耗时不超过O(n^2)</div>
<div>3. 若各因子乘积等于p-1，则用当前算法递归验证每个因子都是素数</div>
<div>4. 随机选择p最小剩余系内的一个数x，计算x^((p-1)/q) （q遍历上述列表经过步骤3验证过的素因子）是否都不同余于1模p，若是则必有x^(p-1)同余于1模p，则由指数整除p的欧拉数及费马小定理，知p为素数，考虑到有少量的合数也满足费马小定理，故需多次选择x重复验证，选择个数最多为log(p)</div>
<div><br />
分析：本算法涉及的数论定理&#8212;&#8212;设p是奇素数，p-1的所有素因子是q1,q2,&#8230;qs，那么g为原根的充要条件是，g^((p-1)/qj)不同余1模p，j=1,2&#8230;,s</div>
<div>
结论：第3步可以看成递归调用树，每个顶点为待检测整数，其每个子结点为一个因子，则最多n层，每层至多耗时O(n^4)，所以每个路径即检测p是否素数的非确定任一分支中，总耗时O(n^5)。 2002年，印度科学家发现素检测确定性多项式时间算法，于是从NP前进到了P</div>
<img src ="http://www.cppblog.com/qinqing1984/aggbug/230072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2023-09-09 08:07 <a href="http://www.cppblog.com/qinqing1984/archive/2023/09/09/230072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>命题与谓词逻辑可判定性</title><link>http://www.cppblog.com/qinqing1984/archive/2023/09/09/230071.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Sat, 09 Sep 2023 00:05:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2023/09/09/230071.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230071.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2023/09/09/230071.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230071.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230071.html</trackback:ping><description><![CDATA[<div><strong style="color: #ff6600;">为什么命题逻辑有效性是可判定的，而谓词逻辑有效性是不可判定的？</strong><br />因为命题逻辑由有限个合式公式及原子命题构成，且原子命题的取值只有真、假两种，简单的判定方法是真值表穷举，其复杂度为指数级：2^N，N为原子命题数量。快速的方法是先转成合取范式（输入是由否定、而且、或者、蕴含四种连接词构成的语法正确的命题逻辑公式，经过对公式结构归纳作蕴含释放、否定原子、分配律变换三步处理，同时运用DAG优化：共享终止即叶子结点、删除冗余的测试结点、删除重复的有相同子图结构的内部结点，输出等价最小的合取范式），再检测合取范式的有效性（检查所有子句，若每个子句包含至少一个原子及其否定形式，则有效，否则因为存在一种真值指派使其为假而导致整个合取范式无效），其复杂度为多项式级：N*logN+N，N为公式长度。谓词逻辑基于命题逻辑扩展，添加了变元、函数、量词&#8220;所有&#8221;与&#8220;存在&#8221;，如果量词没有约束变元范围即定义域无限，那么函数值域也是无限的，另外可能引入的自由变元不受限制，这导致了解空间是无限的，所以不存在通用算法去判定任意谓词逻辑公式是否有效，具体证明可以用pcp归约，即构造一组特定的谓词逻辑公式，它是有效的当且仅当pcp实例有解，又已知pcp是不可判定的，故该特定谓词逻辑有效性是不可判定的，由于任意包括特定，所以谓词逻辑有效性是不可判定的</div> <img src ="http://www.cppblog.com/qinqing1984/aggbug/230071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2023-09-09 08:05 <a href="http://www.cppblog.com/qinqing1984/archive/2023/09/09/230071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>