Questions tagged «ds.algorithms»

有关完成任务的明确指令的问题,以及有关时间/内存/等方面的相关分析。

30
书中的算法。
保罗·埃尔多斯(Paul Erdos)谈论了“书”,其中上帝保留了每个数学定理的最优雅的证明。这甚至启发了一本书(我相信现在是第四版):书中的证明。 如果上帝有一本类似的算法书,那么您认为哪种算法是候选人? 如果可能的话,还请提供可点击的参考以及使之起作用的关键见解。 请每个答案仅使用一种算法。

29
部署核心算法
为了证明算法的重要性(例如,对于不从事理论研究甚至是完全不同领域的学生和教授),有时手头准备一些已经在商业,政府,或广泛使用的软件/硬件。 我正在寻找满足以下条件的示例: 使用该算法的软件/硬件现在应该被广泛使用。 该示例应具体。请参考特定的系统和特定的算法。 例如,在“算法X对图像处理有用”中,术语“图像处理”不够具体;在“ Google搜索使用图算法”中,“图算法”一词不够明确。 该算法应在典型的本科生或博士学位中教授。算法或数据结构中的类。理想情况下,典型算法教科书中会介绍该算法。例如,“众所周知的系统X使用鲜为人知的算法Y”是不好的。 更新: 再次感谢您的出色回答和链接!有人评论说,很难满足标准,因为核心算法无处不在,很难指出特定的用途。我看到了困难。但是我认为值得举一些具体的例子,因为根据我的经验告诉人们:“看,算法很重要,因为算法无处不在!” 不起作用。

2
超级马里奥银河问题
假设马里奥(Mario)在行星表面行走。如果他从已知的位置开始沿固定的方向行走了预定的距离,我们将如何快速确定他将在哪里停下来? 更正式地说,假设我们在3空间中得到了凸多面体,P的表面上的起点s,方向矢量v(在包含p的某些小平面中),并且距离ℓ。我们多快可以确定P Mario的哪一面停在内部?(作为技术要点,假设如果Mario进入P的顶点,他会立即爆炸;所幸,这种情况几乎不会发生。)PPPsssPPPvvvpppℓℓ\ellPPPPPP 或者,如果您愿意:假设我们预先获得了多面体,源点s和方向向量v。预处理之后,我们能够多快地回答了一定距离的问题ℓ?PPPsssvvvℓℓ\ell 简单地跟踪Mario的足迹很容易,尤其是当仅具有三角形小平面时。每当Mario通过其边缘之一进入构面时,我们可以在O (1 )时间中确定他必须穿过其他两个边缘中的哪一个。尽管该算法的运行时间仅在边缘交叉数量上是线性的,但它不受输入大小的限制,因为距离ℓ可以任意大于P的直径。我们可以做得更好吗?PPPO (1 )O(1)O(1)ℓℓ\ellPPP (在实践中,路径长度实际上不是无限的;还有一个全球性的上界表示输入所需要的比特数的条件,但坚持整数投入提出了一些相当恶劣的数值问题-我们如何计算。正是在那里停止吗?—因此,我们坚持使用实际输入和精确的实际算术。) 关于这个问题的复杂性,有什么重要的知识吗? 更新:根据julkiewicz的评论,很明显,纯RAM的运行时间仅以(多位点的复杂性)为界是不可能的。考虑双面单元方的特殊情况下[ 0 ,1 ] 2,与马里奥开始(0 ,1 / 2 )和在行走方向(1 ,0 )。马里奥将停止在前面或取决于整数的奇偶平方的背面⌊ ℓ ⌋。除非我们很高兴,否则我们无法在真实RAM上恒定时间计算下限函数ñnn[ 0 ,1 ]2[0,1]2[0,1]^2(0 ,1 / 2 )(0,1/2)(0,1/2)(1 ,0 )(1,0)(1,0)⌊ ℓ ⌋⌊ℓ⌋\lfloor \ell \rfloor等同PSPACE和P。但是,我们可以计算在Ø (日志ℓ )通过指数检索,这是在天真的算法的指数调整时间。 在时间多项式ñ和日志ℓ总能实现?⌊ ℓ ⌋⌊ℓ⌋\lfloor \ell \rfloorO (对数ℓ )O(log⁡ℓ)O(\log \ell)ñnn日志ℓlog⁡ℓ\log \ell

11
转换字符串有多困难?
通过将字符散布到新的字符串中,从而使每个字符串的字符保持顺序,从而形成两个字符串的混洗。例如,MISSISSIPPI是一个洗牌MISIPP和SSISI。如果我将两个相同的字符串混洗,请说一个字符串平方。例如,ABCABDCDis square是因为它是ABCDand 的混洗ABCD,但是字符串ABCDDCBA不是正方形。 是否有一种快速的算法来确定字符串是方形的还是NP硬的?显而易见的动态编程方法似乎不起作用。 甚至以下特殊情况也似乎很困难:(1)每个字符最多出现四次 六次的字符串,以及(2)只有两个不同字符的字符串。 正如Per Austrin指出的那样,每个字符最多出现四次的特殊情况可以简化为2SAT。 更新: 此问题有另一种说法可以使硬度证明更容易。 考虑图G的顶点为1到n的整数。用端点之间的真实间隔来标识每个边缘。我们说,如果一个间隔适当地包含另一个,则嵌套两个G边。例如,边(1,5)和(2,3)是嵌套的,但(1,3)和(5,6)不是,而(1,5)和(2,8)不是。如果没有嵌套任何一对边,则G中的匹配是非嵌套的。 是否有一种快速的算法来确定G是否具有非嵌套的完美匹配,或者该问题是否难解决? 对字符串进行改组等效于在不相交的团体(边缘之间的字符相等)中找到一个非嵌套的完美匹配。特别地,对二进制字符串进行混排等效于在两个集团的不相交联合中找到非嵌套的完美匹配。但是我什至不知道这个问题对于一般的图形来说是困难的,还是对于任何有趣的图形类来说都不容易。 有一个简单的多项式时间算法可以找到完美的非交叉匹配。 更新(2013年6月24日):问题已解决! 现在有两个独立的证明,证明方串是NP完全的。 2012年11月,Sam Buss和Michael Soltys宣布减少3分区,这表明即使是9个字母以上的字符串,问题也很难解决。请参阅《 2014年计算机系统科学学报》中的“将正方形解混是NP-Hard ” 。 2013年6月,Romeo Rizzi和StéphaneVialette发布了最长的子序列问题的简化版本。请参见“ 关于识别随机混排乘积的平方的单词 ”,Proc。第八届俄罗斯国际计算机科学研讨会,Springer LNCS 7913,第235-245页。 还有一个更简单的证据表明,由于Shuai Cheng Li和Ming Li在2009 年,发现非嵌套完美匹配是NP困难的。请参见“ 论2区间模式的两个开放问题 ”,理论计算机科学 410(24–25) ):2410–2423,2009年。

17
价格示例的例子?
理论计算机科学提供了“抽象价格”的一些示例。最突出的两个是高斯消除和排序。即: 众所周知,如果将操作限制为整个行和列的整体,则高斯消除法对于计算行列式是最佳的[1]。显然,Strassen算法没有遵守该限制,并且在渐近性上优于高斯消去。 在排序中,如果将列表的元素视为只能进行比较和移动的黑匣子,则我们具有标准的n 日志ñnlog⁡nn \log n信息理论下限。据我所知,融合树克服了这一限制,因为巧妙地使用了乘法。 还有其他抽象价格的例子吗? 为了更加正式一点,我正在寻找一些示例,在某些弱计算模型中无条件地知道下界,而在更强大的模型中会违反下界。此外,弱模型的弱点应该以抽象的形式出现,这无疑是一个主观的概念。例如,我不认为对单调电路的限制是一种抽象。希望上面的两个例子可以清楚说明我在寻找什么。 [1] KLYUYEV,VV和NI KOKOVKIN-SHcHERBAK:关于线性代数方程组解的最小算术运算数。GI TEE翻译:斯坦福大学计算机科学系,技术报告CS 24,6月t4,t965。

6
用于更改图形(D *,D * -Lite,LPA *等)的最新路径查找算法有何不同?
近年来,已经开发了许多寻路算法,它们可以比A *更快地响应图形变化来计算最佳路径-它们是什么,它们之间有什么不同?他们是针对不同的情况,还是有些过时? 这些是我到目前为止能够找到的: D *(1994) 专注D *(1995) 动态SWSF-FP(1996) LPA(1997) LPA * /增量A *(2001) D * Lite(2002) SetA *(2002年) HPA *(2004) 随时D *(2005) PRA *(2005年) 领域D *(2007) Theta *(2007) HAA *(2008) GAA *(2008) LEARCH(2009) BDDD *(2009年-我无法访问本文:|) 增量披披*(2009) GFRA *(2010) MTD * -Lite(2010) 树AA *(2011) 我不确定其中哪一个适用于我的特定问题-如有必要,我将全部阅读,但是如果有人可以编写摘要,这将为我节省很多时间。 我的特定问题:我有一个带有起点,终点和一些墙的网格。我目前正在使用A *从头到尾查找最佳路径。 然后,用户将移动一堵墙,而我必须再次重新计算整个路径。在“移动墙/重新计算路径”的步骤发生在连续很多次,所以我在寻找一种算法,将能够快速重新计算最佳路径,而无需运行A *的一个完整的迭代。 不过,我不一定要寻找对A *的更改-它可以是完全独立的算法。

2
高斯消除的实际时间复杂度是多少?
在回答前面的问题时,我提到了普遍但错误的信念,即“高斯”消除在时间内运行。显然,该算法使用算术运算,但是粗心的实现可能会创建位数成倍增长的数字。作为一个简单的示例,假设我们要对角以下矩阵:O(n3)O(n3)O(n^3)O(n3)O(n3)O(n^3) ⎡⎣⎢⎢⎢⎢⎢⎢⎢211⋮1021⋮1002⋮1⋯⋯⋯⋱⋯000⋮2⎤⎦⎥⎥⎥⎥⎥⎥⎥[200⋯0120⋯0112⋯0⋮⋮⋮⋱⋮111⋯2]\begin{bmatrix} 2 & 0 & 0 & \cdots & 0 \\ 1 & 2 & 0 & \cdots & 0 \\ 1 & 1 & 2 & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots\\ 1 & 1 & 1 & \cdots & 2 …

9
强大的算法过于复杂,难以实施
有哪些合法实用程序的算法过于复杂而难以实现? 让我清楚一点:我不是在寻找像当前的渐近最优矩阵乘法算法(Coppersmith-Winograd)这样的算法,该算法可以合理实施,但具有一个常数,使其在实践中毫无用处。我正在寻找一种可能具有实用价值,但很难编码的算法,以至于它们从未实现,仅在极其人为的环境中实现,或者仅针对非常特殊的应用而实现。 还欢迎具有良好渐近性但实际性能可能不佳的几乎不可能实现的算法。

4
有证据表明矩阵乘法可以在二次时间内完成吗?
人们普遍猜测,矩阵乘法的最佳指数实际上等于2。我的问题很简单:ωω\omega 我们有什么理由认为?ω=2ω=2\omega = 2 我知道像Coppersmith-Winograd这样的快速算法,但是我不知道为什么可以将这些视为证据。ω=2ω=2\omega = 2 天真地,在我看来,这就像一个经典的例子,一个社区仅仅希望出于美学原因才希望结果是真实的。我很想知道这里是否真的是这种情况。


10
一层,两个队列
背景 几年前,当我还是一名本科生时,我们得到了一项关于摊销分析的作业。我无法解决其中一个问题。我曾在comp.theory中提出过此要求,但没有得到满意的结果。我记得课程中TA坚持了他无法证明的事情,并说他忘记了证明,然后……[你知道吗]。 今天,我回顾了这个问题。我仍然很想知道,所以这里是... 问题 是否可以使用两个队列实现堆栈,以便PUSH 和POP操作都在摊销时间O(1)中运行?如果可以,你能告诉我如何吗? 注意:如果我们要实现一个具有两个堆栈的队列(具有相应的操作ENQUEUE&DEQUEUE),则情况非常简单。请注意区别。 PS:以上问题不是作业本身。作业不需要任何下限;只是一个实现和运行时间分析。

10
关于遗传算法的可行陈述
遗传算法在理论界没有太大的吸引力,但是它们是一种合理使用的元启发式方法(通过元启发式,我指的是一种普遍适用于许多问题的技术,例如退火,梯度下降等)。实际上,在实践中,类似于GA的技术对于欧几里得TSP相当有效。 从理论上对一些启发式方法进行了合理的研究:存在有关局部搜索和退火的工作。我们对交替优化(如k-means)如何工作有很好的认识。但是据我所知,遗传算法并没有真正有用的信息。 关于遗传算法的行为,是否有任何可靠的算法/复杂性理论,无论是形状还是形式?虽然我已经听说过诸如模式理论之类的东西,但由于我目前对该领域的理解不是特别的算法,因此我将其排除在讨论之外(但我可能会在这里误解)。

7
对于P中的哪些问题,验证结果比查找结果容易吗?
对于NP完全问题(搜索版本),验证解决方案显然比查找解决方案容易,因为验证可以在多项式时间内完成,而找到证人则需要(可能)指数时间。 但是,在P中,解决方案也可以在多项式时间内找到,因此当验证比找到解决方案快时,它似乎并不明显。实际上,从这个角度来看,不同的问题似乎表现出不同的行为。一些例子: 3SUM:给定输入数字,在其中找到3个总和为0。据我所知,最快的已知算法在 时间内运行,并且此顺序被推测为最佳。另一方面,解决方案的验证要快得多,因为我们要做的只是检查所找到的3个数字的总和是否为0。O (n 2 − o (1 ))ñnnØ (ñ2 − o (1 ))O(n2−o(1))O(n^{2-o(1)}) 全对最短路径: 给定具有边权重的图形,计算其最短路径距离矩阵。一旦给出这样的矩阵,是否可以比重新计算更快地检查它是否确实是正确的距离矩阵?我的猜测是,答案可能是肯定的,但肯定不如3SUM明显。 线性规划。如果给出了要求保护的最优解决方案,则在还给出辅助信息的情况下,检查比重新计算要容易得多(最优对偶解决方案)。另一方面,如果仅原始解决方案可用,则不清楚是否可以比实际解决LP更快地对其进行检查。 问题:对这个问题了解多少?也就是说,什么时候比P容易找到解决问题的方法?

13
对于哪种算法,理论分析与现实之间有很大的差距?
分析算法效率的两种方法是 在其运行时设置渐近上限,并且 运行它并收集实验数据。 我想知道在(1)和(2)之间是否存在明显差距。我的意思是,要么(a)实验数据表明渐近渐近,要么(b)有算法X和Y使得理论分析表明X比Y好得多,实验数据表明Y比Y好得多。 X。 由于实验通常会揭示平均情况下的行为,因此,我希望最有趣的答案涉及平均情况下的上限。但是,我不想排除谈论不同范围的可能有趣的答案,例如Noam关于Simplex的答案。 包括数据结构。请为每个答案输入一个算法/ ds。

8
有非构造算法存在证明吗?
我记得我可能遇到过一些问题,这些问题已被证明可以解决,并且具有特定的复杂性,但是没有已知的算法可以真正达到这种复杂性。 我全神贯注于这种情况。算法存在性的非建设性证明将是什么样子。 确实存在这样的问题吗?它们有很多实用价值吗?

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.