当前位置: 首页 > 知识库问答 >
问题:

日元的

洪鸿博
2023-03-14

我试图实现Yen提出的Bellman-Ford算法的优化,以及Bannister提出的随机加速

我正在跟踪班尼斯特

我已经能够成功地实现最初的Bellman-Ford算法,这是一个变体,包括算法的早期终止(当顶点距离没有变化时退出),以及Yen对算法的第一次改进(论文中的算法3)。

然而,我在实现Yen的第二个改进和Bannister-Eppstein随机改进(算法4)方面遇到了一些困难

文中给出的日元第二次改进的伪码是

1. number the vertices arbitrarily, starting with s
2. C ← {s}
3. while C != ∅ do
4.    for each vertex u in numerical order do
5.        if u ∈ C or D[u] has changed since start of iteration then
6.            for each edge uv in graph G+ do
7.                relax(u, v)
8.    for each vertex u in reverse numerical order do
9.        if u ∈ C or D[u] has changed since start of iteration then
10.           for each edge uv in graph G− do
11.               relax(u, v)
12.   C ← {vertices v for which D[v] changed}

Bannister Eppstein算法(算法5)的伪代码与上述完全相同,但第一行除外,其中说明:

1. number the vertices randomly such that all permutations with s first are equally likely

我发现第1行和第(4,8)行的语言令人困惑。

“任意/随机地给顶点编号”是什么意思?

按数字顺序迭代顶点是什么意思?

关于我的代码的一些附加信息:我的算法将图形对象作为参数,它具有顶点([0,n])和边([source,destination,weight])的列表属性

编辑:论文中关于算法的一些额外信息:

“正如Yen所观察到的,也有可能以不同的方式改进算法,方法是更仔细地选择外循环每次迭代中边缘松弛的顺序,以便保证每次迭代都有两次正确的松弛,最后一次可能除外。具体地说,从so开始对顶点进行任意编号urce顶点,设G是由从编号较低的顶点到编号较高的顶点的边构成的子图,并设G− 是由从编号较高的顶点到编号较低的顶点的边形成的子图。然后是G和G− 都是有向无环图,并且顶点的编号是G的拓扑编号,与G的拓扑编号相反−. Yen算法的每次迭代都按拓扑顺序处理这两个子图。"

共有1个答案

穆飞龙
2023-03-14

使用Fisher--Yates来洗牌除s之外的顶点。例如,您可以将顶点s、a、b、c、d、e、f和洗牌到f、a、c、e、d、b。然后您可以指定连续的数字s-

 类似资料:
  • 我有下面这样的jaxb类,我希望我的xmlAdapter格式化日期值,我得到了异常? 原因:java。lang.RuntimeException:com。太阳xml。绑定v2。运行时。IllegalAnnotationsException:1 IllegalAnnotationExceptions计数无效@XmlElementRef:Type“class java.lang.String”或其任何

  • 我必须创建一个程序,打印出日期列表(年、月、日),直到用户选择日期(,稍后转换为)。 例如,如果今天是2017-09-30星期六,并且用户输入日期是2017-10-30,程序必须打印这些日期: 2017-09-30, 2017-10-07, 2017-10-14, 2017-10-21, 2017-10-28. 问题: 将日历类型元素添加到列表中 当我试图打印它时,输出只是一堆相同日期的副本。 输

  • python将其分为1-2个数字和Jan或每个月份。所以它只与“2月12日”或“1月12日”匹配,而不与其余部分匹配 那么我如何只对月份进行分组,这样我就可以只对月份使用,而不对表达式的其余部分使用

  • 我找不到日期选择器的元素。我尝试了CssSelector和xpath等。下面是我试过的代码。 代码: 下面是HTML代码。 HTML: 这里是错误: 组织。openqa。硒。NoTouchElementException:无法定位元素:

  • 我已经了解到您不能将事件添加到默认的calendarview(它只是在用户的默认日历中处理),所以我使用了caldroid https://github.com/roomorama/caldroid/blob/master/readme.md,到目前为止,它对文档很有帮助,但当涉及到一件事时,我感到迷茫。 我想做的是改变任何日期的颜色,有一个事件。文档中说要制作一个drawable并将其放入单元格

  • 我一开始从维基百科上得到著名的颜教授对Bellman-Ford算法的优化,后来我在几本教科书的练习部分发现了同样的改进(例如,这是Cormen中的24-1问题和Sedgewick的“算法”中的网络练习N5)。 以下是改进: Yen的第二个改进首先在所有顶点上指定一些任意的线性顺序,然后将所有边集划分为两个子集。第一个子集Ef包含所有边(vi,vj),因此i 不幸的是,我没有找到这个界| V |/2