Questions tagged «graphs»

关于图的问题,通过边连接的节点的离散结构。流行的口味是具有边缘能力的树木和网络。

1
在图形上添加边时,最短距离会变化多少?
令G=(V,E)G=(V,E)G=(V,E)是一些完整的,加权的,无向的图。我们通过从E到E '一对一地增加边来构造第二个图。我们总共将Θ (| V |)边加到G '。G′=(V,E′)G′=(V,E′)G'=(V, E')EEEE′E′E'Θ(|V|)Θ(|V|)\Theta(|V|)G′G′G' 每次我们添加一个边缘(u,v)(u,v)(u,v)于E′E′E',我们考虑所有对之间的最短距离在(V,E′)(V,E′)(V, E')和(V,E′∪{(u,v)})(V,E′∪{(u,v)})(V, E' \cup \{ (u,v) \})。我们计算由于加而导致的最短距离变化了多少(u,v)(u,v)(u,v)。让CiCiC_i是变化的,当我们添加的最短距离的数量iii边数,令为总和。nnn C = ∑ i C i有多大?C=∑iCinC=∑iCinC = \frac{\sum_i C_i}{n} 由于,所以C = O (n 2)也是如此。这个界限可以改善吗?请注意,我将C定义为所有相加边的平均值,因此,即使证明了C = Ω (n ),也没有那么有趣的一轮,因为距离变化很大。Ci=O(|V|2)=O(n2)Ci=O(|V|2)=O(n2)C_i = O(|V|^2)=O(n^2)C=O(n2)C=O(n2)C=O(n^2)CCCC=Ω(n)C=Ω(n)C = \Omega(n) 我有一种算法可以贪婪地计算几何t跨度,该算法可以在时间内工作,因此,如果C为o (n 2),则我的算法要比原始贪婪算法快,并且如果C真的很小,其速度可能比最著名的算法快(尽管我对此表示怀疑)。O(Cnlogn)O(Cnlog⁡n)O(C n \log n)CCCo(n2)o(n2)o(n^2)CCC 一些特定于问题的属性可能有助于确定界限:添加的边权重始终大于图中已存在的任何边的权重(不一定严格地更大)。此外,它的权重比u和v之间的最短路径短。(u,v)(u,v)(u,v)uuuvvv 您可以假定顶点对应于2d平面中的点,并且顶点之间的距离是这些点之间的欧几里得距离。也就是说,每个顶点对应于平面中的某个点(x ,y ),并且对于边(u ,v )= ((x 1,y …


2
使用Bellman Ford获得负循环
我必须在有向加权图中找到一个负周期。我知道Bellman Ford算法是如何工作的,它告诉我是否存在可达到的负周期。但是它没有明确命名。 如何获取循环的实际路径?v1,v2,…vk,v1v1,v2,…vk,v1v1, v2, \ldots vk, v1 应用标准算法后,我们已经进行了次迭代,因此不可能进一步改进。如果我们仍然可以降低到节点的距离,则存在负循环。n−1n−1n-1 我的想法是:由于我们知道仍然可以改善路径的边缘,并且知道每个节点的前身,因此我们可以从该边缘追溯到直到再次遇到它为止。现在我们应该有一个循环。 可悲的是,我没有找到任何可以告诉我这是否正确的论文。那么,它真的像那样工作吗? 编辑:此示例证明我的想法是错误的。给定下图,我们从节点运行Bellman-Ford 。1个11 我们按的顺序处理边缘。经过次迭代后,我们得到节点距离:n − 1a ,b ,c ,da,b,c,da, b, c, dn − 1n−1n-1 2 :- 30 3 :- 151:−51:−51: -5 2:−302:−302: -30 3:−153:−153: -15 和父表:有父有父有父 3 2 3 3 2111333 222333 333222 现在,进行第次迭代,我们发现仍可以使用边沿改善节点的距离。因此,我们知道存在一个负循环,而是其中的一部分。1 一个一个nnn111aaaaaa 但是,通过追溯到父表的方式,我们陷入了另一个负循环,再也不会相遇。一c,dc,dc, daaa 我们如何解决这个问题?

2
在有向图中找到至少两个相同长度的路径
假设我们有一个有向图和两个节点和。我想知道是否已经有算法来计算以下决策问题:G=(V,E)G=(V,E)G=(V,E)AAABBB 和之间是否至少有两条相同长度的路径?AAABBB 复杂度如何?我可以在多项式时间内求解吗? 我想在图表上添加一个新的约束,也许这个问题可以解决。在邻接矩阵上,每一列都不为空。因此,每个节点在输入上至少有一个箭头,并且至少还有一个与其连接的节点。因此,如果节点是第个节点,则是图中的边。iii(i,i)(i,i)(i,i)

2
实际中是否已将链接剪切树用于最大流量计算或其他应用程序?
通过使用动态树(也称为链接剪切树),我通常会看到许多实现的最大流算法,狄尼克算法,推入重贴标签以及其他算法可以改善其渐近时间成本。 推重贴标签通常在或或,但带有动态树Ø (V2Ë)Ø(V2Ë)O(V^2E)Ø (V3)Ø(V3)O(V^3)Ø (V2Ë--√)Ø(V2Ë)O(V^2\sqrt{E})Ø (VË日志(五2/ E))Ø(VË日志⁡(V2/Ë))O(VE \log(V^2/E)) Dinic的算法在,但具有动态树Ø (V2Ë)Ø(V2Ë)O(V^2E)Ø (VË日志(五))Ø(VË日志⁡(V))O(VE\log(V)) 但是,大多数库中的最大流算法的实际实现似乎并未利用此数据结构。在实践中是否曾使用动态树进行最大流量计算?还是它们承担了过多的开销以至于无法解决现实世界中的问题规模? 是否还有其他使用链接剪切树的问题域? 这个问题与我在cstheory上提出的一个问题有关:现有技术中的最大流量算法是否可行?

1
生成用于随机测试图算法的输入?
在测试算法时,一种常见的方法是随机测试:根据某种分布(通常是均匀的)生成大量输入,对它们运行算法并验证正确性。给定算法签名,现代测试框架可以自动生成输入,但有一些限制。 如果输入是数字,列表或字符串,则直接生成此类输入。树比较难,但仍然很容易(使用随机的无上下文语法或类似方法)。 如何有效地生成随机图?通常,随机地均匀地选择图形不是您想要的:它们应该是连接的,平面的,无循环的或具有任何其他属性。由于潜在的大量不良图集,拒绝采样似乎次优。 有哪些有用的发行版可以查看?在这里有用意味着 这些图很可能很好地测试了算法 它们可以有效地产生。 我知道有很多用于随机图的模型,因此我希望能从中获得一些最了解图的模型的见解。 如果“某些算法”过于笼统,请使用最短路径查找算法作为测试中的具体算法类别。用于测试的图应该是连通的并且相当密集(具有很高的概率,或者至少在预期中)。对于测试,最佳解决方案是围绕最短路径创建随机图,以便我们知道所需的结果(而不必采用其他算法)。

2
无向图上的最短路径?
所以我认为这个(虽然有些基本)问题属于这里: 假设我有一个大小为100的节点的图,以10x10的模式排列(请考虑棋盘)。该图是无向的和未加权的。在图形中移动涉及向前移动三个空间,向右或向左移动一个空间(类似于国际象棋骑士在棋盘上的移动方式)。 给定一个固定的开始节点,人们将如何找到通往板上其他任何节点的最短路径? 我以为可行的移动节点之间只有一条边。因此,鉴于此信息,我希望找到从起始节点到结束节点的最短路径。 我最初的想法是每条边的权重均为1。因此,我决定使用深度优先搜索的更改形式来进行此操作。 但是,我无法终生想象如何使用搜索获得最短路径。 我尝试的另一件事是将图以树形图作为起始节点作为根,然后选择最浅的(最低的行号)结果,该结果为我提供了所需的结束节点……这是可行的,但是效率极低,因此不适用于较大的图形。 有没有人有任何想法可以为我指出正确的方向? 非常感谢你。 (我试图对图表进行可视化处理,但由于声誉低下而无法执行)

2
单亲图可以有多少条边?
单向图是有向图,因此从任何一个顶点到任何其他顶点最多只有一条简单路径。 单态图可以具有周期。例如,一个双向链接列表(不是循环列表!)是一个单感图。如果列表包含元素,则该图具有个长度为2的循环,总共。n - 1 2 (n - 1 )ñnnn − 1n−1n-12 (n − 1 )2(n−1)2(n-1) 具有个顶点的单态图的最大边数是多少?渐近边界将是可行的(例如或)。O (n )Θ (n 2)ñnnO (n )O(n)O(n)Θ (n2)Θ(n2)\Theta(n^2) 受到加权单态图中查找最短路径的启发; 在我的证明中,我最初想声称边的数量为但随后意识到限制循环数就足够了。O (n )O(n)O(n)


4
为什么有向图很重要?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 我们已经在有向图中阅读了有关MST,强连接性,路由等的算法。 最近,人们也一直在研究有向图的动态和容错算法。 但是我想知道下划线图形网络是否是“定向”的实际应用。除了社交网络外,我能想到的所有问题(例如铁路/公路网络,Internet网络等)都只处理无向图。 编辑1:我知道这些可以用于对定向链接的某些场景进行建模,但是我想知道这些场景在现实世界中发生的频率如何,以及研究有向图的容错能力有多重要。

2
如何实现AO *算法?
我注意到在实现搜索算法时会使用不同的数据结构。例如,我们使用队列来实现广度优先搜索,使用堆栈来实现深度优先搜索,使用最小堆来实现A *算法。在这些情况下,我们不需要显式构造搜索树。 但是我找不到简单的数据结构来模拟AO *算法的搜索过程。我想知道是否显式构造搜索树是实现AO *算法的唯一方法?谁能为我提供有效的实施方案?

2
从最小切割计算最大流量
我们知道计算最大流量。具有容量的网络的最小割断是等效的;cf. 的最大流最小割定理。 我们有(或多或少有效率的)算法来计算最大流量,在给定最大流量的情况下计算最小切割既不困难也不昂贵。 但是相反呢?给定最小割口,我们如何确定最大流量?当然,如果不从头开始解决Max-Flow,最好也要比那快。 一些想法: 从最小切割,我们知道最大流量值。我看不到这些信息如何帮助标准方法扩展路径和推入重贴标签,尽管对后者进行调整似乎更为合理。 我们不能使用最小分割来将网络分为两部分并递归,因为在最坏的情况下(如果一个分区是单例),这不会缩小问题。同样,对于较小的实例,我们也没有最低限度的削减。 知道最大流量的值是否可以通过补充的松弛条件来加快求解最大流量LP?

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

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.