计算机科学

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

3
什么是分阶段功能(概念上)?
在CACM的最新文章[1]中,作者提出了分阶段功能的实现。他们使用该术语好像它是众所周知的,并且所有参考文献似乎都不是显而易见的介绍。 他们给了一个简短的解释(重点是我的和参考编号已更改;原来是22) 在程序生成的上下文中,由Taha和Sheard [2]建立的多级编程(MSP,简称暂存)允许程序员显式地将程序表达式的求值延迟到较晚的阶段(因此,暂存一个表达式)。当前阶段有效地充当代码生成器,该代码生成器组成(并可能执行)下一阶段的程序。 但是,塔哈(Taha)和谢德(Sheard)写道(重点是我): 多阶段程序是一个涉及代码生成,编译和执行的程序,所有程序都在同一进程内。多阶段语言表示多阶段程序。暂存以及因此的多阶段编程可满足对通用解决方案的需求,而这些通用解决方案无需支付运行时的解释性开销。 然后,他们继续引用了一些较旧的作品,据称这些作品表明分期是有效的,这表明该概念更古老。他们没有为该术语本身提供参考。 这些陈述似乎是正交的,即使不是矛盾的。也许Rompf和Odersky写的是Taha和Sheard提出的应用,但也许是对同一件事的另一种看法。他们似乎同意,重要的一点是程序会在运行时重新编写其自身的部分,但是我不知道这是否是必要的和/或足够的能力。 那么,什么是分期分别在此背景下举办的解释?这个词从哪里来? 轻量级模块化分段: T. Rompf和M. Odersky(2012)的一种实用方法,用于生成运行时代码和编译DSL W. Taha和T.Sheard(2000)的带有显式注释的MetaML和多阶段编程

3
NFA的等效DFA达到最大大小的条件是什么?
我们知道DFA在表达能力上等同于NFA。还有一种已知算法的NFA转换成有限自动机(可惜我现在知道算法的发明者),在最坏的情况下为我们提供了2S2S2^S状态,如果我们的NFA有SSS的状态。 我的问题是:什么决定最坏的情况? 这是模棱两可的情况下算法的转录: 令为NFA。我们构建了一个DFA 甲' = (Q ',Σ ,δ ',q ' 0,˚F '),其中A=(Q,Σ,δ,q0,F)A=(Q,Σ,δ,q0,F)A = (Q,\Sigma,\delta,q_0,F)A′=(Q′,Σ,δ′,q′0,F′)A′=(Q′,Σ,δ′,q0′,F′)A' = (Q',\Sigma,\delta',q'_0,F') ,Q′=P(Q)Q′=P(Q)Q' = \mathcal{P}(Q) ,F′={S∈Q′|F∩S≠∅}F′={S∈Q′|F∩S≠∅}F' = \{S \in Q' | F \cap S \neq \emptyset \} ,和δ′(S,a)=⋃s∈S(δ(s,a)∪δ^(s,ε))δ′(S,a)=⋃s∈S(δ(s,a)∪δ^(s,ε))\delta'(S,a) =\bigcup_{s \in S} (\delta(s,a) \cup \hat \delta(s,\varepsilon)) ,q′0={q0}∪δ^(q0,ε)q0′={q0}∪δ^(q0,ε)q'_0 = \{q_0\} \cup \hat \delta(q_0, \varepsilon) 其中δ是所述扩展过渡函数甲。δ^δ^\hat\deltaAAA

3
什么时候AKS素数测试实际上比其他测试快?
我试图了解我如何了解AKS素数测试,例如证明PRIMES⊆P的推论,或用于计算机素数测试的实际实用算法。 该测试具有多项式运行时,但具有高度和可能的高常数。那么,实际上,在哪一个nnn方面超过其他素性检验?在这里,nnn是质数的位数,“超越”是指典型计算机体系结构上测试的大概运行时间。 我对功能上可比的算法感兴趣,这是确定性的算法,不需要为正确性而猜测。 另外,考虑到测试的内存需求,在其他测试中使用这种测试是否可行?

4
建构主义逻辑中是否存在不确定的语言?
建构主义逻辑是一个排除公理的排除中间定律和双重否定的系统。它在Wikipedia的此处和此处进行了描述。特别是,该系统不允许矛盾证明。 我想知道,是否有人熟悉这如何影响有关Turing Machines和形式语言的结果?我注意到,几乎所有关于语言不确定性的证明都依赖于矛盾证明。对角化论证和归约概念都以这种方式工作。会否存在一种不确定语言存在的“建设性”证据?如果是,那它将是什么样? 编辑:很清楚,我对建构主义逻辑中的矛盾证明的理解是错误的,答案已经澄清了这一点。

3
SML中的函子和范畴论之间有什么关系?
与Andrej Bauer在此答案中的陈述相同的想法 Haskell社区开发了许多受类别理论启发的技术,其中最著名的是monad,但不应将其与monad混淆。 之间是什么关系仿函数的SML和函子范畴论? 由于我不了解其他语言(例如Haskell或OCaml)中函子的详细信息,因此,如果有有价值的信息,请同时添加其他语言的部分。

2
“ NP完全”优化问题
此问题是从Stack Overflow 迁移而来的,因为可以在Computer Science Stack Exchange上回答。 迁移 7年前。 我对所遇到的关于优化问题的复杂性的某些术语感到有些困惑。在算法课程中,我遇到了一个大的简约问题,被描述为NP-complete。但是,我不确定在优化问题中术语“ NP完全”的含义。这是否仅表示相应的决策问题是NP完全的?这是否意味着优化问题实际上可能会更困难(也许在NP之外)? 尤其是,我担心这样一个事实,即一个NP完全决策问题可以通过多项式时间验证,而解决相应优化问题的方法似乎并不是多项式时间可验证的。这是否意味着问题并非真正存在于NP中,还是多项式时间可验证性只是NP决策问题的特征?


1
量子计算和图灵机:图灵机是否仍是一种精确的度量?
上周在课堂上,我的教授评论说,图灵机被用作可计算内容的标准度量/模型,是对该主题进行讨论的有用基础。她还说,图灵机的所有变体都被证明在计算上是等效的-读起来一样强大-彼此一样。w ^ 昨天,我评论并说,关于可计算性,我注意到某些图灵机可能花费大量时间来计算非常简单的内容,而带有更多磁带的图灵机可以计算出数量相对较低的渐近复杂性需要的步骤。 她说,关于课堂讨论,图灵机上特定算法的运行时间不会改变可计算性的定义,也不会改变我们衡量可计算性的能力。“我们担心的是此时可计算的内容,而不是有效地计算的内容。” 因此,图灵机是否有越来越多的磁带并不重要,越来越多的磁带意味着它可以以更少的步骤进行计算。好的,我知道我们实际上是在关注可计算的内容,而不是计算的速度。 到目前为止,渐进时间和空间复杂度异常大的算法确实定义了可计算的极限,也许我应该说。 因此,我有几个问题: 假设我们有一个量子图腾机的模型,它必须等效于“常规”图腾机,对吗? 因此,我认为该问题的答案实际上与我撰写本文的原因有关。量子计算技术是否过时了通过图灵机可计算的经典定义? 这是我头上的东西吗,我应该删除此帖吗?我并不是说要早熟,我只是没有看到类似我的问题。

2
如果我可以解决数独问题,可以解决旅行商问题(TSP)吗?如果是这样,怎么办?
我们说有一个程序,如果您提供任意大小的部分填充的数独,它会为您提供相应的完整数独。 您可以将此程序视为黑匣子,并用它来解决TSP吗?我的意思是,有一种方法可以将TSP问题表示为部分填充的Sudoku,以便如果我给您Sudoku的答案,您可以在多项式时间内告诉TSP解决方案? 如果是,怎么办?如何将TSP表示为部分填充的数独,并为结果解释相应的填充的数独。

2
是否有任何编程语言都使用通用递归函数作为基础?
这是一个幼稚的问题,因此可能是畸形的问题,因此请您提前道歉! 我的观点是,图灵机可以看作是过程/命令式编程语言的计算基础。同样,lambda演算是函数式编程语言的基础。 我最近了解到,Church-Turing论文还显示了与第三种计算模型的等效性:通用递归函数。是否有任何编程语言将其用作其计算模型?如果不是,是否有技术原因?即,除了“没有人尝试过”之外?

1
是否有可能证明Coq中的暂停问题尚不确定?
我正在观看安德烈·鲍尔(Andrej Bauer)的“ 接受建构主义数学的五个阶段 ”,他说存在两种矛盾的证明(或者数学家称之为矛盾证明的两件事): 假设是错误的……等等等等,矛盾。因此,P为真。PPPPPP 假设是真的...等等等等,矛盾。因此, P为假。PPPPPP 第一个等效于排除中间定律(LEM),第二个等效于如何证明否定。 停止问题(HP)的不确定性证明是通过矛盾证明:假设有一台机器可以决定HP ...等等等等,这是矛盾的。因此,D不存在。dDDdDD 因此,让为“ D存在并可以决定HP”。假设P是真的...等等等等,矛盾。因此,P为假。PPPdDDPPPPPP 这看起来像是第二种矛盾的证明,因此可以证明Coq中暂停问题的不确定性(不假设LEM)吗? 编辑:我会看到一些有关使用矛盾证明这一点的观点。我知道使用对角线化也可以证明这一点。




8
每个表达式都有意义的编程语言
根据建议,我将从Stack Overflow重新发布。 最近,我一直在考虑以下问题。 考虑标准“ Hello world!”的代码。程序: main() { printf("Hello World"); } 现在,此代码中的几乎任何更改都将使其完全无用,实际上,几乎所有更改都会阻止代码进行编译。例如: main(5 { printf("Hello World"); } 现在到实际的问题。是否存在一种编程语言,其中每种符号的可能组合(即每种表达式)都有意义?我尝试考虑某种解决方案,并提出了两种解决方案: 后缀数量有限。基本上,在编写任何代码之前,所有变量都已经定义好了,您只需要使用它们。从理论上讲,您可以通过形成许多简单程序的链来执行任意数量的操作,每个简单程序将结果馈给其他程序。代码可以用后缀符号表示为一系列字符。 “ Postfix”带有一堆变量。变量存储在堆栈中;每个操作从顶部开始取两个变量,并将结果放在它们的位置。程序在到达最后一个操作或变量时结束。 我个人讨厌这两个。它们不仅局限,而且优雅。它们甚至不是真正的解决方案,更像是变通方法,本质上是将某些工作“外包”到外部流程中。 有谁有其他想法如何解决这个问题?

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.