计算机科学

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

2
为什么DFS被认为具有空间复杂度?
根据这些说明,DFS被认为具有空间复杂度,其中是树的分支因子,是状态空间中任何路径的最大长度。O (b m )O(bm)O(bm)bbb米mm 在此Wikibook页面上的“ 不知情的搜索”中也是如此。 现在,有关DFS的Wikipedia文章的“信息框” 针对算法的空间复杂性提供了以下内容: O (| V| )O(|V|)O(|V|),如果遍历整个图而没有重复,则最长路径搜索长度为隐式图,而不会消除重复的节点O (O(O())) 这更类似于我认为DFS的空间复杂度,即,其中是算法达到的最大长度。O (米)O(m)O(m)米mm 我为什么认为是这种情况? 好吧,基本上,我们不需要存储除当前正在查看的路径的节点以外的任何其他节点,因此在Wikibook和我推荐给您的注释提供的分析中,没有必要乘以至。bbb 此外,根据Richard Korf 在IDA *上发表的这篇论文,DFS的空间复杂度为,其中被视为“深度截止”。Ø (d)O(d)O(d)ddd 那么,DFS的正确空间复杂度是多少? 我认为这可能取决于实现方式,因此,我希望能对不同已知实现方式的空间复杂性做出解释。

2
什么是最小约束值?
在约束满足问题中,试探法可用于提高bactracking求解器的性能。简单回溯求解器的三种常见启发式方法是: 最小剩余值(此变量仍然有多少个有效值) 度启发式(此变量影响多少其他变量) 最小约束值(什么值将为其他变量留下最多其他值) 前两个非常明显并且易于实现。首先选择在其域中剩余值最少的变量,如果存在联系,请选择影响其他变量最多的变量。这样,如果求解器中的父级步骤选择了错误的分配,则如果选择的变量变量剩余的值最少,而影响其他事情最多的话,您可能会更快地发现并节省时间。 这些很简单,定义明确,易于实现。 在我所看到的任何地方,最小约束值都没有明确定义。人工智能:一种现代方法(罗素和诺维格)说: 它更喜欢排除约束图中相邻变量的最少选择的值。 搜索“最小约束值”仅基于此教科书显示了许多大学幻灯片,没有进一步的算法信息。 为此启发式给出的唯一示例是一种情况,其中一个值选择消除了相邻变量的所有选择,而另一个则没有。该示例的问题在于,这是一个小问题,当检查潜在分配与问题约束的一致性时,将立即消除这种情况。因此,在我能找到的所有示例中,最小约束值启发式方法实际上并没有以任何方式使求解器性能受益,除了添加冗余检查带来的较小负面影响外。 我唯一想到的另一件事是测试每个变量的相邻变量的可能赋值,并计算该变量的每个可能赋值所存在的邻居的可能赋值的数量,然后对该变量的值进行排序如果选择了该值,则基于可用的邻居分配数。但是,我看不到如何对随机顺序进行改进,因为这需要测试大量变量组合并基于计数结果进行排序。 谁能提供对最小约束值的更有用的描述,并解释该最小约束值的版本将如何实际产生改进?

5
复杂度为O(n)的词频
在接受Java开发人员职位面试时,有人问我以下问题: 编写一个具有两个参数的函数: 代表文本文档的字符串,以及 提供要返回的项目数的整数。 实现函数,使其返回按单词频率排序的字符串列表,最频繁出现的单词在前。您的解决方案应在时间运行,其中是文档中的字符数。nO (n )O(n)O(n)ñnn 以下是我的回答(用伪代码),由于排序,它不是,而是时间。我不知道该怎么做时间。 O (n log n )O (n )O (n )O(n)O(n)Ø (ñ 日志n )O(nlog⁡n)O(n \log n)O (n )O(n)O(n) wordFrequencyMap = new HashMap<String, Integer>(); words = inputString.split(' '); for (String word : words) { count = wordFrequencyMap.get(word); count = (count == null) ? 1 : …

5
所有整数线性规划问题都是NP-Hard吗?
据我了解,分配问题在P中,因为匈牙利算法可以在多项式时间-O(n 3)中解决它。我也知道分配问题是整数线性规划问题,但是Wikipedia页面指出这是NP-Hard。对我来说,这意味着分配问题在NP-Hard中。 但是可以肯定,分配问题不能同时存在于P和NP-Hard中,否则P等于NP吗?维基百科页面是否仅表示解决所有ILP问题的通用算法是NP-Hard?其他一些资料指出,ILP是NP-Hard,所以这确实使我对一般的复杂性类的理解感到困惑。

3
什么是无上下文语言的补充?
我需要知道什么类别的CFL是封闭的,即什么集合是CFL的补充。我知道CFL不是在补码下关闭的,我知道P在补码下是关闭的。由于CFL PI可以说CFL的补语包含在P中(对吗?)。仍然存在一个问题,CFL的补语是P还是整个P的适当子集。对于如何显示CFL​​的补语是整个P(如果是这种情况),我将不胜感激。⊊⊊\subsetneq

2
您可以阻止中间人阅读邮件吗?
我听说过所有这些防止中间人攻击的措施,而且我想知道,如果中间人只听您的信息流而又不想更改消息本身,这怎么可能起作用? 中间的人不仅可以拿走对手交换的密钥,然后更改密钥,然后再次解密和加密消息吗? 证书如何防止这种情况? 编辑: 我听说证书颁发机构通常会说:“是的,这是另一个密钥”。但是,如何确定证书的签名没有伪造呢?

2
P和NP不等式的矛盾证明?
我试图用层次定理证明N不等于NP。这是我的观点,但是当我向老师展示并扣除后,他说这是个问题,因为我找不到令人信服的理由接受。 我们首先假设。然后,它产生,然后跟随。按照立场,我们能够将每种语言都简化为。因此,。相反,时间层次定理指出,应该有一种语言,而不是在。这将导致我们得出以下结论:在,而不在,这与我们的第一个假设相矛盾。因此,我们得出的结论是。P=NPP=NPP=NPSAT∈PSAT∈P\mathit{SAT} \in PSAT∈TIME(nk)SAT∈TIME(nk)\mathit{SAT} \in TIME(n^k)NPNPNP小号一个牛逼SAT\mathit{SAT}ñP⊆ Ť一世中号Ë(nķ)NP⊆TIME(nk)NP \subseteq TIME(n^k)一∈ Ť一世中号Ë(nk + 1)A∈TIME(nk+1)A \in TIME(n^{k+1})Ť一世中号Ë(nķ)TIME(nk)TIME(n^k)一个AAPPPñPNPNPP≠ NPP≠NPP \neq NP 我的证明有问题吗?

2
SK2演算是否是完整的基础,其中K2是翻转的K组合器?
具体地,如果我定义了一个新的ķ2ķ2K_2作为 ķ2= λ X 。(λÿ。ÿ)ķ2=λX。(λÿ。ÿ)K_2 = \lambda x. (\lambda y. y) 代替 ķ= λ X 。(λ ÿ。X )ķ=λX。(λÿ。X)K = \lambda x. (\lambda y. x) 将在{S,K2,I}{S,K2,I}\{S, K_2,I\}演算是竞争基础? 我的猜测是“不”,只是因为我似乎无法从SSS,III和K2K2K_2组合器构造常规K 组合器,但是我没有可遵循的算法,也没有很好的算法用这些组合器制作事物的直觉。 好像你可以定义 K2=KIK2=KIK_2 = K I 与正规{S,K,(I)}{S,K,(I)}\{S, K, (I)\}演算,但我不能从真正的工作向后获得的推导KķK来讲K2K2K_2,其余。 我试图证明它在功能上不完整的尝试实质上是试图穷举构造可从这些组合器获得的每个功能,以表明无论使用哪种组合器,您都将达到死胡同(您之前已经看过的功能)。我意识到,对于功能上不完整的组合器集(例如,KKK组合器自身使用时,永远不会死胡同),这不一定是正确的,但这是我的最佳想法。我总是能够使用SSS组合器来偷偷摸摸地走出我认为最终是死路一条,因此我不再对这种方法的可行性感到不确定。 我在StackOverflow上问了这个问题,但被鼓励在这里发布。我收到了关于该帖子的一些评论,但不确定我是否正确理解它们。 奖励:如果不是一个完整的基础,那么生成的语言是否仍是图灵完整的?

2
Beta扩展的汇合
令→β→β\to_\beta是λ微积分中的ββ\beta约简。定义β -expansion ← β由牛逼“ ← β ŧλλ\lambdaββ\beta←β←β\leftarrow_\betat′←βt⟺t→βt′t′←βt⟺t→βt′t'\leftarrow_\beta t \iff t\to_\beta t'。 是←β←β\leftarrow_\beta融合?换句话说,我们有任何l,d,rl,d,rl,d,r,如果l→∗βd←∗βrl→β∗d←β∗rl \to_\beta^* d\leftarrow_\beta^* r,则存在uuu这样l←∗βu→∗βrl←β∗u→β∗rl\leftarrow_\beta^* u \to_\beta^* r? 关键字:向上汇合,倒置CR属性 我开始看弱属性:本地汇合(即,如果l→βd←βrl→βd←βrl \to_\beta d\leftarrow_\beta r,然后l←∗βu→∗βrl←β∗u→β∗rl\leftarrow_\beta^* u \to_\beta^* r)。即使这是正确的,但由于ββ\beta扩展是非终止的,所以这并不意味着融合,但是我认为这将有助于我理解障碍。 (顶部)的情况下都减少是在顶层,设定成为(λx1.b1)a1→b1[a1/x1]=b2[a2/x2]←(λx2.b2)a2(λx1.b1)a1→b1[a1/x1]=b2[a2/x2]←(λx2.b2)a2(\lambda x_1.b_1)a_1\rightarrow b_1[a_1/x_1]=b_2[a_2/x_2]\leftarrow (\lambda x_2.b_2)a_2。直到进行αα\alpha命名,我们可以假设x1≠x2x1≠x2x_1\not =x_2,那么x1x1x_1和x2x2x_2都不是免费的。 (掷)如果x1x1x_1不处于自由b1b1b_1,我们有b1=b2[a2/x2]b1=b2[a2/x2]b_1=b_2[a_2/x_2],因此具有(λx1.b1)a1=(λx1.b2[a2/x2])a1←(λx1.(λx2.b2)a2)a1→(λx2.b2)a2(λx1.b1)a1=(λx1.b2[a2/x2])a1←(λx1.(λx2.b2)a2)a1→(λx2.b2)a2(\lambda x_1.b_1)a_1=(\lambda x_1.b_2[a_2/x_2])a_1\leftarrow(\lambda x_1.(\lambda x_2.b_2)a_2)a_1\rightarrow (\lambda x_2.b_2)a_2。 对于情况(顶部)的归纳(在b1b1b_1和b2b2b_2)的幼稚证明将如下所示: 如果b1b1b_1是变量y1y1y_1, 如果y1=x1y1=x1y_1=x_1,设定成为(λx1.x1)a1→a1=b2[a2/x2]←(λx2.b2)a2(λx1.x1)a1→a1=b2[a2/x2]←(λx2.b2)a2(\lambda x_1.x_1)a_1\rightarrow a_1=b_2[a_2/x_2]\leftarrow (\lambda x_2.b_2)a_2,我们确实有(λx1.x1)a1=(λx1.x1)(b2[a2/x2])←(λx1.x1)((λx2.b2)a2)→(λx2.b2)a2(λx1.x1)a1=(λx1.x1)(b2[a2/x2])←(λx1.x1)((λx2.b2)a2)→(λx2.b2)a2(\lambda x_1.x_1)a_1=(\lambda x_1.x_1)(b_2[a_2/x_2])\leftarrow (\lambda x_1.x_1)((\lambda …

2
涉及非理性数字的语言不是CFL
我正在一本教科书中进行艰苦的练习,但我不知道该如何进行。这是问题所在。假设我们的语言为其中是一些无理数。我如何证明不是上下文无关的语言?大号= { 一个我b Ĵ:我≤ Ĵ γ ,我≥ 0 ,Ĵ ≥ 1 } L={aibj:i≤jγ,i≥0,j≥1}L = \{a^ib^j: i \leq j \gamma, i\geq 0, j\geq 1\}γ γ\gamma大号LL 在是理性的情况下,构造接受该语言的语法非常容易。但是因为不合理,所以我真的不知道该怎么办。看起来没有任何抽水式引理可以在这里工作。也许Parikh的定理在这里适用,因为从直觉上看,这种语言没有伴随的半线性Parikh图像。γ γ\gammaγγ\gamma 此练习摘自第4章练习25的Jeffrey Shallit撰写的“形式语言和自动机理论第二门课程”。 我将非常感谢您的帮助或朝着正确的方向前进。谢谢!

5
Lambda微积分发生器
我不知道在哪里可以问这个问题,我希望这是一个好地方。 我只是想知道是否有可能制造一个lambda演算生成器;本质上,在给定无限时间的情况下,一个循环会产生所有可能的lambda微积分函数。(如字符串形式)。 由于Lambda演算非常简单,因此只有少数几个元素可以表达(我认为不是很有用),但从最简单的组合开始就可以生成所有可能的Lambda表达式。微积分功能。 当然,我对lambda微积分几乎一无所知,所以我不知道这是否真的可能。 是吗?如果是这样,它是否像我所设想的那样简单明了,或者从技术上讲是可能的,但是如此困难以至于实际上是不可能的? PS。我不是在谈论减少beta的函数,而是在谈论每个lambda演算函数的每个有效符号。

2
如何得出依赖类型的消除符?
在依赖类型的编程中,有两种主要的方法来分解数据并执行递归: 相关模式匹配:函数定义作为多个子句给出。统一可确保所有遗漏的情况都是不可能的,并且外部求解器可确保有充分的递归依据。 消除符:每个归纳数据类型都有一个关联的常数E D,它充当归纳原理,并充当分解类型D的值的递归函数。它们比较冗长,但是具有总计(所有情况都由E D覆盖)并通过构造终止的优点。ddDËdËdE_DddDËdËdE_D 我已经看到了常见数据类型的消除器,例如,其中消除器基本上是数学归纳法,或者L i s t,其中消除器基本上是折叠。ñ一个牛逼ñ一个ŤNat大号我小号吨大号一世sŤList 我已经阅读了几篇有关依存模式匹配的论文,并且许多论文都引用了类型理论,在其中可以定义数据类型,并且该理论提供了消除符。例如,消除相关模式匹配描述了UTT如何基于消除符,以及在存在公理的情况下如何将模式匹配转换为消除。我的理解是,一旦定义了数据类型,该理论便提供了消除器。ķķK 我没有发现(或者至少没有发现,如果我没看过的话)很好地描述了如何导出消除符,包括其类型和语义。 有人可以指出我的引用,该引用描述了如何从数据类型的定义中获得消除符吗?

1
基因编程与今天相关吗?
我主要关心的是基因编程是否是活跃的研究领域,并且在实践中有一些有希望的应用。似乎在机器学习领域中,神经网络是主要的流行语,在当今的主流新闻中都有提及,但我从未听说过类似的基因编程“成功故事”。

2
是否有用于实验比较运行时的标准?
我的情况 我正在写一篇论文,介绍我开发的软件模块,并且想将其运行时间与同一任务的其他模块进行比较。我知道运行时实验的弊端,但请假设在我的情况下无法解决它。(我可以并且确实可以从理论上推论出某些属性,但是并不能满足所有要求。) 我想用于基准测试的特定方案有两个参数:问题的复杂度 和确定详细问题的随机种子 r。我主要想展示对n的依赖 。根据初步研究和理论,r对运行时的影响很小或可以忽略。单个任务最多需要十分钟才能完成。nnnrrrnnnrrr 实际问题 我正在寻找一些进行此类实验的公认或公开程序,或者至少要列出一些常见的陷阱(理想情况下已发布)。 我到目前为止发现的 没有。互联网搜索会产生各种各样无关的结果,但是我可能没有使用正确的术语。包括最低关键字(我知道这是一个很好的标准)(请参见下文)也没有帮助。 我会怎么做 尽可能在禁用了GUI等潜在干扰软件的情况下,在同一台计算机上运行所有实验。 使所有模块经受场景的相同选择,即,相同的和 r。nnnrrr 对于每种情况,请以随机顺序彼此直接直接测试不同的模块。换句话说,不同模块之间的循环是最里面的模块。这应避免由于机器性能的缓慢波动(例如,由于温度变化)而对不同模块造成偏差。随机顺序应避免由于诸如缓存之类的影响而产生偏差,或者避免一个模块总是在同一模块之后进行测试。 nnn

1
图灵在曼彻斯特计算机上神秘的小程序计算了什么?
我正在阅读Turing的“计算机与智能计算”论文(https://www.csee.umbc.edu/courses/471/papers/turing.pdf),发现其中有一段片段: 我在曼彻斯特计算机上设置了一个仅使用1,000个存储单元的小程序,通过该程序,提供了一个16位数字的计算机会在两秒钟内回复另一个。我无视任何人从这些答复中学习到的有关程序的足够知识,以便能够预测对未尝试值的任何答复。 在我看来,这似乎是机器学习的问题:)但撇开我对AI的兴趣,我的问题如下: 有谁知道什么该方案是在做什么? 我很好奇 PS:从输入和输出的长度来看,我怀疑这是一种加密算法,但是我希望您能从实际程序中获得任何线索。

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.