计算机科学

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

5
图灵完善意味着什么?
我看到大多数关于图灵完备的定义在一定程度上都是重言式的。例如,如果您的Google“图灵完全意味着什么”,您将获得: 如果计算机可以解决图灵机可以解决的任何问题,那么图灵计算机就是完整的。 尽管已经很好地定义了不同的系统是否都完成了Turing,但我还没有看到关于Turing完成的含义/后果的解释。 在不存在还可以执行相同任务的非图灵机的情况下,图灵机可以做什么?例如,一台计算机可以执行诸如之类的简单计算(1+5)/3=?,但是普通的计算器也可以执行这些计算,如果我是对的,那是非图灵完整的。 有没有一种方法可以定义Turing Machine的功能而不仅仅是说“能够模拟另一台Turing Machine”?


4
是否存在NP问题,而不是P和NP Complete中没有?
NPNP\mathsf{NP}(不是PP\mathsf{P})是否存在NPNP\mathsf{NP}完全的已知问题?我的理解是,在这种情况下,目前没有已知的问题,但尚未排除它的可能性。 如果存在一个问题NPNP\mathsf{NP}(而不是PP\mathsf{P}),但不NP-completeNP-complete\mathsf{NP\text{-}complete},这会是该问题的实例和之间没有现有同构的结果集?如果这种情况下,我们怎么会知道ñ P问题不是“难”比我们目前确定为ñ P - ç Ø 米p 升é 牛逼é集?NP-completeNP-complete\mathsf{NP\text{-}complete}NPNP\mathsf{NP}NP-completeNP-complete\mathsf{NP\text{-}complete}

2
关于“论真正教计算机科学的残酷”
迪克斯特拉(Dijkstra)在他的论文《关于真正教授计算科学的残酷性》中,提出了有关编程入门课程的以下建议: 一方面,我们教看起来像谓词演算的事物,但与哲学家却截然不同。为了训练新手程序员如何使用未解释的公式,我们将其更多地讲授布尔代数,使学生熟悉逻辑连接词的所有代数性质。为了进一步切断与直觉的联系,我们将布尔域的值{true,false}重命名为{black,white}。 另一方面,我们讲授一种简单,干净,命令式的编程语言,以跳过和多重赋值作为基本语句,具有局部变量的块结构,以分号作为语句组合的运算符,一种不错的替代构造,一种不错的方法。重复,以及(如果需要)过程调用。为此,我们添加了最少的数据类型,例如布尔值,整数,字符和字符串。至关重要的是,无论我们引入什么内容,相应的语义都是由附带的证明规则定义的。 从一开始,贯穿整个过程,我们强调程序员的任务不仅是编写程序,而且他的主要任务是提供形式证明,证明他提出的程序符合同样正式的功能规范。在设计证明和程序的同时,学生有充分的机会利用谓词演算来完善自己的操作敏捷性。最后,为了向人们传达这种入门编程课程主要是形式数学课程的信息,我们发现有问题的编程语言尚未在校园内实施,因此可以保护学生免受测试其程序的诱惑。 他强调这是一个认真的建议,并概述了各种可能的反对意见,包括他的想法“完全不现实”和“太难了”。 但事实证明,那只风筝不会放飞,因为事实证明是错误的:自80年代初以来,每年都有数百位大学新生成功地参加了这样的入门编程课程。[因为根据我的经验,说这一次是不够的,所以前一句话至少应再重复两次。] Dijkstra指的是哪门课程,并且还有其他文献可以讨论吗? 这篇论文发表于1988年,当时Dijkstra在德克萨斯大学奥斯汀分校的时候,这可能是一个线索-他们托管Dijkstra档案,但馆藏很大,我特别想听听其他人对这门课程的兴趣。 我不想在这里讨论Dijkstra的想法是好的还是现实的。我考虑过将此内容发布在cstheory.se或cs.se上,但因为在这里定居下来,是因为a)一个教育工作者社区可能更容易有人可以轻松回答,并且b)Dijkstra本人强调他的课程“主要是形式数学。” 如果您不同意,请随时举报迁移。

1
用最少的移动来装满垃圾箱难道难道不是NP?
有nnn垃圾箱和mmm种球。在iii个箱具有标签ai,jai,ja_{i,j}为1≤j≤m1≤j≤m1\leq j\leq m,它的类型的滚珠的预期数量jjj。 您从类型j的bjbjb_j球开始。每个类型j的球的重量为w j,并希望将球放入箱中,使得箱i的重量为c i。保持先前条件成立的球的分布称为可行解。jjjjjjwjwjw_jiiicicic_i 考虑一个可行的解决方案,其中xi,jxi,jx_{i,j} bin i中的类型为jjjj个球,则成本为∑ n i = 1 ∑ m j = 1 | | | | |。a i ,j − x i ,j | 。我们希望找到一种最低成本的可行解决方案。iii∑ni=1∑mj=1|ai,j−xi,j|∑i=1n∑j=1m|ai,j−xi,j|\sum_{i=1}^n \sum_{j=1}^m |a_{i,j}-x_{i,j}| 如果对{wj}{wj}\{w_j\}没有限制,那么这个问题显然是NP问题。子集和问题简化为可行解的存在。 但是,如果我们加上一条,wjwjw_j分歧wj+1wj+1w_{j+1}为每个jjj,然后将子集和减少不再起作用,所以目前还不清楚是否造成问题仍然存在NP难题。检查是否存在可行解仅需O(nm)O(nm)O(n\,m)时间(附在问题末尾),但这不能为我们提供最低成本的可行解决方案。 该问题具有等效的整数程序公式。给定ai,j,ci,bj,wjai,j,ci,bj,wja_{i,j},c_i,b_j,w_j为1≤i≤n,1≤j≤m1≤i≤n,1≤j≤m1\leq i\leq n,1\leq j\leq m: Minimize:subject to:∑i=1n∑j=1m|ai,j−xi,j|∑j=1mxi,jwj=ci for all 1≤i≤n∑i=1nxi,j≤bj for all 1≤j≤mxi,j≥0 for all …



2
天真的改组在渐近性上有多糟糕?
众所周知,这种“天真的”算法通过将每个项目与另一个随机选择的项目交换来改组数组,无法正常工作: for (i=0..n-1) swap(A[i], A[random(n)]); 具体来说,由于在次迭代中的每一次迭代中,都会做出选择之一(概率均等),因此通过计算存在可能的“路径”。因为可能的排列数为不能均匀地将路径数目划分为,该算法不可能产生路径中的每一个等概率排列。(相反,应该使用所谓的Fischer-Yates随机播放,这实际上改变了从[0..n]中选择随机数的调用与从[i..n]中选择随机数的调用;不过,这很无聊。)n nnn nnn nnnn^n n !n!n!n nnnn^n n !n!n! 我想知道的是,天真洗牌有多“糟糕”?更具体地说,令为所有置换的集合,令为通过朴素算法生成的最终置换的路径数,则的渐近行为是什么。功能P (Ñ )P(n)P(n)Ç (ρ )C(ρ)C(\rho)ρ ∈ P (Ñ )ρ∈P(n)\rho\in P(n) M(n)=n!nnmaxρ∈P(n)C(ρ)M(n)=n!nnmaxρ∈P(n)C(ρ)\qquad \displaystyle M(n) = \frac{n!}{n^n}\max_{\rho\in P(n)} C(\rho) 和 m(n)=n!nnminρ∈P(n)C(ρ)m(n)=n!nnminρ∈P(n)C(ρ)\qquad \displaystyle m(n) = \frac{n!}{n^n}\min_{\rho\in P(n)} C(\rho)吗? 首要因素是“标准化”这些值:如果幼稚的随机播放“渐近良好”,则 limn→∞M(n)=limn→∞m(n)=1limn→∞M(n)=limn→∞m(n)=1\qquad \displaystyle \lim_{n\to\infty}M(n) = \lim_{n\to\infty}m(n) = 1。 我怀疑(基于我见过的一些计算机模拟)实际值的界线是1,但是甚至知道limM(n)limM(n)\lim M(n)是有限的,还是limm(n)limm(n)\lim m(n)是界线的呢? …

2
Dana Angluin用于学习常规集的算法是否有改进
Dana Angluin在1987年的开创性论文中提出了一种多项式时间算法,用于从成员资格查询和理论查询(拟议DFA的反例)中学习DFA。 她表明,如果您尝试学习具有个状态的最小DFA ,而最大的countexample的长度为m,那么您需要进行O (m n 2)个成员资格查询,最多需要进行n − 1个理论查询。nnnmmmO(mn2)O(mn2)O(mn^2)n−1n−1n - 1 学习常规集所需的查询数量是否有了重大改进? 参考文献和相关问题 Dana Angluin(1987)“从查询和反例中学习规则集”,《启发与计算》 75:87-106 成员资格查询和反例模型中的学习下限

4
集合和类型之间的语义区别到底是什么?
编辑:我现在已经问过有关类别和集合之间差异的类似问题。 每当我读到类型理论(这诚然是相当非正式的),我无法真正了解它集理论的不同之处,具体。 我知道说“ x属于一个集合X”和“ x是类型X”之间存在概念上的区别,因为从直觉上讲,集合只是对象的集合,而类型具有某些“属性”。尽管如此,集合通常也根据属性进行定义,如果确实如此,那么我将很难理解这种区别的重要性。 所以在最具体的方式可能,究竟是什么暗示 关于xxx的说,它的类型是,比说,这是集合的元素?TTTSSS (您可以选择任何类型和设置以使比较最清晰)。
33 type-theory  sets 

4
什么是动态编程?
抱歉,这个问题听起来很愚蠢。 据我所知,使用动态编程构建算法的工作方式如下: 将问题表达为递归关系; 通过备忘或自下而上的方法来实现递归关系。 据我所知,我已经说了有关动态编程的一切。我的意思是:动态编程不会提供工具/规则/方法/定理来表达递归关系,也不会将其转化为代码。 那么,动态编程有什么特别之处呢?除了解决某些问题的模糊方法之外,它还能给您带来什么?

4
O和Ω与最坏情况和最佳情况有何关系?
今天,我们在一次讲座中讨论了一种非常简单的算法,该算法可使用二进制搜索在排序数组中查找元素。我们被要求确定元素数组的渐近复杂度。nnn 我的想法是,显然,或更具体,因为\ log_2 n是最坏情况下的操作数。但是我可以做得更好,例如,如果我第一次点击搜索到的元素-那么下界是\ Omega(1)。O(logn)O(log⁡n)O(\log n)O(log2n)O(log2⁡n)O(\log_2 n)log2nlog2⁡n\log_2 nΩ(1)Ω(1)\Omega(1) 讲师将解决方案表示为Θ(logn)Θ(log⁡n)\Theta(\log n)因为我们通常只考虑算法的最坏情况输入。 但是,仅考虑最坏的情况时,如果给定问题的所有最坏情况具有相同的复杂度(\ Theta是我们所需要的,对吗?),用OOO和ΩΩ\Omega意义何在?ΘΘ\Theta 我在这里想念什么?

3
硬件/实现会影响算法的时间/空间复杂度吗?
我什至都不是CS学生,所以这可能是一个愚蠢的问题,但是请忍受... 在前计算机时代,我们只能用抽屉数组来实现数组数据结构。由于一个有定位与从它提取值之前对应的索引的抽屉,阵列查找的时间复杂度是,假设二进制搜索。Ø(升Ò 克(n ))Ø(升ØG(ñ))O(log(n)) 但是,计算机的发明产生了很大的变化。现代计算机可以如此快速地从其RAM中读取数据,因此我们现在认为数组查找的时间复杂度为(即使从技术上讲也不是这种情况,因为将寄存器移至更远的距离需要花费更多时间,等等)O (1 )Ø(1个)O(1) 另一个例子是Python字典。虽然人们可能会得到一本字典访问的复杂性与病人写重载魔术方法(或可笑的坏运气,即具有大量的散列冲突的键),它通常被认为是Ø (1 )。在这种情况下,时间复杂度既取决于Python字典的哈希表实现,也取决于哈希函数的键的实现。O (n )Ø(ñ)O(n)__hash__O (1 )Ø(1个)O(1) 这是否意味着硬件/实现会影响算法的时间复杂度?(虽然这两个示例都是关于数据结构而不是算法,但后者是建立在前者之上的,而且我从未听说过数据结构的时间复杂性,因此在这里我使用术语“算法”) 对我来说,算法是抽象的和概念性的,它们的属性(例如时间/空间复杂度)不应受到是否以特定方式实现而受到影响,但它们是吗?

2
平面常规语言
在我的课上,一个学生问是否可以画出所有有限的自动机而不会交叉边缘(看来我的所有例子都做到了)。当然答案是否定的,这是语言{x∈{a,b}∗∣#a(x)+2#b(x)≡0mod5}{x∈{a,b}∗∣#a(x)+2#b(x)≡0mod5}\{\; x\in\{a,b\}^* \mid \#_a(x)+2\#_b(x) \equiv 0 \mod 5 \;\}K5K5K_5 我的问题是:如何显示这种语言的每个有限状态自动机都是非平面的?使用Myhill-Nerode之类的特征,可以确定该语言的结构已出现在图表中,但是我们如何精确地做到这一点呢? And if that can be done, is there a characterization of "planar regular languages"?


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.