小步最短路径算法性能测试及与Dijkstras最短路径算法对比

举报
嘟嘟瑞 发表于 2023/09/24 22:38:20 2023/09/24
【摘要】 采用堆实现Dijkstras最短路径算法的瓶颈在于,当发生更新堆中节点最短路径值时,需要进行make_heap的次数,它占Dijkstras使用时间的75%左右。 小步最短路径算法的边访问的开销与Dijkstras的一样,在采用最小堆实现时,且完全避免了Dijkstras算法通过make_heap维持最小堆的开销。 在datagen-8_2及其以下规模的数据中,获取了数百倍的提升。

    基于SNAP库,我们在9个无向图(bio-CE-GN,bio-CE-CX,bio-DM-CX,bio-HS-CX,bio-SC-HT,bio-human-gene1,bio-human-gene2,bio-mouse-gene,bio-WormNet-v3),10个有向图(USairport500,OClinks_w_chars,OClinks_w celegans_n306,Cross_Parker-Consulting_info,Cross_Parker-Consulting_value,Cross_Parker-Manufacturing_aware,Cross_Parker-Manufacturing_info,Freemans_EIES-1_n48,Freemans_EIES-2_n48)上,进行了测试。

    在前12个较大数据集上(节点数量大于等于500),小步最短路径算法均优于,Dijkstras最短路径算法。下面是bio-WormNet-v3数据集上的10个样本截图。

1确定最短路径的节点数量

2小步算法访问的边数量/确定最短路径的节点数量

3Dijkstras的

make_heap/确定最短路径的节点数量

4Dijkstras时间/小步时间

5 迭代起点的节点id

6 小步最短路径算法访问的边数量

7 Dijkstras调用 make_heap的数量





15229

1.89428

0.17204

7.22548

583

28848

2620

15713

0.015713

113534

0.113534

15229

1.9059

0.184254

6.86744

747

29025

2806

16544

0.016544

113615

0.113615

15229

1.90111

0.176308

7.23902

2240

28952

2685

16480

0.01648

119299

0.119299

15229

1.91201

0.186552

7.40032

2742

29118

2841

15395

0.015395

113928

0.113928

15229

1.91542

0.18885

7.34245

3493

29170

2876

15325

0.015325

112523

0.112523

15229

1.90794

0.183597

8.07867

2762

29056

2796

16690

0.01669

134833

0.134833

15229

1.90603

0.182612

6.24988

2711

29027

2781

20262

0.020262

126635

0.126635

15229

1.90242

0.179198

7.70694

4552

28972

2729

15976

0.015976

123126

0.123126

15229

1.91536

0.184516

7.36377

2629

29169

2810

15936

0.015936

117349

0.117349

15229

1.89106

0.181496

7.95415

5178

28799

2764

15920

0.01592

126630

0.12663


附件是一次采样50个迭代起点的运行结果(各个数据集独立的压缩包总是上传失败,上传的合并的文件),各字段以此是:

    1 确定最短路径的节点数量,

    2 小步最短路径算法访问的边数量/确定最短路径的节点数量,

    3 Dijkstras最短路径算法调用 make_heap的数量/确定最短路径的节点数量,

    4 Dijkstras最短路径算法的运行时间/小步最短路径算法的运行时间,

    5 迭代起点的节点id,

   6 小步最短路径算法访问的边数量,

   7 Dijkstras最短路径算法调用 make_heap的数量,

   8 小步最短路径算法运行占用的时钟周期数,

   9 小步最短路径算法的运行时间(单位s),

  10 Dijkstras最短路径算法运行占用的时钟周期数,

   11 Dijkstras最短路径算法的运行时间(单位s)。

   其中,前4个字短在模型预测中有使用。监测数据表明:

   采用堆实现的Dijkstras最短路径算法的瓶颈在于,当发生更新堆中节点最短路径值时,需要进行make_heap的次数,它占Dijkstras使用时间的75%左右;

   采用堆实现的小步最短路径算法的瓶颈在于,需要跳过邻接边时判断节点是否已经找到最短路径。而这个代价在Dijkstras最短路径算法中,也是存在的。

101.jpeg

102.jpeg

103.jpeg

      下图是单独在bio-WormNet-v3数据集上的测试,需要进行make_heap的次数占Dijkstras使用时间的92.8%。   

004.jpeg

     采用线性回归计算器https://stats.blue/Stats_Suite/multiple_linear_regression_calculator.html,使用附件中的前4列数据得到的模型为:

       y = 0.529069 + 0.001171*x1−0.244538*x2+11.44256*x3+0*x1*x1−0.000601*x1*x2+0.002448*x1*x3−28.128116*x3*x3。其中,

          y对应    4 Dijkstras最短路径算法的运行时间/小步最短路径算法的运行时间;

         x1对应    1 确定最短路径的节点数量;

        x2对应    2 小步最短路径算法访问的边数量/确定最短路径的节点数量;

        x3对应    3 Dijkstras最短路径算法调用 make_heap的数量/确定最短路径的节点数量。


001.jpeg


002.jpeg

003.jpeg

     另外,在更大规模数据集datagen-8_2、datagen-8_1、datagen-8_0、datagen-7_9(https://ldbcouncil.org/benchmarks/graphalytics/,https://repository.surfsara.nl/node)等上的测试,其性能提升数百倍。因为内存的限制(16G内存),只能测试最大一亿多边的数据集(134,267,822    M    datagen-8_1-fb.tar.zst)。代码地址 https://github.com/idler66/SmallStepShortestPath。

数据集8_1

2072117

2.51103

0.084917

748.282

876168

5.20314E+06

175958

10722949

10.7229

8023788395

8023.79

2072117

2.43563

0.0823573

838.399

314375

5.04692E+06

170654

10495844

10.4958

8799708877

8799.71

2072117

2.44958

0.0896696

435.277

734662

5.07581E+06

185806

21379720

21.3797

9306094704

9306.09

(我只测试了datagen-7_57_6 7_7 8_2、8_1、8_0、7_9几个数据集)。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。