本人数学专业本科,研究生读的计算机,方向是深度学习相关的,在平时上课和自己自学,看论文都是深度学习和机器学习相关的。打算毕业之后从事机器学习相关工作,但是不知道学完Dl,ML的相关算法之后,还需不需要学习传统的数据结构,比如二叉树,图,队列,栈什么的,还有必要学习算法导论里的算法吗?如果都学的话,那感觉时间不够,而且这些难度都挺大的。有没有前辈来指点一二呢?

这是今天逛知乎时看到的一个提问“学习机器学习深度学习之后,还需要掌握传统算法和数据结构吗?”。相信很多机器学习的初学者都会有类似的疑问,特别是半路出家的学习者。为什么这么说呢?因为计算机科班出身的学生,在本科期间都系统地学习过数据结构和算法,他们肯定不会提出这样的问题,他们在学习的过程中会真切感受到这些知识的巨大作用。

最小生成树算法在机器学习中的应用

我最近在看数据聚类方面的论文,有篇文章用改进的MST算法实现稀疏数据集的自动聚类,这种思路让我眼前一亮。该文的主要思路是将多维向量视为空间中的点,向量之间的距离看作边长,将距离小于设定阈值的数据用最小生成树连接起来实现数据集的聚类。最小生成树(MST)虽然是图论中的概念,但是在机器学习领域却有着意想不到的效果。

在上篇文章中,我们介绍了Prim算法的基本思路和python实现。当然除了Prim算法之外,还有很多其它的算法,比如本文将要介绍的Kruskal算法。与Prim算法一样,Kruskal算法也是贪心算法的一种,它的核心思想是:将边按照长度从小到大排序,并依次添加到MST中,但要确保不在MST中形成环路。

Kruskal算法

Kruskal算法与Prim算法有着明显的不同。Prim算法初始化两个集合分别保存MST节点和剩余节点,寻找连接两个集合的最小边,并将边添加到MST中。在整个过程中,边的添加始终是链式的,MST像树一样从根节点慢慢生长。而Kruskal算法只关心边的长度,很可能是多棵子树各子生长,最后组合成一棵完整的树。Kruskal算法的步骤如下:

数据初始化:最小生成树MST为空集,边的集合E={,……},三元组中的P,,代表边的两个端点,W代表边的长度;添加边:按照由小到大的顺序,将边依次添加到MST中,如果新增加的边导致最小生成树出现环路,则删除这条边;循环执行第2步,直到MST中边的数量等于N-1(N是节点的总数)。

与Prim算法相比,Kruskal算法的描述要简单得多,它的核心在于判断新增加的边是否构成环路。本文的思路是为每个节点增加一个根节点属性,如果新增边的两个端点的根节点相同,说明他们已经在一个相同的子树中,增加该边肯定会出现环路,因此予以舍弃。

python实现

在数据初始化阶段,除了构建边长矩阵之外,还要构建一个包含所有边的数组。为了判断两个点的根节点是否相同,我们还要准备一个数组保存所有点的根节点。下图是数据初始化的完整代码,代码中使用了生成器generator、过滤器filter、combinations()函数、sorted()函数,非常pythonic。

判断新增的边是否会产生闭环是该算法的难点所在。通常的思路是判断两个点在新增边之前是否连通,这种算法的时间复杂度很高,查询效率较低。本文的思路是记录每个点的根节点信息,每当增加边成功,就把点的根节点修改为P点的根节点。当需要增加边时,只需要判断M和N的根节点是否相同就可以了。

上图的代码已经非常简洁了,配合注释应该很容易理解。当然如果想让代码更加“面向对象”,可以定义两个类:边Edge和节点Node,端点、边长、根节点这些变量都可以当作属性封装到类中,这样会使代码更加清晰易懂。

总结

程序员绝对是世界上最聪明的一群人,在他们的大脑中存储了大量的设计模式、算法和数据结构,这些知识不仅可以用于应付本职工作,还可以在生活中发挥指导作用。流传于世的算法是无数高智商前辈先贤的智慧结晶,蕴涵了丰富的人生哲学。编程算法在你的生活中有哪些成功的应用案例,期待大家留言交流讨论。

python最小生成树算法_最小生成树:Kruskal算法及python实现相关推荐

  1. CSP认证201412-4 最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树

    题目分析 来源:acwing 分析:这是一道最小生成树的裸题. 这里默写Kruskal求最小生成树的最小费用的模板. 最小生成树模板请参考笔者的另一篇博文: 最小生成树板子-AcWing 859. K ...

  2. 最小生成树-Prim算法和Kruskal算法

    转载自:https://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html Prim算法 1.概览 普里姆算法(Prim算法),图论 ...

  3. 【Matlab】智能优化算法_蜻蜓优化算法DA

    [Matlab]智能优化算法_蜻蜓优化算法DA 1.背景介绍 2.灵感 3.公式推导 3.1 勘探和开发操作 4.算法流程图 5.文件结构 6.伪代码 7.详细代码及注释 7.1 DA.m 7.2 d ...

  4. 【Matlab】智能优化算法_蚁狮优化算法ALO

    [Matlab]智能优化算法_蚁狮优化算法ALO 1.背景介绍 2.基本思想 3.公式推导 3.1 ALO算法的运算符 3.2 蚂蚁的随机游动 3.3 困在蚂蚁坑里 3.4 修建陷阱 3.5 蚂蚁划向 ...

  5. 【Matlab】智能优化算法_灰狼优化算法GWO

    [Matlab]智能优化算法_灰狼优化算法GWO 1.背景介绍 2.基本思想 2.1 等级制度 2.2 狩猎方式 3.公式推导 3.1 社会等级制度 3.2 包围猎物 3.3 包围猎物 3.4 攻击猎 ...

  6. python最小生成树算法_图算法|Prim算法求最小生成树

    01 - 一个实际问题 要在n个城市之间铺设光缆,要求有2个: 这 n 个城市的任意两个之间都可以通信: 铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此要使铺设光缆的总费用最低. 如下所示 ...

  7. 生成随机数放入整型数组怎么判断有没有重复_图的应用(1)-连通图的最小生成树(Prim算法和Kruskal算法)...

    连通图的生成树: 是一个极小的连通图,它含有图中全部的N个顶点,但是只足以构成一颗树的N-1条边. 必须满足三个条件: 图是连通图: 图中包含了N个结点 图中边的数量等于N-1条. 连通图生成树的判断 ...

  8. prim算法_最小生成树(Kruskal和Prim算法)

    文章和资源同步更新至微信公众号:算法工程师之路 8月份会开启每日算法题系列,值得期待哦 上一篇文章,我们讲了图的创建和遍历,其中遍历的算法主要有BFS(广度优先算法)和DFS(深度优先算法)两种,并且 ...

  9. prim算法_最小生成树的本质是什么?Prim算法道破天机

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法和数据结构专题20篇文章,我们继续最小生成树算法,来把它说完. 在上一篇文章当中,我们主要学习了最小生成树的Kruskal算法.今 ...

  10. 最小生成树 算法_最小生成树算法

    最小生成树 算法 距离我的资格考试只有十天的路程,我决定离开教科书,改回写作. 毕竟,如果我可以解释这些概念,那么我应该能够通过对它们的测试,对吗? 好吧,今天我很有趣地介绍了算法课程中的一个概念:最 ...

最新文章

  1. 沈向、洋周明:神经自然语言处理进展综述:建模,学习,推理
  2. php顺序、二分查找
  3. Junit测试 - Spring的配置
  4. 2016 linux发行版排行_选择困难症必看!云服务器如何选择操作系统,Windows和Linux哪个更好?...
  5. TortoiseGit 修改密码
  6. python字典文件,python-文件转字典,字典转文件
  7. msf:Known bug in WMI query, try migrating to another process
  8. JAVA基础系列:Arrays.binarySearch二分查找
  9. mysql使用已有的数据库_使用SQL操作MySQL数据库
  10. 6岁会编程,14岁就被麻省理工录取,神童谎言是如何诞生的?
  11. 7.运输层---UDP
  12. css实现垂直居中6种方法
  13. PolyCode编译(Linux)
  14. 机顶盒刷成普通android,移动网络电视机顶盒如何刷成安卓系统
  15. radasm相关问题
  16. [C#]LambdaTest
  17. FinClip 3 月产品小报:新功能上线小程序一键生成 App
  18. 常见的java开发面试题整理
  19. bios密码解锁软件_你知道自己的电脑还有这么一个BIOS程序吗
  20. 流行编曲(5)采样、小打、Pad、声场

热门文章

  1. 砍掉中国90%的科研人员,对科技发展的影响微乎其微,某教授酒后真言!
  2. 类名作为形式参数传递
  3. pat乙级 1091 N-自守数 (15 分)
  4. iTOP-4418/6818开发板-QtE4.7WIFI_MT6620热点
  5. Java JDK动态代理Proxy类的原理是什么? - 知乎(重排版)
  6. 程序中使用log4J打印信息的两种方式
  7. Linux服务器安全登录设置
  8. information_schema.profiling学习
  9. Marlin 溫度 sensor 校正
  10. OpenCV学习笔记】二十七、轮廓特征属性及应用(四)——正外接矩形