计算机科学

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

3
是否
此问题是从理论计算机科学堆栈交换迁移而来的,因为可以在计算机科学堆栈交换上回答。 迁移 6年前。 有没有可能是P≠NPP≠NP\mathsf{P} \not = \mathsf{NP}和基数PP\mathsf{P}是一样的基数NPNP\mathsf{NP}?还是P ≠ N PP≠NP\mathsf{P} \not = \mathsf{NP}意味着PP\mathsf{P}和ñ PNP\mathsf{NP}必须具有不同的基数?

7
是否可以压缩随机的
我有用于模拟纸牌游戏的真实数据。我只对卡片的等级感兴趣,对西服不感兴趣。但是,它是标准的张纸牌,因此该纸牌中每个等级只能有张纸牌。每副牌的洗牌盘都洗好了,然后我将整个唱盘输出到一个文件中。因此,在输出文件中只有可能的符号分别是。( =十位)。因此,我们当然可以使用每个符号位对它们进行位打包,但是随后我们浪费了可能编码中的种。如果一次将符号分组,然后对其进行压缩,则可以做得更好,因为28 ,561 15 16 13 2 3.70044 13 52 4 3.252525213 2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,4441313132,3,4,5,6,7,8,9,T,J,Q,K,A2,3,4,5,6,7,8,9,T,J,Q,K,A2,3,4,5,6,7,8,9,T,J,Q,K,ATTT44433316161644413413413^4 =,可以“ ”放入位而不是位。对于每个可能的卡,带有随机符号的数据的理论位打包限制为log()/ log()=。但是,例如在此甲板中不能有国王。在每个套牌中,每个等级必须只有,因此熵编码每个符号下降约一半,降至约。28,56128,56128,5611515151616161313132223.700443.700443.700441313135252524443.23.23.2 好的,这就是我的想法。此数据不是完全随机的。我们知道每个等级有,因此在张卡片的每块中(称为洗牌后的卡片组),因此我们可以进行几个假设和优化。其中之一就是我们不必对最后一张卡进行编码,因为我们会知道它应该是什么。如果我们只停留在一个等级上,那将是另一个节省。例如,如果最后在甲板卡是,我们不会有编码的,因为解码器将票卡到这一点,并看到所有其他的队伍已经排满,并且将承担 “ “失踪”卡全为 s。444525252333777777777333777 因此,我对此站点的问题是,在这种类型的数据上可以获得什至更小的输出文件还有哪些其他优化方法?如果使用它们,我们能否击败每个符号位的理论(简单)位打包熵,或者甚至接近每个符号平均约位的极限熵极限?如果是这样,怎么办?3.700443.700443.700443.23.23.2 当我使用ZIP类型的程序(例如WinZip)时,我只会看到2:12:12:1压缩,这告诉我它只是在将“惰性” 位打包为444位。如果我使用自己的位打包来“预压缩”数据,那似乎会更好,因为当我通过zip程序运行数据时,我得到的压缩比是2:12:12:1。我在想的是,为什么不自己进行所有压缩(因为我比Zip程序对数据有更多的了解)。我想知道是否可以克服 log(131313)/ log(222)= 3.70044的熵“极限”3.700443.700443.70044。我怀疑我可以通过我提到的一些“技巧”来发现更多的技巧。当然,输出文件不必是“人类可读的”。只要编码是无损的,它就是有效的。 这是333百万条人类可读混洗牌组(每行111条)的链接。任何人都可以“练习”这些行的一小部分,然后再将其撕裂整个文件。我将根据此数据继续更新最佳(最小)文件大小。 https://drive.google.com/file/d/0BweDAVsuCEM1amhsNmFITnEwd2s/view 顺便说一句,如果您对这些数据用于哪种类型的纸牌游戏感兴趣,请访问我的活跃问题(悬赏分)链接。有人告诉我这是一个(很难)解决的难题,因为这将需要大量的数据存储空间。不过,一些模拟与近似概率一致。尚未提供纯粹的数学解决方案。我想这太难了。300300300 /math/1882705/probability-2-player-card-game-with-multiple-patterns-to-win-who-has-the-advant 我有一个很好的算法,可以显示位以对样本数据中的第一副牌进行编码。该数据是使用Fisher-Yates随机算法随机生成的。它是真正的随机数据,所以我新创建的算法似乎运行得很好,这让我很高兴。168168168 关于压缩“挑战”,我目前大约为每副160位。我想我可以下降到158。是的,我尝试了一下,每个卡座得到158.43位。我想我已经接近算法的极限,所以我成功降低到每副166位以下,但未能获得156位,即每张卡3位,但这是一个有趣的练习。也许在将来,我会考虑采取一些措施将每个卡座平均减少2.43位或更多。



6
停止为特定输入/假设计算的问题
根据我对停止问题不可计算的证明的理解,该问题不是可计算的,因为如果我们有一个程序P(x)计算该程序x是否停止,则在将P作为输入输入时得到了一个悖论。相同的P,具有:P(P),试图确定P是否暂停使用P本身。 所以我的问题是:暂停程序是否可以由程序P计算为P本身用作输入的所有其他程序?换句话说:止步问题是否仅在这种特殊情况下无法计算,或者证明更笼统,而我缺少某些东西?

4
如果没有排除中间定律,可以通过矛盾进行证明吗?
我最近在考虑矛盾证明的有效性。在过去的几天里,我已经阅读了有关直觉逻辑和戈德尔定理的东西,看它们是否能为我提供我的问题的答案。现在,我仍然有一些疑问仍在徘徊(也许与我阅读的新材料有关),希望能得到一些答案 (警告:您将要开始阅读具有非常混乱的逻辑基础的内容,带着一丁点的知识来接受所有内容,它应该是一个问题而不是一个答案,其中存在许多误解)。 我认为我的主要问题是,一旦我们证明不是A会导致某些矛盾,因此不是A必须为假,那么我们就得出结论,A必须为真。这部分是有道理的(特别是如果我接受排除中间法则是有意义的话),但令我困扰的是那种如何通过矛盾进行证明。首先,我们不以A开头,然后仅应用公理和推理规则(以机械方式说),然后看看将我们带到何处。它通常会产生矛盾(比如说A是正确的,或者和是正确的)。我们得出结论,不是A必须为假,所以A为真。没关系。但是我的问题是,正式系统具有什么样的保证φ¬ φ¬φ\neg \varphiϕϕ\phi如果我使用相同的过程但从A开始,那我也不会在这里遇到矛盾吗?我认为,有一些隐含的假设正在通过矛盾进行证明,即如果类似地在A人中执行相同的流程也不会产生矛盾,那么我们将获得什么样的保证呢?有没有证明是不可能的?换句话说,如果我的车床(TM)(或超级TM)永远消失了,它从假定的真实语句A开始尝试了所有公理的所有逻辑步骤一种一种A,那么这保证了它不会由于发现矛盾而停止运行? 然后,我用戈德尔的不完全性定理对我过去的问题进行了一些联系,该定理是这样的: 表达算术的形式系统F不能证明其自身的一致性(在F内)。 基本上,这使我很清楚,如果那是真的,那么保持一致性(即保证A而不是A不会发生)是不可能的。因此,似乎矛盾证明只是隐含地假设一致性得到了保证(否则,为什么它会继续前进并通过证明A成立,如果它还不知道一致性的话就不可能证明A是正确的)。和矛盾在哪里好,对于任何一对陈述A而不是A)?这是不正确的还是我错过了什么? 然后我想,好吧,让我们在公理中加入排除中间的规则,然后解决所有问题。但是后来我意识到,等一下,我们只是在定义问题而不是解决问题。如果我只是强行定义我的系统是一致的,那并不一定意味着它实际上是一致的……对吗?我只是想弄清楚这些想法,但我不确定该怎么做,但这是我在几天后从几乎所有这些概念,矛盾,排他的中间,直觉主义逻辑,戈德尔的完备性和不完备性定理… 与此相关的是,如果没有排除中间(或矛盾)的规则,似乎实际上不可能直接直接证明某件事是假的。证明系统似乎擅长证明真实的陈述,但据我所知,它无法直接表明事物是错误的。也许他们做事的方式更间接地与矛盾(当他们表明某事一定是虚假的或坏事发生)或排除在中间(在其中仅知道一个A的真实价值或我们知道另一个A的真实价值)时,提供反例(基本上表明相反的说法是正确的,因此间接使用排除中间律)。我想也许我真的想要一个有建设性的证据,证明什么是假的? 我想,如果我能知道如果我证明A不是错误的话(例如我接受矛盾),那的确可以,并且我不需要对A无限地应用所有推理规则和公理,并且可以保证A赢了没有矛盾。如果那是真的,那么我想我可以更容易接受矛盾证明。这是真的,还是哥德尔的第二次残缺保证我不能拥有这个?如果我不能做到这一点,那么令我困惑的是,这么多年的数学家甚至没有发现不一致的地方,怎么可能做数学呢?我需要依靠一致性的经验证据吗?或者例如,我通过证明superF证明F来证明F是一致的,但是由于我实际上从不需要superF而仅需要F,那么我不能满足于真正起作用吗? 我只是注意到,我的投诉也涉及到直接证据。好吧,如果我做了A的直接证明,那么我知道A是正确的……但是我怎么知道如果我做了非A的直接证明,那么我也不会得到正确的证明?似乎同一问题的重点稍有不同。

12
用于快速查找字符串之间差异的数据结构或算法
我有一个100,000个字符串数组,长度均为。我想将每个字符串与其他每个字符串进行比较,看看是否有两个字符串相差1个字符。现在,当我将每个字符串添加到数组时,我正在将其与数组中已有的每个字符串进行比较,该字符串的时间复杂度为。kkkn(n−1)2kn(n−1)2k\frac{n(n-1)}{2} k 是否有一种数据结构或算法可以比我已经做的更快地将字符串相互比较? 一些其他信息: 顺序很重要:abcde和xbcde相差1个字符,而abcde和edcba相差4个字符。 对于每一个相差一个字符的字符串对,我将从数组中删除其中一个字符串。 现在,我正在寻找仅相差1个字符的字符串,但是如果可以将1个字符的差异增加到例如2个,3个或4个字符,那就太好了。但是,在这种情况下,我认为效率比提高字符差异限制的能力更为重要。 kkk通常在20-40的范围内。

1
为什么函数式编程没有研究动态树?
动态树在解决诸如网络流,动态图,组合问题(Tarjan和Werneck的“实践中的动态树”)以及最近合并的字典(Adam Karczmarz的“ A Simple Mergeable Dictionary”)等问题中起着重要的作用, 对于动态树,我指的是1983年Sleator&Tarjan的论文“动态树的数据结构”中所述的定义。此后,在功能编程研究领域几乎没有发表任何努力。 Edward Kmett实施了ST树的一个版本,主要是作为C ++对应版本的翻译,请参阅Link-cut树。 克里斯·冈崎(Chris Okasaki)在他着名的《纯函数数据结构》一书中对Splay树做了有限的实现。 Ralf Hinze和Ross Paterson引入了称为2-3手指树的功能数据结构,但其目标与动态树的原始定义有所不同。 动态树的实现(可能是性能)根据三种方法进行划分: 线性化,其中ET树(Euler游览)发挥了重要作用。找不到纯粹的功能研究。 ST树是旗舰的路径分解,刚刚发现了Kmett的版本。 树收缩,其中顶级树,拓扑树和RC树是参与者。找不到纯粹的功能研究。 可以在Splay,AVL,红黑树上找到纯功能分析和实现,但不是动态树。前者被视为后者的影子(也称为虚拟或辅助)数据结构。 所以,我的问题是: 函数式编程研究社区不参与动态树数据结构的原因(缺点,弱点)是什么?

6
为什么必须以倒序取消未提交的事务?
我有一个数据库日志,其中有一些事务获胜(它们在崩溃之前已提交)和一些事务(尚未提交)。我们在课堂上了解到,失败者的行为必须向后撤消。 有什么理由倒退吗?谁能给出一个简单的日志示例,其中正向撤消操作将导致错误的结果?


2
组合器演算的基础集
众所周知,S和K组合器构成了组合器演算的基础集,从这个意义上说,所有其他组合器都可以用它们来表示。还有Curry的B,C,K,W基础,具有相同的属性。这样的基础一定是无限的,但我不知道其他任何一个。 我知道有很多单一组合器基础,例如Iota组合器和Fokker构建/审查的各种其他组合器。但是,这些是“不合适的”组合器,这意味着它们是用其他组合器而不是纯抽象来表示的。1 出于这个问题的目的,我只对由适当的组合器组成的基集感兴趣。 是否还存在对其他可能基础集的研究?理想的做法是按照Wolfram 对其他各种计算模型进行的研究,其中系统地研究了各种组合。我尤其对以下事情的简单示例感兴趣: 包含I组合器的最小基础集。(我用“最小”表示如果删除任何成员,它将不再是基础,因此SKI基础将不计。) 包含Y组合器或组合器(又名模仿鸟)的最小基础集ωω\omega 除S,K和B,C,K,W之外,有关组合逻辑其他可能基础的任何其他信息也将非常有帮助。 广而言之,我对作为纯机械系统的组合演算的研究感兴趣,即作为带有标记节点的二叉树上的一组转换规则的研究,不需要给出任何特定的语义解释。任何采用这种方法的资源指向都将不胜感激。(要嘲笑一只模仿鸟则采用了这种方法,但却给出了一个不完整的表述,而Barendregt的Lambda微积分与语义紧密相关,这使我很难提取我感兴趣的纯粹机械方面。) 1 确切地说:在lambda演算中,适当的组合器是形式的表达式,其中仅具有,等作为自由变量,并且不包含任何抽象。因此,例如是适当的组合器,但不是合适的组合器,因为它包含应用于lambda项的。P (X 1,X 2,... )X 1 X 2(λ X ý ž 。X (Ž Ž ))(λ X 。X (λ ÿ 。Ý ))X(λ 。X1个X2… P(x1个,X2,… ))(λ.x1x2…P(x1,x2,…))(\lambda.x_1x_2\dots P(x_1,x_2,\dots))P(x1个,X2,… )P(x1,x2,…)P(x_1,x_2,\dots)X1个x1x_1X2x2x_2( λ X ÿž。X (žž))(λxyz.x(zz))(\lambda x y z. x(z z))(λ X 。X ( λ ÿ。ÿ))(λx.x(λy.y))(\lambda …

1
线性无上下文语法的语言相等性可以决定吗?
让我们考虑两个与上下文无关的语法和并提出以下问题:,即,这两个语法是否等效?G1个G1个G_1G2G2G_2大号(ģ1个)= L (G2)大号(G1个)=大号(G2)L(G_1) = L(G_2) 通常,这个问题是无法确定的。但是,如果和都是左线性(或右线性)语法,则问题是可以确定的,因为两个语法都描述了常规语言。G1个G1个G_1G2G2G_2 我的问题是,当两个语法都是线性的时,是否可以确定相同的问题。此外,如果有人可以指向相关文献,将不胜感激!

3
什么是最有效的恒定空间排序算法?
我正在寻找一种用于int数组的排序算法,该算法不会分配除数组大小以外的任何字节,并且仅限于两条指令: 交换:将下一个索引与当前索引交换; MOVE:将光标移至+1或-1索引; 也就是说,100仅交换index之后,就不能交换非相邻索引,也不能交换索引10。什么是最有效的算法-即使用较少总移动量的算法?

5
Collat​​z递归运行多长时间?
我有以下Python代码。 def collatz(n): if n <= 1: return True elif (n%2==0): return collatz(n/2) else: return collatz(3*n+1) 该算法的运行时间是多少? 尝试: 如果表示函数的运行时间。然后,我想我有 T(n)T(n)T(n)collatz(n)⎧⎩⎨T(n)=1 for n≤1T(n)=T(n/2) for n evenT(n)=T(3n+1) for n odd{T(n)=1 for n≤1T(n)=T(n/2) for n evenT(n)=T(3n+1) for n odd\begin{cases} T(n)=1 \text{ for } n\le 1\\ T(n)=T(n/2) \text{ for } n\text{ even}\\ T(n)=T(3n+1) \text{ …

3
与NP-hard相比,为什么NP-Complete类很重要?
我正在研究计算复杂性,我想知道为什么NP-Complete(NPC)问题根本上是一门重要的课。我发现很明显,为什么我们有兴趣展示给定的NP问题是NP难题。 我也理解NPC的定义,并且知道给定的决策问题在NP中是很困难的,知道它在NP中就是NPC的意思。 但是,我不明白的是:为什么这个概念如此重要?当然,如果我们发现这在时间P运行(不论是否是在NP)任何NP-硬算法,我们已经表明,。ñP= PñP=PNP = P 为什么这个概念如此重要?

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.