Questions tagged «reference-request»

要求文献提供有关特定,狭窄问题的问题。

5
如何不解决P = NP?
有很多尝试证明或,并且自然地,许多人考虑这个问题,并提出了证明这两个方向的想法。P ≠ N PP = N PP=NP\mathsf{P} = \mathsf{NP} P ≠ N PP≠NP\mathsf{P} \neq \mathsf{NP} 我知道,有些方法已被证明行不通,而且可能还有更多失败的历史。似乎也存在许多无法克服的证明障碍。 我们要避免调查死胡同,那是什么?

4
什么是尾递归?
我知道递归的一般概念。在研究quicksort算法时,我遇到了尾递归的概念。在MIT 18:30秒的视频中,快速排序算法的视频中,教授说这是一种尾递归算法。我不清楚尾递归到底意味着什么。 有人可以举例说明这个概念吗? SO社区在此处提供了一些答案。


6
组,monoid和环在数据库计算中有什么用?
为什么像Twitter这样的公司会对诸如群,半体和环之类的代数概念感兴趣?在github:twitter / algebird上查看他们的存储库。 我所能找到的是: 有趣的近似算法(例如Bloom过滤器,HyperLogLog和CountMinSketch)的Monoid实现。这些使您可以像想数字一样思考这些复杂的操作,然后将它们加到hadoop或在线中以生成强大的统计信息和分析数据。 并在GitHub页面的另一部分中: 它最初是作为Scalding的Matrix API的一部分开发的,其中矩阵的值是Monoids,Groups或Rings的元素 。随后,很明显,该代码在Scalding和Twitter的其他项目中具有更广泛的应用。 这种更广泛的应用可能是什么?在Twitter上以及出于一般利益? 似乎数据库的组合聚合具有类单态结构。 关于Quora的相同问题:Twitter对抽象代数(与algebird一起)的兴趣是什么? 我有数学背景,但不是计算机科学家。拥有半身像和半群的“真实世界”使用将是很棒的。这些通常被认为是无用的理论构造,并且在许多抽象代数课程中都被忽略了(因为缺乏有趣的说法)。

2
量子λ演算
通常,有3种流行的方法来考虑计算:图灵机,电路和lambda演算(我将其用作大多数功能视图的全部)。这三种方法都是思考不同类型问题的卓有成效的方法,因此,不同领域使用不​​同表述。 但是,当我使用量子计算时,我只会考虑电路模型。最初,质量控制是用量子图灵机来定义的,但是据我了解,这个定义(虽然等同于量子电路,如果两者都经过精心制定的话)还没有那么有效。我完全不熟悉第三个公式(就Lambda微积分或类似的功能设置而言)。因此,我的问题是: 量子λ演算(或其他功能范例)的有用定义是什么? 通过使用此公式而不是电路模型,QIP的哪些子领域会获得更深入的了解? 笔记 我知道我忽略了许多其他流行的形式主义,例如元胞自动机,RAM模型等。我之所以将它们排除在外是因为我没有经典地考虑这些模型的经验,更不用说量子论了。 我也知道,在量子环境中还有流行的替代方法,例如基于测量的,拓扑的和绝热的。我不讨论它们,因为我不熟悉经典的对应语言。

3
最坏情况
我很难找到可以给出最坏情况良好资源,而不是稳定排序算法。有人知道任何好的资源吗?O(nlnn)O(nln⁡n)O(n \ln n) 提醒一下,这意味着它使用传入的数组,并且排序算法仅允许使用恒定的额外空间。稳定意味着具有相同键的元素在排序数组中的顺序与原始数组中的顺序相同。 例如,朴素的合并排序是最坏的情况且稳定,但使用多余的空间。可以使标准的快速排序稳定,到位,但最坏的情况是。堆排序已经到位,最坏的情况是O(n \ ln n),但不稳定。 维基百科上有一张很好的图表,说明了哪种排序算法有哪些弊端。请注意,他们没有列出列出所有具有稳定性的三个条件的排序算法,最坏情况为O(n \ ln n)且处于适当状态。O(nlnn)O(nln⁡n)O(n \ln n)O(n)O(n)O(n)O(n2)O(n2)O(n^2)O(nlnn)O(nln⁡n)O(n \ln n)O(nlnn)O(nln⁡n)O(n \ln n) 我发现Katajainen,Pasanen和Teuhola撰写了一篇名为“ Practical in-place mergesort”的论文,该论文声称就地稳定的mergesortsort变种最坏的情况。如果我正确理解了它们的结果,它们将在数组的第一个和数组的后一个上递归使用(bottom-up?)mergesort,然后使用第二个作为合并的临时空间。我仍在阅读此书,因此感谢您提供有关我是否正确解释其结果的更多信息。O(nlnn)O(nln⁡n)O(n \ln n)1414\frac{1}{4}1212\frac{1}{2}1414\frac{1}{4} 我也会对最坏情况进行稳定快速排序感兴趣。据我了解,将快速排序修改为最坏的情况需要选择一个适当的枢轴,这将破坏原本通常会享有的稳定性。O(nlnn)O(nln⁡n)O(n \ln n)O(nlnn)O(nln⁡n)O(n \ln n) 这纯粹是理论上的兴趣,我没有实际应用。我只想知道具有所有这三个功能的算法。

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


2
“真正的并发”是什么意思?
我经常听到诸如“真正的并发语义”和“真正的并发等效”之类的短语而没有任何参考。这些术语是什么意思,为什么重要? 真正的并发等效的一些例子是什么,对它们有什么需求?例如,在哪些情况下它们比更多的标准等价物(双仿真,痕量等价物)更适用?

1
给定长度的常规语言中单词数量的渐近性
对于常规语言,令为长度为中的单词。使用约旦规范形式(应用于的某些DFA的无注释转换矩阵),可以证明对于足够大的, 其中是复数多项式,是复数“特征值”。(对于小,我们可能具有形式的附加项,其中如果且为且Ç Ñ(大号)大号ñ 大号Ñ Ç Ñ(大号)= ķ Σ我= 1个 P 我(Ñ )λ Ñ 我,P 我λ 我 Ñ Ç ķ [ Ñ = ķ ] [ Ñ = ķ ] 1 ñ = ķ 0大号LLCñ(大号)cn(L)c_n(L)大号LLñnn大号LLñnnCñ(L )= ∑我= 1ķP一世(n )λñ一世,cn(L)=∑i=1kPi(n)λin, c_n(L) = \sum_{i=1}^k P_i(n) \lambda_i^n, P一世PiP_iλ一世λi\lambda_iñnnCķ[ n = k ]Ck[n=k]C_k[n=k][ n = …


5
有防布隆过滤器吗?
一个布隆过滤器能够有效地跟踪是否处理过程中已经遇到的各种值。当有许多数据项时,布隆过滤器可以节省散列表上的大量内存。与哈希表共享的Bloom筛选器的主要功能是,如果某项不是新项,则始终显示“ not new”,但将项标记为“ not new”的可能性不为零。即使是新的。 是否有行为相反的“抗布鲁姆过滤器”? 换句话说:是否存在一个有效的数据结构,如果某项是新项,它会显示“ new”,但对于某些非新项也可能会显示“ new”? 保留所有先前看到的项(例如,在排序的链表中)可以满足第一个要求,但可能会占用大量内存。考虑到第二个要求放宽,我希望这也是不必要的。 对于那些更喜欢正式对待的人,如果Bloom过滤器认为是新的,则写,否则,写,如果确实是新的,写,而否则。b (x )= 1b(x)=1b(x) = 1Xxxb (x )= 0b(x)=0b(x) = 0n (x )= 1n(x)=1n(x) = 1Xxxn (x )= 0n(x)=0n(x) = 0 然后 ; ; ; ,对于某些。Pr [ b (x )= 0 | n (x )= 0 ] = 1Pr[b(x)=0|n(x)=0]=1Pr[b(x) = …

2
是否有一种有时有效的算法来解决#SAT问题?
令为一个布尔公式,由通常的AND,OR和NOT运算符以及一些变量组成。我想计算的令人满意的作业数量。也就是说,我想找到真值的不同分配到的变量数目为其假定真值。例如,公式具有三个令人满意的赋值;有四个。这是#SAT问题。乙乙B乙乙B乙乙B乙乙B一个∨ b一种∨ba\lor b(一个∨ b )∧ (ç ∨ ¬ b)(一种∨b)∧(C∨¬b)(a\lor b)\land(c\lor\lnot b) 显然,对此问题的有效解决方案将是对SAT的有效解决方案,这不太可能,而且实际上此问题是#P完全的,因此可能比SAT严格得多。因此,我不期望有一个保证有效的解决方案。 但是众所周知,SAT本身真正困难的实例相对很少。(例如,Cheeseman 1991,“ 真正困难的问题在哪里”。)普通的修剪搜索,尽管在最坏的情况下是指数式的,但可以有效地解决许多实例。解决方法虽然在最坏的情况下是指数级的,但在实践中甚至更为有效。 我的问题是: 是否有已知算法可以快速计算一个典型布尔公式的满意赋值数量,即使这种算法在一般情况下需要指数时间也是如此?有什么比列举每个可能的任务明显更好的了吗?


1
区分决策程序vs SMT求解器vs定理证明器vs约束求解器
这些术语使我感到困惑。我认为 SAT求解器:确定命题逻辑的可满足性(使用DPLL或本地搜索)。 决策程序是确定某个可确定的一阶理论的可满足性的过程。 SMT求解器是SAT求解器+决策程序。 定理证明者表示类似动态逻辑的东西,例如KeY工具 约束求解器:我不知道。 但是我看到有人称Z3为定理证明者。因此,我不知道该如何区分这些术语。对所有这些人来说,最通用的术语是什么?谢谢。

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.