intro to graph algorithms

what is graph

directed graph

undirected graph

图的表示形式

用m表示边的条数,n表示顶点个数。

邻接表

链表形式,边表形式
适合表示稀疏图。邻接矩阵有很多0,所以用表来表示

邻接矩阵

适合表示稠密图,每个vertice out degree多,矩阵很满。

遍历

深度优先

广度优先

并行化

使用level syncrinize. 每个iteration只扩张一个单元。

最短路问题

Single source shortest problem

从一个点出发,到其他所有点的距离。每个点储存从起点到自己的距离。

All pair shortest problem

从任意点到任一点的距离。每个点储存N-1个点到自己的距离。

floyd-warshall

只需要5行代码,很简洁。思想是插点,比如求1到3最短路,会求经过2,4,5.。。中转的距离。

  • 时间复杂度:O(N^3)
  • 适合 APSP问题 和数据量小的问题。

dijkstra

使用两个优先级队列(open, close)来减少重复计算。每个顶点只入队一次,出队之后进入close

  • 复杂度: O(m*logn)
  • 适合SSSP
  • 图不能带有负权值

bellman-ford

每一个顶点对每一条边进行relax。也可以用队列来优化,即每次不遍历所有顶点,而是把队列清空就算完事。与BFS和dijkstra不同,这一轮relax之后的值有可能在之后被再次relax,出队之后可能再次进队。

  • 复杂度 最坏O(MN)
  • 适合SSSP
  • 适合稀疏图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值