计算机科学

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

2
确定最小堆(或其他奇异)状态机的功能
有关最小堆自动机的定义的一些说明,请参见文章末尾。 可以想象使用各种数据结构来存储供状态机使用的信息。例如,下推式自动机将信息存储在堆栈中,而图灵机使用磁带。已经证明,使用队列的状态机以及使用两个多个堆栈或磁带的状态机在功率上与图灵机相同。 想象一下一个最小堆机器。它的工作原理完全类似于下推式自动机,但以下情况除外: 不必查看添加到堆中的最后一件事,而只需查看堆中当前的最小元素(按机器定义顺序)。 不必删除当前添加到堆中的最后一个东西,而仅删除当前堆中最小的元素之一(按机器定义顺序)。 只能将元素的位置根据堆中的其他元素确定(以在每台计算机上定义的顺序),而不是在堆顶部添加元素。 只需不使用堆,该机器就可以接受所有常规语言。它也可以接受的语言通过加入一个 “S到堆,并除去一个 ”从堆S.当它读取b的。它可以接受多种其他无上下文语言。但是,它不能接受,例如,{ w ^ ∈ { 一,b } * | w ^ = w ^ [R }{anbn∈{a,b}∗∣n≥0}{anbn∈{a,b}∗∣n≥0}\displaystyle \{a^{n}b^{n} \in \{a, b\}^{*} \mid n \ge 0\}aaaaaabbb{w∈{a,b}∗∣w=wR}{w∈{a,b}∗∣w=wR}\displaystyle \{w \in \{a, b\}^{*} \mid w = w^{R}\}(未经证明陈述)。编辑:还是可以?我不认为这可以,但是我以前很惊讶,而且我敢肯定,当我的假设使我变得...很好时,我会一直感到惊讶。 它可以接受任何上下文相关或图灵完备的语言吗? 更一般而言,朝着这个方向进行了哪些研究(如果有的话)?有什么结果(如果有)?我还对其他种类的奇异状态机感兴趣,可能是那些使用其他数据结构进行存储或各种访问限制(例如,如何限制LBA的TM)的机器。参考被赞赏。如果这个问题表明无知,我先向您道歉。 正式定义: 我在这里提供了最小堆自动机的一些更详细的定义,以阐明参考该材料的问题中的进一步讨论。 我们将类型1不确定的最小堆自动机定义为7元组,其中...(Q,q0,A,Σ,Γ,Z0,δ)(Q,q0,A,Σ,Γ,Z0,δ)(Q, q_0, A, \Sigma, \Gamma, Z_0, …

6
学习自动定理证明
我正在独自学习自动定理证明 / SMT求解器 / 证明助手,并从此处开始发布有关该过程的一系列问题。 请注意,如果没有(数学)逻辑的背景知识,就很难轻易消化这些主题。如果您对基本术语有疑问,请继续阅读,例如M. Huth和M. Ryan 撰写的《计算机科学中的逻辑》(特别是第一,第二和第四章),或者P撰写的《数学逻辑与类型理论导论》。安德鲁斯。 有关高阶逻辑(HOL)的简短介绍,请参见此处。 我看着考克(Coq),并阅读了伊莎贝尔(Isabelle)简介的第一章;自动定理证明的类型 我认识Prolog已有几十年了,现在正在学习F#,因此ML,O'Caml和LISP很有用。Haskell是另一种野兽。 我有以下书籍 艾伦·罗宾逊和安德烈·冯科夫编辑的《自动推理手册》 约翰·哈里森(John Harrison)的“实用逻辑和自动推理手册” Franz Baader和Tobias Nipkow撰写的“术语重写和所有内容” Coq和Isabelle有什么区别? 我应该学习Isabelle还是Coq,或者两者都学习? 首先学习Isabelle或Coq有优势吗? 在此处找到系列的下一个问题。

3
人类为什么可以解决某些“无法确定”的问题?
高阶模式匹配是一个不确定的问题。这意味着不存在算法,给定的公式a => b,其中a和b是在简单类型λ演算的开放式术语,认定的取代S,使得aS => bS,其中=>代表“具有相同的BN正常形式”。但是,人类可以有效地解决该问题。例如,给定以下问题: a = (λt . t (F (λ f x . (f (f (f x))))) (F (λ f x . (f (f x))))) b = (λ t . t (λ f x . (f (f (f (f (f (f x))))))) (λ f x . (f (f …






9
为什么图灵的某些编程语言比较完整,但缺乏其他语言的某些功能?
在编写(应该)挂钩到外部程序/函数的解释器时遇到一个奇怪的问题:'C'和'C ++'中的函数不能挂钩可变参数,例如,我无法创建调用'printf'的函数具有与它完全相同的参数,而必须调用采用可变参数的替代版本。这是非常有问题的,因为我希望能够制作一个持有匿名钩子的对象。 因此,我认为这很奇怪,因为Forth,JavaScript和也许其他多种语言都可以很容易地做到这一点,而不必求助于汇编语言/机器代码。由于其他语言可以很容易地做到这一点,这是否意味着每种编程语言可以解决的问题类别实际上也会因语言而有所不同,即使这些语言都已经完成了图灵处理?

5
迭代可以代替递归吗?
我一直看到堆栈溢出,例如here,here,here,here,here以及其他我不愿提及的其他内容,“任何使用递归的程序都可以仅通过迭代转换为程序”。 甚至还有一个非常upvoted 线程具有高度upvoted 答案是肯定的说,这是可能的。 现在我不是说他们错了。只是这个答案抵消了我对计算的微薄知识和理解。 我相信每个迭代功能都可以表示为递归,而维基百科对此有一个陈述。但是,我怀疑相反是真的。首先,我怀疑非原始递归函数是否可以迭代表示。 我也怀疑超级运算是否可以迭代表示。 在对我的问题 @YuvalFIlmus的回答(我不明白)中,他说不可能将任何数学运算序列转换为一系列加法运算。 如果YF的答案确实是正确的(我想是的,但是他的推理超出了我的脑袋),那么这是否意味着并非每个递归都可以转换为迭代?因为如果有可能将每个递归转换为迭代,我将能够将所有操作表示为一系列加法。 我的问题是这样的: 可以将每个递归转换为迭代吗,为什么? 请给一个聪明的高中生一个答案,或者本科一年级的学生会理解。谢谢。 PS我不知道什么是原始递归(我确实知道Ackermann函数,它不是原始递归,但仍然可以计算。我对它的了解也来自Ackermann函数的Wikipedia页面。) PPS:如果答案是肯定的,例如您可以编写非原始递归函数的迭代版本。例如,答案是Ackermann。它会帮助我理解。

11
为什么有人要CISC?
在我们的计算机系统讲座中,我们介绍了MIPS处理器。它是在整个学期中开发的,实际上非常容易理解。它使用RISC设计,即其基本命令定期进行编码,只有少数命令可以使接线简单。 有人提到,CISC遵循不同的哲学。我简短地看了一下x86指令集,感到震惊。我无法想象任何人会如何构建使用如此复杂命令集的处理器! 因此,我认为必须有一个很好的论据,为什么处理器市场的大部分都使用CISC体系结构。这些是什么?

1
想象一棵红黑的树。是否总会有一系列插入和删除操作来创建它?
让我们假设以下是红黑树的定义: 它是二叉搜索树。 每个节点都被涂成红色或黑色。根是黑色的。 通过边连接的两个节点不能同时为红色。 像Wiki一样,这应该是NIL叶的良好定义。NIL叶为黑色。 从根到任何NIL叶的路径都包含相同数量的黑色节点。 题 假设您已经为红黑树实现了insert和delete操作。现在,如果为您提供了有效的红黑树,是否总有一个构造它的insert和序列delete? 动机 这个问题是由这个问题和这个问题的讨论引起的。 就个人而言,我确实相信,如果您想象一个仅由黑色节点组成的有效红黑树(这意味着您正在想象一个完美平衡的树),那么将有一个由insert和delete构成的序列。然而, 我不知道如何准确证明 我也对更一般的情况感兴趣


3
对比Peterson和Dekker的算法
我试图理解Peterson和Dekker的算法,它们非常相似并且显示出很多对称性。 我试图用非正式语言来制定算法,如下所示: Peterson's: "I want to enter." flag[0]=true; "You can enter next." turn=1; "If you want to enter and while(flag[1]==true&&turn==1){ it's your turn I'll wait." } Else: Enter CS! // CS "I don't want to enter any more." flag[0]=false; Dekker's: "I want to enter." flag[0]=true; "If you want to enter …

2
用于构建快速拼写检查器的高效数据结构
我正在尝试编写一个拼写检查器,该检查器应与相当大的词典一起使用。我真的想要一种有效的方法来索引我的字典数据,该数据将使用Damerau-Levenshtein距离来确定哪些单词最接近拼写错误的单词。 我正在寻找一种数据结构,该结构将在空间复杂度和运行时复杂度之间取得最佳折衷。 根据我在互联网上发现的信息,我对使用哪种类型的数据结构有一些建议: 特里 这是我的第一个想法,看起来很容易实现,应该提供快速的查找/插入。使用Damerau-Levenshtein进行的近似搜索在此处也应易于实现。但是就空间复杂度而言,它看起来不是很有效,因为指针存储很可能会带来很多开销。 帕特里夏·特里(Patricia Trie) 这似乎比常规的Trie占用更少的空间,因为您基本上避免了存储指针的成本,但是对于像我一样的非常大的字典,我有点担心数据碎片。 后缀树 我不确定这一点,似乎有些人确实发现它在文本挖掘中很有用,但是我真的不确定它对于拼写检查器的性能会有什么帮助。 三元搜索树 这些看起来不错,并且在复杂性方面应该与Patricia Tries接近(更好?),但是我不确定碎片是否比Patricia Tries更好。 爆裂树 这似乎是一种混合,我不确定它比Tries等具有什么优势,但是我已经读过好几次了,它对于文本挖掘非常有效。 我想就哪种数据结构最适合在这种情况下使用以及什么使它比其他结构更好的问题得到一些反馈。如果我缺少一些更适合拼写检查的数据结构,我也很感兴趣。

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.