计算机科学

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

1
填充糕点的路由表如何工作?
此问题是从软件工程堆栈交换迁移的,因为可以在计算机科学堆栈交换上回答。 迁移 7年前。 我正在尝试实现Pastry Distributed Hash Table,但是有些事情使我无法理解。我希望有人能澄清一下。 免责声明:我不是计算机科学专业的学生。我一生中刚上过两门计算机科学课程,但都没有涉及任何远程复杂的问题。我从事软件工作已经有多年了,所以如果我能将想法付诸实践,我觉得我已经完成了实现任务。因此,我可能只是缺少一些明显的东西。 我已经阅读了作者发表的论文[1],并且取得了一些不错的进步,但是我一直对路由表的工作原理这一点感到困惑: 该文件声称 一个节点的路由表中,RRR,被组织成⌈log2bN⌉⌈log2b⁡N⌉\lceil \log_{2^b} N\rceil 与行2b−12b−12^b - 1每个条目。路由表第n行的2b−12b−12^b - 1条目均引用一个节点,该节点的nodeId在前n位共享当前节点的nodeId,但其n + 1位具有2 b − 1可能值之一,而不是所述ñ + 1个数位在本节点的id。nnnn+1n+1n + 12b−12b−12^b - 1n+1n+1n + 1 的bbb代表一个应用程序特定的变量,通常是444。为了简单起见,让我们使用b=4b=4b=4。所以上面是 一个节点的路由表中,RRR,被组织成 ⌈log16N⌉⌈log16⁡N⌉\lceil \log_{16} N\rceil与行151515的每个条目。路由表第n行的151515个条目均引用一个节点,该节点的nodeId在前n个数字中共享当前节点的nodeId,但其n + 1个数字具有除n +以外的2 b - 1可能值之一当前节点ID中的第1位数字。nnnn+1n+1n + 12b−12b−12^b - 1n+1n+1n + 1 我很了解 此外,NNN是群集中服务器的数量。我也知道 …


1
是否有任何可识别EPAL的非常规CFG解析算法?
EPAL,甚至回文的语言,被定义为以下明确的上下文无关语法生成的语言: S→aaS→aaS \rightarrow a a S→bbS→bbS \rightarrow b b S→aSaS→aSaS \rightarrow a S a S→bSbS→bSbS \rightarrow b S b EPAL是许多解析算法的“祸根”:我还没有遇到任何能够解析任何描述该语言的语法的CFG解析算法。它通常用于表明存在明确的CFG,而这些CFG无法被特定的解析器解析。这激发了我的问题: 是否有一些解析算法仅接受适用于EPAL的明确CFG? 当然,可以为语法设计一个临时的两次通过语法分析器,以线性时间解析语言。我对解析不是专门为EPAL设计的方法感兴趣。

5
P完全性和并行计算
我最近在阅读有关检查双相似性的算法,并了解到问题是P-complete的。此外,其结果是该问题或任何P完全问题不太可能具有有效的并行算法。 最后的陈述背后的直觉是什么?

4
如何愚弄地块检验启发法?
在这里,戴夫·克拉克(Dave Clarke)提出,为了比较渐近增长,您应该画出手边的函数。作为理论上有偏见的计算机科学家,我称这个伏都教徒为阴谋,永远无法证明。再三考虑,我必须同意,这是一种非常有用的方法,有时甚至没有得到充分利用。情节是获得第一个想法的有效方法,有时这就是您所需要的。 在教授TCS时,总是有学生问:“如果我能做总是有效的X,我需要什么正式证明?” 由他的老师指出并说明谬论。有一组出色的示例示例,这些示例最终会在math.SE上进行故障转移,但这是相当数学的情况。 那么,您如何愚弄小区检验的启发式方法?在某些情况下,很难分辨出差异,例如 [ 来源 ] 进行猜测,然后检查实际功能的来源。但这并没有我所希望的那么壮观,特别是因为即使对于初学者,真正的关系也很容易从功能上发现。 是否存在(相对)渐近增长的示例,其中从函数定义中得出的真相并不明显,并且对较大图检验会给您一个完全错误的想法?都欢迎数学函数和实际数据集(例如,特定算法的运行时);不过,请不要使用分段定义的函数。nnn

5
如何应对立式棍棒挑战
此问题是从理论计算机科学堆栈交换迁移而来的,因为可以在计算机科学堆栈交换上回答。 迁移 7年前。 这个问题来自于viewstreet.com 我们给出一个整数数组表示线段,使得段的端点是和(I,Y_I) 。想象一下,从每个线段的顶部向左发射水平射线,当该射线接触另一个线段或撞击y轴时,该射线停止。我们构造了一个由n个整数组成的数组v_1,...,v_n,其中v_i等于从段i顶部射出的射线的长度。我们定义V(y_1,...,y_n)= v_1 + ... + v_n。Y={y1,...,yn}Y={y1,...,yn}Y=\{y_1,...,y_n\}(我,0 )(我,ÿ 我)v 1,。。。,v Ñ v 我我V (Ý 1,。。。,ÿ Ñ)= v 1 + 。。。+ v nnnniii(i,0)(i,0)(i, 0)(i,yi)(i,yi)(i, y_i)v1,...,vnv1,...,vnv_1, ..., v_nviviv_iiiiV(y1,...,yn)=v1+...+vnV(y1,...,yn)=v1+...+vnV(y_1, ..., y_n) = v_1 + ... + v_n 例如,如果我们有Y=[3,2,5,3,3,4,1,2]Y=[3,2,5,3,3,4,1,2]Y=[3,2,5,3,3,4,1,2],则[v1,...,v8]=[1,1,3,1,1,3,1,2][v1,...,v8]=[1,1,3,1,1,3,1,2][v_1, ..., v_8] = [1,1,3,1,1,3,1,2],如下图所示: 对于每个排列的,我们可以计算。如果我们选择一个均匀随机排列的什么是预期值?[ 1 ,。。。,Ñ ] V (Ý p …

6
解决图灵“停顿问题”的算法
此问题是从理论计算机科学堆栈交换迁移而来的,因为可以在计算机科学堆栈交换上回答。 迁移 7年前。 “ Alan Turing于1936年证明,不存在解决所有可能的程序输入对暂停问题的通用算法” 我是否可以找到一种通用算法来解决某些可能的程序输入对的暂停问题? 我是否可以找到一种或多种编程语言,对于每种使用该语言的程序,我都可以决定该程序是否终止或永远运行?

1
有解决此顶点循环覆盖问题的有效算法吗?
此问题是从数学堆栈交换迁移而来的,因为可以在计算机科学堆栈交换中回答。 迁移 3年前。 我一直在尝试找到一种算法,以找到有向图G的最大顶点循环覆盖率-即,一组不相交的循环,其中包含G中的所有顶点,并具有尽可能多的循环(我们不考虑这里的各个顶点循环)。我知道找到最小顶点循环覆盖以及找到具有精确k个循环的顶点循环覆盖的问题是NP完全的。但是最大案例呢?GGGGGGkkk 虽然我通常会找到一个有趣的答案,但是我想用于此的图实际上受其构造的限制,因此即使问题是NP完全的,对于这些特定实例也可能会有多项式解。 我们有一个整数,元素l i的列表,我们将使用S,元素s i对L进行排序后再对其进行引用。举个例子:LLLlilil_iSSSsisis_iLLL L=(1,3,2,5,0,7,4,2,6,0,8,1)S=(0,0,1,1,2,2,3,4,5,6,7,8)L=(1,3,2,5,0,7,4,2,6,0,8,1)S=(0,0,1,1,2,2,3,4,5,6,7,8) L = (1, 3, 2, 5, 0, 7, 4, 2, 6, 0, 8, 1)\\ S = (0, 0, 1, 1, 2, 2, 3, 4, 5, 6, 7, 8) 该图的顶点将与对被识别,使得升我 = Ñ和š 我 ≠ Ñ。当且仅当s j = n时,该图具有有向边(n ,i )→ (m ,j …

1
什么是系统时钟和CPU时钟?它们的功能是什么?
在阅读一本书时,我遇到了以下一段: 为了同步计算机的所有操作,使用了系统时钟(位于主板上的小石英晶体)。系统时钟会定期向所有其他计算机组件发出信号。 还有另一段: 如今,许多个人计算机都具有以200 MHz运行的系统时钟,并且与这些系统时钟同步的所有设备(例如CPU)都以系统时钟速度或系统时钟速度的倍数或分数运行。 任何人都可以告诉: 系统时钟有什么功能?在第一段中,“同步”是什么意思? “系统时钟”和“ CPU时钟”之间有什么区别吗?如果是,那么CPU时钟的功能是什么?

1
k-clique问题NP是否完整?
此问题是从理论计算机科学堆栈交换迁移而来的,因为可以在计算机科学堆栈交换上回答。 迁移 7年前。 在这本有关图论中的派系问题的维基百科文章中,它一开始就指出在图G中找到大小为K的派系的问题是NP完全的: 还对群体进行了计算机科学研究:发现图形中是否存在给定大小的群体(群体问题)是NP完全的,但是尽管有这种硬度结果,但仍研究了许多用于寻找群体的算法。 但是在另一篇有关CS中的集团问题的 Wikipedia文章中, 它说它正在解决固定大小的问题k是P中的问题,它可以在多项式时间内强行使用。 蛮力算法来检验图G是否包含k顶点集团,并找到它包含的任何此类集团,就是检查每个子图至少具有k个顶点,并检查其是否形成集团。该算法花费时间O(n ^ kk ^ 2):要检查O(n ^ k)个子图,每个子图都有O(k ^ 2)个边,需要检查其在G中的存在。因此,只要k为固定常数,就可以在多项式时间内解决该问题。但是,如果k是问题输入的一部分,则时间是指数的。 我在这里缺少什么吗?问题的措词可能有所不同?最后一句话是什么意思:“但是,当k是问题输入的一部分时,时间是指数的。” 当k是问题输入的一部分时,为什么会有差异? 我的想法是要在图G中找到大小为k的集团,就是我们首先从G中选择节点的大小为k的子集,然后测试它们是否都与其他k个节点相关,这可以以常数完成时间。重复此步骤,直到我们得到大小为k的小集团。我们可以从G中选择的k个节点的集合数为n!/ k!*(nk)!。

2
与Perl兼容的正则表达式可以识别哪些语言?
就像标题所说的那样,上周末我花了几个小时试图确定与Perl兼容的正则表达式匹配的语言类别,但不包括允许在模式内执行任意代码的任何匹配运算符。 如果您不知道什么是PCRE,请阅读此内容和本内容。 问题在于,Internet上可用的资源几乎都停留在上下文无关的语言中,PCRE可以匹配的资源更多(参见下文);但是我真的不知道在哪里可以找到更多关于这类东西的定理或论文。 特别是:PCRE显然是常规语言的超集(因为PCRE语法具有所有常规语言运算符)。 任何CFG都可以Greibach正常形式放置,从而消除了左递归。我认为可以通过(?(DEFINE)...)组的方式将语法“翻译”为匹配的子例程,从而避免通过翻译而使左递归阻塞: 每个生产的开头的非终止符成为子例程 (?<HEAD>...) 每个产品的主体都放在子例程中;终端保持原样,非终端成为过程调用(即(?&NONTERMINAL)); 通过|操作员将所有具有与头部相同的非终结符的产品进行“或” 运算((?:...)如果需要,还可以加上与的附加分组) 然后,模式变成一个(?(DEFINE)...)包含所有“翻译的”产生式的组,以及对起始符号过程的调用,以匹配整个字符串,即^(?(DEFINE)...)(?&START)$ 这应该处理任何CFG。因此,PCRE应该能够匹配任何CFL。 还有更多:让我们采用简单的语言 即字符串的语言重复两次。该语言不是CFL-CFL的抽奖引理失败。(尤其要注意 必须保持,因此,您不能仅泵送两个重复字符串的开头或结尾。)| v x w | ≤ pL = { w w | w ^ ∈ Λ∗}大号={ww|w∈Λ∗}L = \{ ww | w \in \Lambda^* \} | vxw | ≤p|vXw|≤p |vxw| \leq p 但是,PCRE可以轻松匹配此语言:^(.*)\1$。因此,我们绝对超越CFL。 以上多少?好吧,正如我所说,我不知道。我找不到关于CSL或介于两者之间的所有其他类的任何资源来下定决心。有专家愿意讨论这个吗? 附录:要求我确切指定必须允许PCRE语法的哪个子集。正如我在文章开头所写的那样,我想排除任何允许在模式内部执行任意代码的运算符,例如??{}。 就参数而言,我认为我们可以坚持使用pcresyntax(3)手册页定义的语法,该语法是Perl 5.10-5.12提供的内容的合理子集,减去了标注(因为它们不在模式内)。我不确定添加或删除回溯控制动词会改变我们可以识别的语言;如果是这样,那么弄清楚我们有哪些类和没有这些类会很好。

2
生成树问题的NP完整性证明
我正在寻找老师提出的问题中的一些提示。 所以我才发现这个决策问题是:Ñ P - C ^ ö 米p 升ë 吨ëNP-complete\sf{NP\text{-}complete} 在图,是否有在生成树包含确切组作为叶子。我发现我们可以通过减少汉密尔顿路径到这个决策问题来证明它是。G S = { x 1,x 2,… ,x n } N P - c o m p l e t eGGGGGG小号= { x1个,X2,… ,xñ}S={x1,x2,…,xn}S=\{x_1, x_2,\ldots, x_n\}Ñ P - C ^ ö 米p 升ë 吨ëNP-complete\sf{NP\text{-}complete} 但是我的老师也在课堂上问我们: 将它也是,如果不是“精确一套 ”,我们做小号Ñ P - C …

3
为什么基数排序为
在基数排序中,我们首先按最低有效位排序,然后再按第二最低有效位排序,依此类推,最后得到排序列表。 现在,如果我们有数字的列表,则需要位来区分这些数字。因此,我们进行的基数排序次数将为。每遍花费时间,因此基数排序的运行时间为nnnlognlog⁡n\log nlognlog⁡n\log nO(n)O(n)O(n)O(nlogn)O(nlog⁡n)O(n \log n) 但是众所周知,它是线性时间算法。为什么?

1
最早使用渐近时间复杂度的计算机科学论文是什么?
大O是什么时候首次用于计算机科学的,什么时候成为标准的?维基百科页面引用了SIGACT 1976年4月至6月的Knuth,Big Omicron和Big Omega And Big Theta,但该论文的开头内容如下: 我们大多数人已经习惯了使用符号来表示所有大的幅度上限为常数函数的想法 。Ø (˚F(n ))O(f(n))O(f(n))F(n )f(n)f(n)ñnn 此引号表示该想法和符号已经很普遍了。 Wikipedia页面还引用了1800年代末和1900年代初的数学论文,但这并不能完全回答问题。尤其是,我听说当时(大约在60年代和70年代,而不是1800年代末)的研究人员说,当首次使用渐近分析时,有人退缩了,说挂钟时间是一个更好的指标。但是,我从未与之交谈过的人引用过像这样的被推回的具体论文,我想找到可以证实或否认这些故事的证据。

3
图的最小生成树何时不唯一
给定一个加权的无向图G:哪些条件必须成立,以便G 有多个最小生成树? 我知道,当所有权重都不同时,MST是唯一的,但是您不能撤销此声明。如果图中有多个权重相同的多重边,则可能有多个MST,但也可能只有一个: 在此示例中,左侧的图具有唯一的MST,而右侧的图则没有。 我最能找到MST非唯一性的条件是: 考虑图G中的所有无弦循环(不包含其他循环的循环)。如果在这些循环中的任何一个中最大加权边存在多次,则该图将没有唯一的最小生成树。 我的想法是像这样一个周期 使用n个顶点,您可以精确地忽略其中一条边,但仍将所有顶点连接在一起。因此,您有多种选择来删除具有最大权重的边缘以获得MST,因此MST不是唯一的。 但是,然后我想到了这个示例: 您可以看到此图的确有一个符合我的条件的循环:(E,F,G,H),但据我所知,最小生成树是唯一的: 因此,看来我的情况不正确(或者可能不完全正确)。我非常感谢为最小生成树的非唯一性找到必要和充分条件的任何帮助。

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.