计算机科学

为学生,研究人员和计算机科学从业者提供的问答

1
为什么硬决策问题的计数变体不会自动变硬?
众所周知,2-SAT在P中。但是,对给定的2-SAT公式即#2-SAT的解数进行计数似乎是#P-hard的,这似乎很有趣。也就是说,我们有一个问题的例子,对于这个问题来说,决策很容易,但是很难计数。 但是考虑一个任意的NP完全问题(比如3-COL)。我们可以立即说一下其计数变体的硬度吗? 我真正要问的是:为什么我们需要另一个证明来显示硬决策问题的计数变体也是#P-hard?(有时您会看到简化的缩减,从而保留了解决方案的数量,依此类推)。我的意思是说,如果计数问题很容易,您也可以自动解决决策问题!那么怎么可能不难呢?(好的,也许很难,但是我不确定对硬的定义是什么)。

2
二进制搜索和插值搜索相结合背后是否有任何研究或理论?
我刚刚读过该算法是否仍可以视为二进制搜索算法?并回顾了几年前,我写了一个索引器/搜索日志文件,以按日期/时间窗口在大型纯文本文件中查找日志条目。 在这样做的同时,我决定尝试插值搜索(我不知道那是什么,我自己偶然发现了这个想法)。然后出于某种原因,我继续采用交替插值步骤与二进制拆分步骤的想法:在步骤0上,我将进行插值以确定测试点,然后在步骤1上,我将采用精确的中点等。 然后,我使用纯插值搜索,纯二进制搜索和组合尝试对系统进行了基准测试。在找到一组随机选择的时间之前,在时间和所需测试数量上,交替方法无疑是赢家。 受链接问题的启发,我只是快速搜索了“交替插值搜索和二进制搜索”,却一无所获。我还尝试了“对冲插值搜索”,如对某个答案的评论所建议的那样。 我偶然发现了一个已知的东西吗?对于某些类型的数据,它有更快的速度吗?日志文件通常在时间上很大(例如1-2 GB的文本,可能要搜索1000万行),并且日期/时间在其中的分布非常复杂,包括大量的活动,一般的高峰时间和安静时间。我的基准测试是从均匀分布的目标时间中采样得出的。

2
与非门之间的连接和图灵完整性
我知道NAND门可用于创建实现每个真值表的电路,现代计算机由NAND门构成。与非门与图灵完整性之间的理论联系是什么?在我看来,“与非”门电路比图灵机更接近有限自动机。我的直觉是,我可以构建触发器,并因此从NAND门之外构建寄存器和存储器,并且无限制的存储器是Turing完整系统的关键属性。我正在寻找更理论或数学上的解释,或关于阅读内容的指导。

3
找到数独难题的解决方案与证明该解决方案是唯一解决方案之间,有多少复杂性差异?
因此通常Sudoku是,但是这个问题扩展到谜题,并且。有许多多项式时间推导规则可以在寻找数独难题的解决方案方面取得进展。但是,有时可能需要猜测值和以下结论链以消除单元格的值或单元格的值的组合。但是,一旦找到有效的解决方案,就不能保证该解决方案是唯一的。一个有效的数独谜题应该只有一个有效的解决方案,但是在生成随机谜题时,这可能需要额外的计算才能进行验证。9 × 99×99 \times 9ñ2× n2ñ2×ñ2n^2 \times n^2n > 3ñ>3n > 3 所以,我的问题是,如果我们允许一组多项式时间推导规则(例如,数独策略中描述的最常见的规则集)以及猜测值和遵循结论,那么确定存在多少困难呢?针对给定难题的独特解决方案,而不是就非唯一解决方案的数量仅找到一个解决方案?某些类别的拼图是否有渐近差异?

1
为什么谢弗和马哈尼定理不暗示P = NP?
我敢肯定有人曾经考虑过这个问题,或者马上就将其取消了,但是为什么Schaefer的二分法理论和Mahaney关于稀疏集的定理并不意味着P = NP? 这是我的理由:创建一种语言,该语言等于由无限可确定稀疏集相交的SAT。那么也必须是稀疏的。由于不是琐碎的,仿射的,2饱和的或Horn-sat的,因此根据谢弗定理,它必须是NP完全的。但是,根据马哈尼定理,P = NP,我们有一个稀疏的NP-完全集。大号大号L大号大号L大号大号L 我在哪里错了?我怀疑我误解了/错误地应用了谢弗定理,但我不明白为什么。

7
在CPU级别如何执行程序?
我知道这是一个非常普遍的问题。但是我的想法却不同。我将在这里尝试阐明。 据我所知,由于ALU及其晶体管(如果我们在硬件级别上),CPU执行的每条指令都是机器语言,并且所有CPU都可以执行一些算术运算。 但是,此类型比理解起来容易。因此,如果所有CPU都在执行加,减等操作,那么用这些算术运算如何执行一个程序,比如说打印Hello World的JAVA程序? 我的意思是该程序如何转换为CPU的附加功能? 附言:如果此问题不适用于本网站,则表示歉意。 - - -第二部分 - - - 好的。感谢所有人以如此迅速的热情回答。我认为最好修改一下我的问题,而不是去评论所有答案并再次询问。 就是这样 首先,所有人都专门回答了Hello World的示例。这是我的错。我应该保持这种通用。您好,世界示例带来了输出设备的问题,以及它的处理方式不仅限于CPU,而这在您的答案中是正确的。 你们中的许多人也注意到我,CPU的作用不只是加法。我同意这一点。我只是没有写,而是一直假设。据我了解,这是一个过程: 从内存中读取指令(使用数据和地址总线以及程序计数器的内容) 将数据存储在CPU内部的寄存器中 现在,ALU当然会在解码指令后进行算术运算,或者如果它是if指令,则进行跳转 然后在需要时与其他资源进行通信,例如与输出设备等等。目前,除此以外的过程都是微不足道的。 因此,在步骤3中,CPU对一条指令进行解码并决定执行算术运算(此处我们假设没有其他操作要执行,例如跳转当前指令。由于算术运算大部分已完成。因此,我们坚持这样做)这就是我的可视化结束的地方。我的程序中的指令如何仅仅是CPU的算术运算。它执行该算术运算,并且该指令达到其目的。 希望这次我能说清楚。 PS:我在这里假设一个很大的假设,即ALU不仅限于我们在程序中执行的实际算术运算,而是执行所有指令(现在为二进制形式),方法是将它们相加或相减,以得出它们的结果。屈服。如果我在这里错了,那么下面的答案可以正确回答我的问题。

3
哪种研究语言比Haskell具有更强大的类型系统,为什么?
在这里我读到: Haskell肯定没有最先进的类型系统(如果算上研究语言,甚至还不算很紧密),但是在实际用于生产的所有语言中,Haskell可能是最高级的。 所以我要问两件事: 哪种研究语言比Haskell具有更强大的类型系统; 他们有什么改进。 我只是一名程序员,所以我不知道类型理论中使用的许多数学对象,如果可以的话,请提供温和的解释。


1
Karp-Lipton定理的证明
我试图理解“计算复杂性:一种现代方法”(2009年)一书中所述的Karp-Lipton定理的证明。 尤其是,这本书指出以下内容: 卡普-利普顿定理 如果NP P ∖ p ø 升ÿ,然后PH = Σ p 2。⊆⊆\subseteq P∖polyP∖polyP_{\backslash poly} =Σp2=Σ2p= \Sigma^p_2 证明: 由定理5.4,以示PH ,它足以说明,Π p 2⊆ Σ p 2和特别地它足以说明,Σ p 2包含Π p 2 -complete语言Π 2周六=Σp2=Σ2p= \Sigma^p_2Πp2⊆Σp2Π2p⊆Σ2p\Pi^p_2\subseteq \Sigma^p_2Σp2Σ2p\Sigma^p_2Πp2Π2p\Pi^p_2Π2Π2\Pi_2 定理5.4指出 对于每个,如果Σ p 我 = Π p 我然后PH = Σ p 我。也就是说,层次结构崩溃到第i个级别。i≥1i≥1i \geq 1Σpi=ΠpiΣip=Πip\Sigma_i^p = \Pi_i^pΣpiΣip\Sigma_i^p 我无法理解如何意味着ΣΠp2⊆Σp2Π2p⊆Σ2p\Pi^p_2\subseteq …

1
组合式ILP算法最快的已知复杂度?
我想知道,就Big- 表示法而言,什么是最著名的算法来解决整数线性规划?OOO 我知道问题是,所以我不期望任何多项式。而且我知道有很多启发式算法,它们都用于CPLEX等实际应用中,但是我对精确算法的形式化,最坏情况下的复杂性更感兴趣。NPNPNP 一些问题具有时间算法,其中并且是多项式。顶点覆盖,独立集合和3SAT属于此类,但通用SAT和TSP则不(据我们所知)。NPNPNPO(bnp(n))O(bnp(n))O(b^n p(n))1&lt;b&lt;21&lt;b&lt;21 < b < 2ppp 是否可以对整数编程或特定子实例发表任何此类声明? 如果有人对免费量化器Presburger算术的相关问题有参考,我也会对此非常感兴趣。

1
图灵决定类问题是否有一个完整的问题?
语言,如是在许多一减少。看到也有完整的问题也很简单。S. Schmitz [1]考虑了和\ text {REC}之间的一些类。对于这些类别,在经过特殊设计的缩减下,它们会带来完全的问题。HALTTMHALTTM\text{HALT}_{TM}RE-completeRE-complete\textsf{RE-complete}co-REco-RE\text{co-RE}ELEMELEM\text{ELEM}RECREC\text{REC} 相对于较弱的缩减,(aka)是否存在完整的问题?减少Turing是不合适的,因为它们有能力完成所有工作。我们是否应该期望这种简化是虚构的(例如,仅限于原始递归的多次缩减)?R=RE∩co-RER=RE∩co-RE\textsf{R} = \textsf{RE} \cap \textsf{co-RE}RECREC\textsf{REC} [1] 2013年以后的 Sylvain Schmitz 复杂性层次结构http://arxiv.org/abs/1312.5686

2
是否有一种有效的表达式等效算法?
例如?xy+x+y=x+y(x+1)xy+x+y=x+y(x+1)xy+x+y=x+y(x+1) 这些表达式来自普通的高中代数,但仅限于算术加法和乘法(例如),没有逆,减法或除法运算。字母是变量。2+2=4;2.3=62+2=4;2.3=62+2=4; 2.3=6 如果有帮助,我们可以禁止使用非数字表示的任何表达式;即不是也不是也不是:x 2 3 x 4111x2x2x^23x3x3x444 multilinear,除了以外没有其他幂:可以,但是不能,并且没有任何可以这样表示的东西完全扩展为乘积之和,例如,不是; X + X ý ≡ X 1 + X 1 Ÿ 1 X 2 + X 3 Ý 4 X (X + Ý )≡ X 2 + ÿ111x+xy≡x1+x1y1x+xy≡x1+x1y1x+xy \equiv x^1+x^1y^1x2+x3y4x2+x3y4x^2+x^3y^4x(x+y)≡x2+yx(x+y)≡x2+yx(x+y) \equiv x^2+y 所有一个,除以外没有其他系数:可以,但,并且没有任何可以表示为的值,例如对乘积例如不是 ; 和 X + X ý ≡ 1 …

2
是否建立了带有实数的复杂度类?
一个学生最近要求我为他们检查NP硬度证明。他们根据以下方面进行了减少: 我减少这个问题,是已知的NP完全以我的问题P(用聚当时许多一还原),所以P是NP难。P′P′P'PPPPPP 我的回答基本上是: 由于实例具有R的值,因此它不具有图灵运算能力,因此可以跳过归约。PPPRR\mathbb{R} 尽管从形式上说是正确的,但我认为这种方法不是有见地的:我们当然希望能够捕获实际价值决策(或优化)问题的“内在复杂性”,而忽略了我们在处理实际价值时面临的局限性数字; 调查这些问题还有一天。 当然,这并不总是那么容易地说,“子集总和的离散版本是NP完全的,因此连续版本也是'NP困难的”。在这种情况下,简化很容易,但是有一些著名的案例是连续版本更容易,例如线性编程还是整数编程。 在我看来,RAM模型自然可以扩展为实数。让每个寄存器存储一个实数并相应地扩展基本操作。统一成本模型仍然有意义-无论如何与离散情况一样-而对数模型则没有意义。 因此,我的问题可以归结为:是否存在确定的实值问题复杂性概念?它们与“标准”离散类有何关系? Google搜索会产生一些结果,例如this,但是我无法告诉您已建立的和/或有用的,没有的是什么。

2
微内核vs整体内核的性能
微内核将所有驱动程序实现为用户空间程序,并在内核本身中实现IPC之类的核心功能。但是,单片内核将驱动程序实现为内核的一部分(例如,以内核模式运行)。 我已经读过一些说法,微内核比单片内核慢,因为它们需要处理用户空间中驱动程序之间的消息传递。这是真的? 长期以来,大多数内核都是单片的,因为硬件太慢而无法快速运行微内核。但是,现在有许多微内核和混合内核,例如GNU / Hurd,Mac OS X,Windows NT line等。 那么,微内核的性能是否发生了变化?这种对微内核的批评在今天仍然有效吗?

2
拥有运行托管代码的最小内核的潜在陷阱是什么?
假设我要基于一个很小的本机较低层内核构建操作系统,该较低层本地内核充当托管代码解释器/运行时,并基于一个较大的较高层内核编译为非本地机器语言(Java字节码,CIL等)。类似操作系统的示例将是Singularity和Cosmos。 与纯本机解决方案相比,使用这种基础结构编写操作系统存在哪些陷阱和开发挑战?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.