Questions tagged «algorithms»

算法是定义明确的问题解决方案的一系列明确定义的步骤。如果您的问题与算法的设计和分析有关,请使用此标签。

4
我对Floyd-Warshall,Dijkstra和Bellman-Ford算法之间的区别是否正确?
我一直在研究这三个,并在下面说明了他们的推论。有人可以告诉我我是否足够正确地理解它们?谢谢。 Dijkstra算法仅在您只有一个来源并且想知道从一个节点到另一个节点的最小路径时使用,但是在这种情况下会失败。 当所有节点中的任何一个都可以作为源时,将使用Floyd-Warshall算法,因此您希望从任何源节点到任何目标节点的距离最短。这仅在存在负循环时失败。 如果只有一个来源,则像Dijkstra一样使用Bellman-Ford。这可以处理负重,其工作原理与弗洛伊德·沃歇尔相同,除了一个来源,对吗?(这是我最不确定的那个。)

3
Brzozowski的DFA最小化算法
Brzozowski的DFA最小化算法可通过以下方式为DFA建立最小的DFA :GGG 反转所有边,使初始状态为接受状态,而接受状态为初始,以获得反向语言的NFA,N 'GGGñ′ñ′N' 使用powerset构造获得反语言的,G′G′G' 反转的边(和初始接受交换)以获得原始语言的NFA,并且 ÑG′G′G'ññN 进行powerset构造以获得。G分G分G_{\min} 当然,由于某些DFA具有指数较大的反向DFA,因此根据输入的大小,此算法在最坏的情况下会以指数形式运行,因此,请跟踪反向DFA的大小。 如果ññN是输入DFA 的大小,ññn是最小DFA 的大小,而米米m是最小反向DFA的大小,那么按照ññN,ññn和m计,Brzozowski算法的运行时间是米米m多少? 特别是,在ññn和m之间有什么关系时,米米m布佐佐夫斯基的算法优于霍普克罗夫特算法或摩尔算法? 我听说在实践/应用中的典型示例中,Brzozowski的算法优于其他算法。非正式地,这些典型示例是什么样的?

4
Quicksort向孩子们解释
去年,我读了一篇有关“幼儿园量子力学”的精彩论文。这不是件容易的事。 现在,我想知道如何用最简单的词来解释quicksort。我如何证明(或至少是手波)平均复杂度为,对于幼儿园班级,最佳和最差情况是什么?还是至少在小学?Ø (ñ日志n )Ø(ñ日志⁡ñ)O(n \log n)

3
切割字符串的动态编程练习
我一直在研究本书中的以下问题。 某种字符串处理语言提供了一种原始操作,该操作将字符串分成两部分。由于此操作涉及复制原始字符串,因此与剪切位置无关,长度为n的字符串要花费n个时间单位。现在,假设您要将一个字符串分成许多段。中断的顺序可能会影响总运行时间。例如,如果要在位置以切割20个字符的字符串和,然后在位置使第一切口即被的总成本,而这样做位置10首先具有更好的成本。10 3 20 + 17 = 37 20 + 10 = 3033310101033320+17=3720+17=3720 + 17 = 3720+10=3020+10=3020 + 10 = 30 我需要一种动态编程算法,该算法可给出剪切,以找到将字符串剪切成片段的最低成本。m + 1mmmm+1m+1m +1

6
为什么不能使用DFS在未加权图中查找最短路径?
我了解按原样使用DFS不会在未加权图中找到最短路径。 但是,为什么要对DFS进行调整,以使其能够在未加权图中找到最短路径,却前景如此?关于该主题的所有文字都简单地指出无法完成。我不敢相信(自己没有尝试过)。 您是否知道允许DFS在未加权图中找到最短路径的任何修改?如果不是,那么使它变得如此困难的算法又是什么呢?

2
点图定义一个空间分区的数据结构/概念是什么
我遇到了一个解决现实世界问题的算法,并且记得在上一堂课时,我为一些家庭作业问题做了一些非常相似的事情。 基本上,这是点的图,并且绘制的线在两个点之间是等距的。它形成了一个完美的分区,其中围绕该点的线形成了最接近该点的区域形状。这会给任何人敲钟吗?我度过了艰难的时光,谷歌搜索描述并获得结果。而且我不知道该怎么形容。希望图片有帮助。

8
算法集的基数
有人在讨论中提出(他认为)至少可以有连续数量的策略来解决特定问题。具体的问题是交易策略(不是算法而是策略),但是我认为这不是我要问的重点。 这让我开始思考算法集的基数。我一直在搜索,但是什么也没想出来。我一直在想,由于图灵机使用有限的字母集运行,并且磁带必须是可索引的,因此可数,所以不可能有无数的算法。我的集合论无疑是生疏的,因此我不确定我的推理是完全正确的,而且我可能无法证明这一点,但这是一个有趣的想法。 这套算法的基数是什么?

9
如何在O(n)时间中找到5个重复值?
假设您有一个大小为的数组,其中包含从到(含)在内的整数,并且正好重复了5个。我需要提出一种算法,该算法可以找到O(n)时间中的重复数。我一生都无法想任何事情。我认为排序最好是O(n \ log n)?然后遍历数组将是O(n),从而导致O(n ^ 2 \ log n)。但是,我不确定是否需要排序,因为我已经看到一些棘手的东西,包括链接列表,队列,堆栈等。1n≥6n≥6n \geq 6111O (n )O (n log n )O (n )O (n 2 log n )n−5n−5n − 5O(n)O(n)O(n)O(nlogn)O(nlog⁡n)O(n\log n)O(n)O(n)O(n)O(n2logn)O(n2log⁡n)O(n^2\log n)

2
有效地插入到列表中,以最小化反转次数
假定两个可比较项的列表:u和s。令INV(u)为u中的求逆数。 我正在寻找一种有效的算法,以在不增加INV(u)的情况下将s的项插入u中。 基本上,我想将对象插入列表,同时保持“尽可能排序”,同时保持第一个列表的顺序。 例: u = [4,6,2,9,7] INV(u) = 3 ((4, 2), (6, 2) and (9, 7) s = [8,3,10] one optimal solution u' = [3, 4, 6, 2, 8, 9, 7, 10] INV(u') = 5 ((4, 2), (7, 2) and (9, 7) + (3,2), (8,7)) different optimal solution u' …

4
巨型图上的Dijkstra算法
我对Dijkstra非常熟悉,并且对算法有一个特定的问题。如果我有一个巨大的图,例如35亿个节点(所有OpenStreetMap数据),那么我显然将无法在内存中使用该图,因此该图存储在数据库的磁盘上。 有一些库可用于计算此类图上的最短路径。他们如何做到这一点?更具体地说,他们如何加载图的必需部分以运行Dijkstra的算法? 根据我的统计数据,获取访问的每个顶点的邻接表将需要每10,000个节点大约1,500个数据库查询,因此显然不是他们如何做到的。那太慢了。 他们是如何做到的呢?我正在尝试自己实施。

1
测试四面体是否位于多面体中
我有一个四面体 和一个多面体。受限制,使其始终与共享所有顶点。我想,以确定是否的谎言里面。Ťtt 吨p 吨pppŤttpppŤtt ppp 我想在问题上添加一个细节,以防可能对解决方案有所帮助:是Delaunay四面体,面是三角形,并且相对于顶点都是Delaunay。四面体是德劳内如果外接球的顶点包含在它里面没有其他的顶点。A面是强烈德洛奈如果存在其表面上含有该面的顶点,但没有其他顶点一个外接球上或内部的。Ťttpppppp 下图显示了空间中的相同问题: 2 d2D2D 原始多边形ppp: 的顶点的Delaunay三角剖分ppp: 对三角形进行内部/外部测试的结果Ťtt(阴影三角形位于 ,其余三角形位于外部):ppp 所需结果(在三角形外部修剪): 我最初的问题是在3D空间中,因此上图中的三角形转换为四面体,多边形转换为任意多面体。我已经弄清楚了这个问题的一些表述:pŤttpppppp 公式1 的唯一可以在之外的部分是它的边缘和三角形面,但通常可能存在一个,其表面上所有的外部都具有边,因此,也可以将此问题公式化为:测试四面体是否存在位于之外的面?p p t t pŤttpppppp ŤttŤtt ppp 公式2 对于这个问题,我还有另一种可能的观点,但是缺乏任何正式的想法:从 几何学上讲,如果在外部,那么它将始终粘附在的外表面上。因此,如果我们可以计算等高线(非正式地是外边界) 和使得和是的顶点集,则如果位于。 ŤttC ^ V Ç V p V = V 吨 ∪ V p V 吨,V p吨,p C ^ V = C ^ V …

1
构造不等价的二元矩阵
我正在尝试使用元素0或1 构造所有不等式的 ×矩阵(或者,如果需要的话,则 ×)。给出等价矩阵的操作是同时交换i和j行以及i和j列。例如。对于Ñ × Ñ 1 ↔ 2 (0 0 0 0 1 1 1 0 0)〜(1 0 1 0 0 0 0 1 0)8 × 88×88\times 8n × nñ×ñn\times n1 ↔ 21↔21\leftrightarrow2 ⎛⎝⎜001010010⎞⎠⎟〜⎛⎝⎜100001100⎞⎠⎟(000011100)〜(101000010)\begin{equation} \left( \begin{array}{ccc} 0 & 0 & 0 \\ 0 & 1 & 1 \\ 1 …

2
没有快速算法的
在多项式时间内可以解决的困难决策问题有哪些例子?我正在寻找最佳算法“慢”的问题,或者最快的已知算法“慢”的问题。 这是两个示例: 识别完美图形。Liu和Vuskovic在他们的FOCS'03论文[1]Cornuéjols中给出了该问题的时间算法,其中n是顶点数。我不确定是否已改善此限制,但据我了解,为了获得更快的算法,或多或少需要突破。(作者在[1]的期刊版本中给出了O (n 9)时间算法,请参见此处)。Ø (ñ10)Ø(ñ10)O(n^{10})ññnØ (ñ9)Ø(ñ9)O(n^9) 识别地图图形。Thorup [2]给出了一个相当复杂的算法,其指数为(大约?)。也许甚至可以大大改善这一点,但是我没有很好的参考。120120120 我对具有实际重要性的问题特别感兴趣,并且获得“快速”(甚至是实际的)算法已经有好几年了。 [1]Cornuéjols,Gérard,刘新明和Kristina Vuskovic。“用于识别完美图形的多项式算法。” 计算机科学基础,2003年。会议论文集。第44届IEEE年度研讨会。IEEE,2003年。 [2] Thorup,Mikkel。“在多项式时间内映射图。” 计算机科学基础,1998年。会议论文集。第39届年度研讨会。IEEE,1998年。

3
将DAG签约到新DAG中的最小尺寸
我们有一个DAG。我们在节点上有一个函数(松散地说,我们为节点编号)。我们想使用这些规则创建一个新的有向图:F:V→NF:V→NF\colon V\to \mathbb N 只有具有相同编号的节点才能签到相同的新节点。。(但是,。)F(x)≠F(y)⇒x′≠y′F(x)≠F(y)⇒x′≠y′F(x) \neq F(y) \Rightarrow x' \neq y'x′≠y′⇏F(x)≠F(y)x′≠y′⇏F(x)≠F(y)x' \neq y'\nRightarrow F(x) \neq F(y) 我们在新节点之间添加所有旧边:(x,y)∈E∧x′≠y′⟺(x′,y′)∈E′(x,y)∈E∧x′≠y′⟺(x′,y′)∈E′(x,y) \in E \land x' \neq y' \iff (x',y')\in E'。 此新图仍然是DAG。 | V'|的最小值是多少?|V′||V′||V'|?创建最小新图的算法是什么?

4
图有两个/三个不同的最小生成树?
我试图找到一种有效的方法来检测给定图G是否具有两个不同的最小生成树。我还试图找到一种方法来检查它是否具有3个不同的最小生成树。我曾经想过的天真的解决方案是运行一次Kruskal算法,然后找到最小生成树的总权重。稍后,从图中移除一条边并再次运行Kruskal算法,并检查新树的权重是否为原始最小生成树的权重,因此对图中的每条边也是如此。运行时是O(| V || E | log | V |),这一点都不好,我认为有更好的方法来执行。 任何建议都会有所帮助,在此先感谢

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.