寻找多条短路径的算法

2024-03-25

寻求一种能够产生 N 条短路径的算法。

有没有人有算法的经验来寻找多条短路径在有向图中?我的应用程序用于语言(查找同义词链),但从逻辑上讲,这可能用于地理或社交网络。我想要明显不同的路径,而不仅仅是沿途交换几个节点。我真的很想知道是否有办法避免“枢纽”,即大型机场或超级连接器;或者在语言中,有很多含义的单词。

(对于我的应用程序,我已经用 Dijkstra 和 A-star 解决了这个问题,但我还没有一个好的方法来获得多条路径,除了在获得第一条路径后改变权重。)

例如(如果是社交网络),我如何找到连接我和你的多条路径,沿途大多是不同的人。可能有 4-7 个分离点,这是可能的。对于语言和社交网络来说,通常有 6 度左右的分离度。也就是说,很少需要 20 个以上的节点。

我见过Dijkstra 算法寻找所有可能的最短路径 https://stackoverflow.com/questions/2819347/dijkstras-algorithm-to-find-all-the-shortest-paths-possible, 最短路径算法的一种变体 https://stackoverflow.com/questions/22026691/a-variation-of-shortest-path-algorithm, 在寻找最短路径时,BFS 和 Dijkstra 算法有什么区别? https://stackoverflow.com/questions/25449781/what-is-difference-between-bfs-and-dijkstras-algorithms-when-looking-for-shorte?rq=1, 用A*算法找到几条最短路径 https://stackoverflow.com/questions/28739853/find-several-shortest-paths-with-a-algorithm——但没有一个是我所寻求的。

当然有人已经弄清楚了这一点,但我不知道要搜索什么。


网络流量

这对于社交网络的情况来说更好,但是它也可以包含同义词链。 我想到的算法是Dinic's https://en.wikipedia.org/wiki/Dinic%27s_algorithm因为它的增广路径被选择为shortest可用路径。这将使我们能够修改算法以适合您的情况。另请注意,我们将与integer网络流量。

图构建:

  • 源、汇
  • for every person p, nodes ps, pe and a directed edge (ps, pe) with the capacity of one.1
  • for every edge (u,v) in your original graph a chain of edges (ue, x1), (x1, x2), ... (xk, vs) so that the number of the chain links equals the weight of the (u, v).2 This is to make use of the fact that Dinic finds the shortest improvement to the current flow so this penalizes the longer chains from being used too early.
  • For the person a you want to start with, change the capacity of (xs, xe) to the number of paths you wish to find.3
  • Ad an edge with unlimited capacity from the source to xs
  • 将目标人物与水槽合并。 (或添加适当的边)

运行 Dinic 算法。生成的流将包含最大数量的分离路径。如果您足够快地终止算法,这些可能会很短,因为这就是算法的开始。然而,由于我们构建的图中的网络流尝试最大化分离路径的数量,因此如果它提高了计数,它将开始更喜欢较长的路径。这就是为什么您可能想要限制第一个节点边缘的容量。


1Bigger capacities won't work for this case because it would just increase the flow through the shortest path uniformly. However you can try to tweak some of the edges if you wish to allow at least few hubs or if your branching starts later.
2Note that if you have unweighted graph, then the edge (ue, vs) will be enough.
3Or infinity if you wish to find all of them. This would likely come with the cost of them no longer being reasonably short.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

寻找多条短路径的算法 的相关文章

  • 在 Haskell 中阅读 GraphML

    我正在尝试将包含单个有向图的 GraphML 文件读入 HaskellData Graph http hackage haskell org package containers 0 2 0 1 docs Data Graph html为了
  • 树中的节点是否被视为其自己的祖先?

    我想知道计算机科学背景下对 祖先 定义的共识是什么 我问只是因为在算法简介 http en wikipedia org wiki Introduction to Algorithms 第二版 第 14 页 第259章 有算法的描述Tree
  • 找到两个移动物体的更好交点

    我想极大地优化我的算法之一 我将尽力以最好的方式解释它 主题 我们当时处于二维欧几里德系统中t 0 在这个系统中有两个对象 O1 and O2 O1 and O2分别位于点PA and PC O1移动于常数和已知点方向的速度PB 当物体到达
  • 如何选择部分密集数据集的均匀分布子集?

    P是一个 n d 矩阵 持有nd 维样本 P某些地区的密度是其他地区的几倍 我想选择一个子集P其中任意样本对之间的距离大于d0 并且我需要将其传播到整个区域 所有样本都具有相同的优先级 无需优化任何内容 例如覆盖面积或成对距离之和 这是执行
  • 如何最小化两个子多边形的最大纵横比?

    我想使用直线将凸多边形切成给定面积比的两部分 以使两个子多边形的较大纵横比最小化 目前我的方法包括选择一个随机起点 计算将多边形分割成目标区域的适当终点 然后计算两个纵横比中较大的一个 然后重复这个很多次 直到我足够接近最小值 多边形 A
  • 优雅的折线“左移”测试

    Given X Y 坐标 即车辆的位置 X Y 数组 它们是折线中的顶点 请注意 折线仅由直线段组成 没有圆弧 我想要的是 计算车辆是在折线的左侧还是右侧 当然还是在顶部 我的做法 迭代所有线段 并计算到每个线段的距离 然后 对于最近的段
  • 在 python 中使用 graphviz 从 DOT 文件绘制有向图

    这是API参考 http graphviz readthedocs io en latest api html for graphviz 我找不到任何从现有的生成有向图的方法dot源文件 方法如render and view保存在新文件中
  • O(mn) 比 O((m+n)^2) 更好吗?

    算法的输入是m and n 我的算法的时间复杂度是O mn 我有一个时间复杂度为的基准算法O m n 我的实现在时间复杂度方面是否优于基准 许多评论者和回答者希望只考虑以下情况 m n或者至少当它们通过一个常数因子相关时 这不是它的工作原理
  • 添加到数组连续数字

    这是我向SO提出的第一个问题 我希望能答对 在 PHP 中 如果你不会 Python 或伪语言也可以 给定一个包含 n 个元素的数组 old array 1 2 3 5 7 8 9 20 21 23 29 我需要向新数组添加连续数字 如果不
  • 检查数独字段的很酷的算法?

    有谁知道一个简单的算法来检查数独配置是否有效 我想出的最简单的算法是 对于大小为 n 的板 伪代码 for each row for each number k in 1 n if k is not in the row using ano
  • 4 x 3 锁图案

    我遇到了这个 它要求计算在 4x3 网格中可以制作特定长度的锁定图案的方式数 并遵循规则 可能有些点不能包含在路径中 有效的模式具有以下属性 图案可以使用第一次接触的点序列来表示 与绘制图案的顺序相同 从 1 1 到 2 2 的图案与图案不
  • 我想优化这个短循环

    我想优化这个简单的循环 unsigned int i while j 0 j is an unsigned int with a start value of about N 36 000 000 float sub 0 i 1 unsig
  • 稀疏矩阵中的最大和子矩形

    求一个子矩形中的最大和NxN矩阵可以完成O n 3 正如其他帖子中指出的 使用 2 d kadane 算法的时间 然而 如果矩阵是稀疏的 具体来说O n 非零条目 可以O n 3 时间被打败了吗 如果有帮助的话 对于我感兴趣的当前应用程序
  • 如何设置K-means openCV c++的初始中心

    我正在尝试使用 OpenCv 和 Kmeans 对图像进行分割 我刚刚实现的代码如下 include opencv2 objdetect objdetect hpp include opencv2 highgui highgui hpp i
  • 交换两个向量之间的值,使两个向量的 max_element 之和最小

    这是 Codechef 的问题 但请耐心等待 https www codechef com ZCOPRAC problems ZCO16001 https www codechef com ZCOPRAC problems ZCO16001
  • 反转二进制网络

    如何反转二元方程 以便找到哪些输入将产生给定的输出 Example Inputs i0 through i8 Outputs o0 through o8 Operators XOR AND 二元方程 1 i0 1 i1 0 i2 1 i3
  • R中一张图中的多个条形图

    我是 R 初学者 我需要创建一个像这样的图表 https i stack imgur com az56z jpg https i stack imgur com az56z jpg 我不知道如何生成整个数据集 基本思想是某个外显子 ID 会
  • 字符串排序真的是 O(n^2logn) 吗? [复制]

    这个问题在这里已经有答案了 我读了以下内容 排序需要 O NlogN 那么它怎么是 O N 2logN 我们在这里想念的是 两个字符串的比较不是 O 1 在最坏的情况下 需要 在 所以最终的复杂度是O N 2logN 它是否正确 我一直认为
  • 如何在给定目标索引数组的情况下对数组进行就地排序?

    你如何对给定的数组进行排序arr in place给定目标索引数组ind 例如 var arr A B C D E F var ind 4 0 5 2 1 3 rearrange arr ind console log arr gt B E
  • 如何求解:T(n) = T(n - 1) + n

    我已经解决了以下问题 T n T n 1 n O n 2 现在 当我解决这个问题时 我发现界限非常松散 我是否做错了什么 或者只是这样 您还需要一个递归关系的基本情况 T 1 c T n T n 1 n 为了解决这个问题 您可以首先猜测一个

随机推荐

  • 该浏览器无法识别 React Three Fiber 网格标签

    我正在关注 Youtube 上的 3d 作品集教程 但遇到了这个错误 在这里 我尝试渲染网格 但控制台显示警告 此元素在此浏览器中无法识别 浏览器正在渲染其余部分 但这部分代码没有被渲染 这是代码块 const Computers gt c
  • 如何在 C# 中模拟没有接口和虚方法的类?

    我正在为别人的代码编写单元测试 但我不允许修改这些代码 假设我有 class BadClass public BadClass the service isn t going to be running during testing it
  • 颤振扩展图块删除尾随

    我有一个 exoansiontile 我希望它像一个盒子 一切都居中 问题是 如果我添加太长的文本 我会收到溢出错误 我认为这是由扩展图块的尾随引起的 这是一张图片 https gyazo com c29329106dc5dcb162b71
  • Java .policy 文件 - 如何防止 java.util.Date() 被访问

    我正在摆弄 java policy 文件 并想知道如何做一些事情 例如阻止调用 java util Date 我只是想更好地了解 policy 文件的工作原理以及如何将其用于沙箱代码 恐怕你在那里就不走运了 正如帕洛 埃伯曼所说 packa
  • 超多重非虚拟继承中基类的作用域运算符

    考虑这个 完全无意义 但完全有效 类继承 struct Area int size struct Pattern int size struct R Area Pattern struct C Area Pattern struct X R
  • 如何使用 Python 从 Outlook 帐户发送带有附件的邮件

    我已尝试使用以下代码发送附件 但文件未发送 仅发送内容 请帮忙 SERVER smtp example com FROM email protected cdn cgi l email protection TO listOfEmails
  • 隐藏导航栏,但是当我转换到上一个视图(弹出)时,它会暂时显示旧的后退按钮。为什么?

    我在导航控制器中有视图控制器 根 RootViewController 第二 ReadingViewController 但在第二个视图控制器中我想禁用导航栏UIToolBar 因为我不需要标题并想要更多按钮 例如 iBooks 或 Fac
  • 带参数的自定义激活

    我正在尝试在 Keras 中创建一个可以接受参数的激活函数beta像这样 from keras import backend as K from keras utils generic utils import get custom obj
  • Sublime Text 更改“Goto Line...”快捷方式

    这个问题是专门针对Mac的 但如果你愿意的话 你可以启发Windows用户 Goto Line 的命令是什么 用于更改 Goto Definition 的快捷方式 如下所示 keys cmd D command goto definitio
  • “财产价值无效。”为什么 Visual Studio 不允许我将图片分配给图像?

    在 WPF 窗口上我有一个图像对象 我单击按钮分配源 弹出窗口 我在其中添加了图像 单击添加 当图像加载时 它没有显示图像 而是显示一个白色框 我尝试将这个白框指定为图像源 它只是说 属性值无效 解决方案资源管理器清楚地显示图像在那里 我可
  • 无法将mysql驱动添加到jboss

    好吧 这让我发疯 特别是因为已经有很多类似的问题了 但没有答案对我有用 我的 Windows 7 机器上有 jboss 7 1 1 通常从 eclipse 运行它 并且想要使用 mysql 我做了以下事情 1个创建的目录jboss as 7
  • 使用 pandas 数据框的 Seaborn 热图

    我正在努力将 pandas 中的数据帧调整为 Seaborn 热图 或实际上是 matplotlib 的正确格式以制作热图 我当前的数据框 称为 data yule 是 Unnamed 0 SymmetricDivision test Mu
  • 如何将 jQuery 变量传递给 PHP 变量?

    如何在不刷新页面的情况下将变量从 jQuery 传递到 PHP 当我单击一个复选框时 我想将一个变量从 jQuery 传递到 PHP 我也在使用formdialog 我的 PHP 代码 gt gt 我的 JavaScript 代码 func
  • '/usr/include/c++/4.4/bits/' 中的位的含义是什么

    usr include c 4 4 bits 中的位的含义是什么 Linux 当然是 gcc 根据 libstdc 文档 该文件夹的官方名称是 标准标头包含的文件 以及位中的其他文件 目录 其中 位 可能只是意味着一些微不足道的东西 例如
  • Angular 2 在 iframe 内触发插值

    我想在 iframe 中显示模板化网页的内容 但加载内容后 模板不会按角度进行插值 是因为变化检测系统吗 可以通过其他方式实现吗 Component selector my app template export class App tem
  • ViewState 仅在 Safari 中无效

    我维护的网站之一很大程度上依赖于使用ViewState 这不是我的代码 但是 在某些页面上ViewState过于臃肿 Safari 会抛出一个 Validation of viewstate MAC failed error 这似乎只发生在
  • 使用Python的CGI表单提交按钮

    我正在尝试创建一个cgi 表单 允许用户输入一个单词 然后它将获取该单词并将其发送到下一页 另一个cgi 我知道如何使用 html 文件来做到这一点 但是当涉及到使用 python cgi 时 我迷失了 这是我需要做的 但它是 html 格
  • 为什么我的通知图标在 Oreo 中无法正确显示?

    很长一段时间以来 我们的应用程序中都有通知 效果很好 我有一个小的 彩色的 png 图标 用于它们 过去运行良好 在奥利奥中 该图标无法正常显示 它只是一个灰色的方块 查看设备上的抽屉 似乎系统 gmail 等现在都有单色图标 因此我怀疑与
  • 如何为 MAC OS X 安装 libgluezilla

    我正在尝试在具有嵌入式 Web 浏览器控件的 Mac 上运行 Mono 应用程序 程序运行 但现在显示浏览器并输出一条消息 未找到 libgluezilla 要获得网络浏览器支持 您需要安装 libgluezilla 我已经搜索过 但不知道
  • 寻找多条短路径的算法

    寻求一种能够产生 N 条短路径的算法 有没有人有算法的经验来寻找多条短路径在有向图中 我的应用程序用于语言 查找同义词链 但从逻辑上讲 这可能用于地理或社交网络 我想要明显不同的路径 而不仅仅是沿途交换几个节点 我真的很想知道是否有办法避免