graph-theory相关内容

建议KSPA在无向图

有一个自定义实现KSPA的需要被重新写入。当前实现使用改进的Dijkstra算法,其伪code以下大致说明。它是采用边删除策略,我想是这样俗称KSPA。 (我是一个新手,在图的理论)。 步骤:-1。计算任何给定的一对使用Dijkstra算法的节点之间的最短路径。 K = 0这里。 步骤:-2。令k = 1 步骤:-3。提取所有的“K-1”最短路径树所有的边缘。添加相同以链表Edge_List。 ..
发布时间:2015-11-30 15:13:23 C/C++

VF2算法的任何工作的例子吗?

我一直在读这是基本的谷歌搜索,似乎这被认为是事实上的算法之一查找,如果两个图是同构的,但由于某种原因,我无法找到一个解释是非常简单理解在一个较高的水平。或者是该算法由不同的名字知道的? 在任何情况下,有没有人知道这是如何算法的工作任何正在运行的例子吗? 解决方案 我不知道这就是你要找的,但VF2算法按照以下步骤。 让说你有2图:V和V',并要匹配V配合V' 该算法走下来一棵树,在每一步尝 ..
发布时间:2015-11-30 15:13:11 C/C++

Efficently可模拟滚动加权色子(或遍历加权图),与频繁的更新

我有一个加权,有向图是密集的约20,000节点。 由于图中的一个节点,我选择相邻节点随机与相关的相对权重的概率。 在每一个选择后,我收到有关的选择是好还是坏的反馈,更新网络。例如,在一个糟糕的选择,我降低重量的所有边缘的指向所选择的节点。 我学到 我应该使用什么数据结构,它允许频繁的更新,什么相应的算法是最适合做的选择? 一些想法/注意事项: 我可以通过记录每一个权重调整减少更新,那么只有 ..
发布时间:2015-11-30 15:11:56 C/C++

含有一组给定的节点最小连接子图

我有一个加权,连接图。我想找到一个连通子是肯定包括一组特定节点,并为一些额外的可能。这怎么可能实现呢? 为了保险起见,我将使用更多的precise语言重述问题。设G(V,E)是一个加权,无向,连接图。设N是V的某个子集,什么是找到最小连通子G'(V',E'),G(V,E),使得N是V的子集'?最好的方法 逼近的罚款。 解决方案 我想不出一个高效的算法来找到最佳的解决方案,但假设你的输入图形 ..
发布时间:2015-11-30 15:09:40 C/C++

匈牙利算法和多因素

我有一个情况我需要分配人几个事件。如果我们只是有一个价格的一个因素,这将是罚款,但有一些是进来的因素。 首先,一些背景。这是一个促进的故事小时的住院以任何理由儿童的非营利性组织,所以他们依赖于志愿者工作这样做。所以,因为他们依赖于人们的良好意愿,他们给人们尽可能多的工作,人们可以/想做的事,而变化,如: 在有些人只能做早晨,和其他一些人只能做下午; 在一些人只能做星期一和星期四,其他人不能再继 ..
发布时间:2015-11-30 15:01:57 C/C++

两个指定顶点之间最短两个不相交的路

给出一个加权无向图和两个顶点的 A,B ,我们要找出两条路径 - > B 和 B - >一使得它们不共享任何边缘,并使得边缘的权重的两个路径​​的总和是最小的。最多可以为 1000 顶点,最高的 10,000 的边缘。 我最初曾试图想出一个动态规划方法,也没有找到这样的。任何意见/建议将是非常美联社preciated。 解决方案 这是最小代价流问题 。您可以将流量为每边等于1,然后搜索之间的 ..
发布时间:2015-11-30 15:01:05 C/C++

证明正确性:算法的树图论直径

为了找到一个树的直径我可采取任何节点从树中,执行BFS找到一个节点是最远的远离它,然后该节点上执行的BFS。来自第二BFS的最大距离将产生的直径。 我不知道如何证明这个有关系吗?我已经利用感应上的节点数目尝试过,但有太多的情况下。 任何的想法会大大AP preciated ... 解决方案 让我们把由第一BFS x发现端点。的关键步骤是证明在这第一步总是发现在x“作品” - 即,它总是在一 ..
发布时间:2015-11-30 14:59:40 C/C++

感人的片段

任何人都可以请建议我的算法这一点。 正在给定的开始和N片段的结束点在x轴。 有多少这些段可触及,甚至在其边缘,正好两条线垂直于它们? 采样输入: 3 五 2 3 1 3 1 5 3 4 4 5 五 1 2 1 3 2 3 1 4 1 5 3 1 2 3 4 5 6 示例输出: 案例1:5 案例2:5 案例3:2 说明: 案例1:我们将借助两条线(平行于Y轴)交叉的X ..
发布时间:2015-11-30 14:57:48 C/C++

什么是一个高效的算法计算在图中三角形的数量?

什么是一个有效的算法,用于计算无向图三角形的数量)(其中一个图是一组顶点和边)?我一直在寻找谷歌,并通过我的教科书的书架阅读了几个小时,在连续三天时间一天。 这是一个家庭作业,我需要这样的算法,但发展不计数的赋值东西。据预计,我们可以简单地寻找外部资源,这样的算法,但我在我的绳子结束。 有关澄清,图中的一个三角形是长度为3的氨基酸周期。诀窍在于,它需要至多一万个节点工作的顶点集。 我目前的工 ..
发布时间:2015-11-30 14:51:08 C/C++

如何找到在树上的最短路径简单的线性时间呢?

下面是瓦齐拉尼从算法的书有问题 输入到这个问题是一个树T与边缘整数权重。权重可以是负的, 零或正。举一个线性时间算法找到最短路径简单的T的长度 路径是在路径的边的权重的总和。路径是简单的,如果没有顶点重复。注意 该路径的端点是不受约束 提示:这是非常相似的发现最大的独立集合在一棵树的问题 我该如何解决这个问题的线性时间? 下面是我的算法,但我不知道它是线性的时间,因为它什么比不同深度优 ..

什么是广度优先搜索有用吗?

通常,当我不得不走的图形,我一直使用,因为下部空间复杂度深度优先搜索。我诚实地从来没有见过这种情况要求一个广度优先搜索,但我的经验的是的pretty的限制。 当它是有意义的使用广度优先搜索? 更新:我想我的答案解决方案 当您想通过当你想找到一个加权图中的最短路径遍历尽可能少的边缘越好,也就是要达到一个节点。 另外的深度的空间复杂第一搜索可以比一个广度优先搜索的时,例如高每个节点只有一个子节 ..

全部最小生成树的实现

我一直在寻找一个实现(我使用 networkx 库),将发现所有的最小生成树( MST)无向加权图的。 我只能找到的实现Kruskal算法和Prim算法两者都将只返回一个MST。 我已经看到了解决这一问题的文件(如重新presenting所有最小生成树与应用程序进行计数和代),但我的头往往通过冥思苦想如何将其转化为code好歹爆炸。 其实我一直没能找到任何语言的实现! 解决方案 Ruby ..

算法来寻找以矩阵连接套的总数

我想知道,我应该在这里适用的算法。将一个 DFS 办? 给定一个的2-D矩阵。找到该矩阵连接套的总数 连接组可以被定义为组电池(多个)上有提到1,并且具有在该集与它们共享邻居关系的至少一个其他细胞。用1在它的细胞和具有1在它周围没有邻居可以被认为是一组与在其一个小区。邻居可以被定义为所有相邻的8个可能的方向的(即N,W,E,S,NE,NW,东南,西南方向)的给定小区的小区。的细胞本身并不邻居。 ..
发布时间:2015-11-30 14:07:43 C/C++

我在哪里可以了解更多关于"蚁群"优化?

我一直在读的东西在这里和那里有一段时间了有关使用“蚁群”模式作为一个启发式的方法来优化不同类型的算法。但是,我还没有找到,讨论以介绍方式蚁群优化,甚至在很多细节的文章或书籍。任何人都可以点我的一些资源,在那里我可以学到更多关于这个想法? 解决方案 在你知道德国人(是的,对不起......),我和一个朋友写了一个的介绍有关这个问题的,我自己觉得很差强人意code 。文本和code使用TSP的例子 ..
发布时间:2015-11-30 14:01:08 C/C++

查找邻接矩阵图的连通分支

我有一个随机图再通过Java中的邻接矩阵psented $ P $,我怎么能找到此图中的连接组件(子图)? 我发现BFS和DFS,但不知道他们是合适的,也不是我能工作,如何实现它们的邻接矩阵。 任何想法? 解决方案 您需要分配马克 - 长度为n,其中n是顶点图中的一些int数组,并用零填充它。然后: 1)对于BFS做到以下几点: 成分= 0; 枚举所有的顶点,如果顶点号i,标记[I] ..
发布时间:2015-11-30 14:00:45 C/C++

神秘圣诞老人算法

每到圣诞节,我们得出名字的礼物交流,我的家人。这通常需要多张重绘,直到没有人拉到自己的配偶。所以今年我codeD了我自己的名字绘图应用程序,需要在一堆名字,一串不允许配对,并发送了一封电子邮件给每个人都与他们所选择的giftee。 目前,该算法是这样工作的(伪code): 函数DrawNames(名单allPeople,地图disallowedPairs)返回地图 //使潜在的候选人名 ..
发布时间:2015-11-30 13:58:54 C/C++

找到所有chordless周期无向图

如何找到所有 chordless 的周期中无向图? 例如,给定的曲线 0 --- 1 | | \ | | \ 4 --- 3 - 2 该算法应该返回1-2-3和0-1-3-4,但从来没有0-1-2-3-4。 (注: [1] 这个问题是不一样的 小周发现在平面图的因为图形不一定是平面的。 [2] 我已经阅读了本文的解决方案 从1分配号码的节点到n。 选择的节点号 ..
发布时间:2015-11-30 13:57:57 C/C++

在DAG中两个节点之间的路径数

我想找到的DAG中的两个节点之间的路径数量。 Ø(V ^ 2)和O(V + E)是可以接受的。 O(V + E)让我想起了以某种方式使用BFS或DFS,但我不知道怎么办。 有人可以帮忙吗? 解决方案 做一个拓扑排序的DAG,然后扫描从目标顶点向后源。对于每一个顶点 v ,保持路径数的计数从 v 目标。当你到达的来源,那算不算值就是答案。这就是 O(V + E)。 ..
发布时间:2015-11-30 13:43:54 C/C++

秩VS普里姆

我在想,当一个人应该使用 Prim算法时的解决方案 使用Prim算法当你有很多边缘的曲线图。 有关用图表的 V 顶点电子邮件的边缘,Kruskal算法在运行的 0(E日志V)时间和Prim算法可以运行 O(E + V登录V)摊销的时间,如果你使用斐波那契堆 Prim算法是显著的极限速度更快,当你有一个非常密集的图,很多比顶点更多的边。秩执行在典型情况(稀疏图)更好,因为它使用简单的数据结构。 ..