算法教程学习——贪心算法(Kruskal算法)

贪心算法所做的每个选择都是独立的,并且是当下所有选择中的最佳决策。贪心算法相对容易实现,但是很难给出一个确切的证明,即贪心算法是合理的,是问题的最优解之一。贪心算法的证明通常涉及到两个步骤:

  1. 贪心选择性
  2. 最优子结构

贪心选择性指的是,每次通过贪心选择得到了一个最优解决方案的一部分。而最优子结构则是,做出选择后剩下的问题和原有的问题有着同样的解决方案。

最小生成树问题

Kruskal算法

kruskal算法的思想是,按照所有边的大小排序,从最短边开始选择,依次加入最短边,如果未出现环,则算法继续,出现环则跳过该边,算法继续,直到遍历完边集合。
这里的贪心就体现在每次都选择当前最短的边作为生成树的元素。这种贪心的想法是正确的,接下来要处理的问题就是如何判断环的问题。一种简单的解决方案就是运用遍历技术,另外还可以运用并查集来解决问题。
关于并查集,可以参考这篇博客:https://blog.csdn.net/huisekonghuan/article/details/79288550

#coding:utf-8

class unionFindSet(object):
	
	def init(self, number):
		self.parent = [i for i in range(number)]

	def find(self, k):
		while self.parent[k] != k:
			k = self.parent[k]

		return
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值