2. 最短路径

文章插图
继续上面的例子,我们得到了一个德国城市的图以及它们之间的距离 。
你想知道如何从法兰克福(起始节点)到慕尼黑的最短距离 。
我们用来解决这个问题的算法叫做Dijkstra 。用Dijkstra自己的话来说:
从鹿特丹到[格罗宁根的最短路线是什么?一般来说,最短路径的算法是这样的,我花了大约20分钟来设计它 。一天早上我在阿姆斯特丹和我的年轻的未婚妻购物,累了,我们坐在咖啡馆露台喝一杯咖啡,我就在想我能不能想出这个最短路径算法,然后我就想出来了 。正如我所说,这是一个20分钟的发明 。事实上,它是在1959年出版的 。三年后,还可以读到,事实上,它相当不错 。它如此漂亮的原因之一是我不用铅笔和纸来设计它 。后来我了解到,不用铅笔和纸设计的好处之一是,你几乎不得不避免所有可以避免的复杂性 。最终,令我大为惊讶的是,这个算法成了我成名的基石之一 。应用
- Edsger Dijkstra,在对Philip L. Frana的采访中
- Dijkstra算法的变体广泛应用于谷歌地图中,用于寻找最短路径 。
- 你在沃尔玛,你有不同的通道和所有通道之间的距离 。你想要提供从A通道到D通道到客户的最短路径 。

文章插图
- 你可以看到LinkedIn如何显示1级和2级的连接 。幕后发生了什么?

文章插图
代码
print(nx.shortest_path(g, 'Stuttgart','Frankfurt',weight='weight')) print(nx.shortest_path_length(g, 'Stuttgart','Frankfurt',weight='weight')) -------------------------------------------------------- ['Stuttgart', 'Numberg', 'Wurzburg', 'Frankfurt'] 503你也可以找到所有的地点对之间的最短路径:
for x in nx.all_pairs_dijkstra_path(g,weight='weight'): print(x) -------------------------------------------------------- ('Mannheim', {'Mannheim': ['Mannheim'], 'Frankfurt': ['Mannheim', 'Frankfurt'], 'Karlsruhe': ['Mannheim', 'Karlsruhe'], 'Augsburg': ['Mannheim', 'Karlsruhe', 'Augsburg'], 'Kassel': ['Mannheim', 'Frankfurt', 'Kassel'], 'Wurzburg': ['Mannheim', 'Frankfurt', 'Wurzburg'], 'Munchen': ['Mannheim', 'Karlsruhe', 'Augsburg', 'Munchen'], 'Erfurt': ['Mannheim', 'Frankfurt', 'Wurzburg', 'Erfurt'], 'Numberg': ['Mannheim', 'Frankfurt', 'Wurzburg', 'Numberg'], 'Stuttgart': ['Mannheim', 'Frankfurt', 'Wurzburg', 'Numberg', 'Stuttgart']}) ('Frankfurt', {'Frankfurt': ['Frankfurt'], 'Mannheim': ['Frankfurt', 'Mannheim'], 'Kassel': ['Frankfurt', 'Kassel'], 'Wurzburg': ['Frankfurt', 'Wurzburg'], 'Karlsruhe': ['Frankfurt', 'Mannheim', 'Karlsruhe'], 'Augsburg': ['Frankfurt', 'Mannheim', 'Karlsruhe', 'Augsburg'], 'Munchen': ['Frankfurt', 'Wurzburg', 'Numberg', 'Munchen'], 'Erfurt': ['Frankfurt', 'Wurzburg', 'Erfurt'], 'Numberg': ['Frankfurt', 'Wurzburg', 'Numberg'], 'Stuttgart': ['Frankfurt', 'Wurzburg', 'Numberg', 'Stuttgart']}) ....3. 最小生成树

文章插图
现在我们有另一个问题 。我们为一家水管铺设公司或互联网光纤公司工作 。我们需要用最少的电线/管道连接图中所有的城市,我们该怎么做?

文章插图
一个无向图,右边是它的最小生成树
应用
- 最小生成树直接应用于网络设计,包括计算机网络、电信网络、交通网络、供水网络和电网(它们最初是为这些网络而发明的)
- MST用于逼近旅行商问题
- 聚类 — 首先构造MST,然后使用簇间距离和簇内距离确定MST中某些边缘的分割阈值 。
- 图像分割 — 用于图像分割,我们首先在一个图上构造一个MST,其中像素是节点,像素之间的距离基于一些相似性度量(颜色、强度等) 。
推荐阅读
- 开设淘宝店铺需要做好哪些准备 淘宝开店需要注意什么
- 一个早餐店需要投资多少钱 开早餐店成本预算
- 淘宝开店银行卡必须开通网银吗 开淘宝网店需要绑定银行卡吗
- 为什么西红柿没有以前好吃了?科学家给我们讲出了实情
- 走近民法典,关于婚姻,你需要了解这些!
- 去西藏旅行如何办理边防证?都是哪些地方需要?请看过来
- 淘宝开店怎么开的怎么注册 开淘宝店铺需要怎么注册
- 吸血鬼吸女人的血全部过程 吸血鬼需要呼吸吗
- 一米高的桌子适合多高的椅子,买桌子需要注意什么
- 淘宝极速推正在推广需要多久 淘宝极速推在哪里显示
