Menu

python和ruby实现最小生成树算法

  • 软文     2018-6-30
<返回列表

问题:

有六个城市,之间的道路如上图所示。中间的数字表示,连接两个城市的建立道路所花费的金钱数。那么如何建立道路,才能在使用最小金钱的情况下,把各个城市都连接起来呢。

解决:

这是一个最小生成树问题。连接n个城市,最少需要n-1条道路。我们先把金钱数按从小到达排序,然后按金钱数从小到大选择对应的道路。这时我们会用到查并集的算法来判断两个城市是否已经联通,如果联通就查看下一条道路,否则将这条道路选择,并对这两个城市进行并集操作,直到我们得到n-1条道路。(大家可以去查看我之前关于查并集算法的文章。)

下面我们来看ruby和python的代码实现:

ruby实现:

我准备了三个文件:

其中data是用来记录数据的:

前两个数表示城市,第三个数代表金钱数。

quick_sort文件是快速排序算法

大家可以看前面的文章。用ruby实现算法3 快速排序

然后是我们的主程序了,首先是初始化部分:

接着是两个查并集的函数,大家可以看前面的文章:

然后是从data中读取数据,加入字典,将金钱数设为key值,将城市设为value。然后对key进行升序排序,根据这个顺序,计算查并集,选择路径。

但其实这个算法有个特别大的问题,就是把金钱设为key了,因为key值是不能重复的。应该把城市数组设为key值。但我懒得改了,留个大家尝试。

python实现

python实现和上面的思路一样,我们直接上代码

共三个文件

data与上面的一样。union.py我在前一个文章中讲过。

union.py

然后是make_tree.py文件。

这里使用了二维数组来处理数据。


更多阅读

直击泛家居产行业20强的品牌定位策略

软文 2019-5-22
大材研究注意到,近几年来,有不少公司重塑定位,或者放大原来的优势定位。此事,如果做好了,少则省几千万,多则可省几个亿的广告费。 ...

卖家成长 选取关键词得注意 前期关键词调研更重要

软文 2019-5-22
如今在亚马逊上开个店看似很容易,但要保证出单,持续的出单却很难。原因有很多,老话说的没错,三分靠运气七分靠打拼,而做亚马逊前期...

国庆假期借势海报 杜蕾斯发挥正常 宝马海报无文案 ofo大手笔

软文 2019-5-22
文 | PR天下 今年国庆假期与去年最大不一样的地方在于,期间还要累加一天中秋节假期,共计八天,而这竟成为数家品牌借势创意的发力点。...
返回列表
扫描二维码分享到微信
确 认

Copyright © 2015-2021 发稿网

     
扫码二维码立即咨询
确 认