博客
关于我
算法C++ 面试常考算法最小生成数 Kruskal算法和Prim算法理解(第四章)
阅读量:205 次
发布时间:2019-02-28

本文共 738 字,大约阅读时间需要 2 分钟。

造轮子博客链接

8分钟最佳视频理解Prim算法和Kruskal算法

最小生成树的理解

在图论中,最小生成树是一种将图中的所有点用无环的路径连接起来,并且使所有边权值之和最小的树状结构。最小生成树的特点是不存在环,且只包含图中必要的边。对于一个包含v个节点的图,最小生成树中会有v-1条边。

我在网上找到了一张图来帮助理解最小生成树的概念。

Kruskal算法理解

相比Prim算法,Kruskal算法更容易理解。这是一个典型的贪心算法,主要步骤如下:

  • 排序:首先对所有权值的边进行降序排序。

  • 插入选取:从权值最小的边开始,逐一尝试将其加入生成树中,只要这条边不会形成环,就将其选入。

  • 停止条件:当生成树中包含v-1条边时,算法结束。

  • Kruskal算法的核心在于避免形成环。例如,在选择连接2号和8号节点的权值为7的边时,需要检查是否会形成环。如果发现2号、8号、7号、6号、5号节点已经构成一个环,则舍弃这条边,继续下一条边。

    Prim算法理解

    Prim算法的描述相对复杂,但可以将其归纳为一种贪心算法。其核心思想是:

  • 初始化:从某个起始点(通常选择权值最小的点)开始,建立一个包含该点的子集。

  • 扩展子集:在每一步中,找到当前子集中到未被选取的点中距离最近的节点,并将该点加入子集中。

  • 终止条件:当子集包含所有节点时,算法结束。

  • 可以说,Prim算法的实现相对复杂,其难点在于如何有效地找到路径最短的节点。

    相关习题链接

    有能力的朋友可以前往力扣平台尝试相关题目。虽然我计划在下半年加入会员,但希望通过自己的努力在不影响学习节奏的情况下完成题目解答。这篇博客后续将会补充相关解题思路。

    通过对Prim算法和Kruskal算法的理解,我们可以更清晰地掌握最小生成树的相关知识。

    转载地址:http://wjni.baihongyu.com/

    你可能感兴趣的文章
    python | cudf,一个超实用的 Python 库!
    查看>>
    python | daphne,一个非常nice的 Python 库!
    查看>>
    python调用halcon
    查看>>
    python | doit,一个非常实用的 Python 库!
    查看>>
    python | easyocr,一个超厉害的 关于OCR的 Python 库!
    查看>>
    python | fastFM,一个高级的 Python 库!
    查看>>
    python | feature_engine,一个实用的 Python 库!
    查看>>
    python | filelock,一个超酷的 Python 库!
    查看>>
    python | fire,一个强大的 Python 库!
    查看>>
    python | flanker,一个神奇的 Python 库!
    查看>>
    python | flower,一个强大的 Python 库!
    查看>>
    python | funcy,一个超强的 提供函数式编程工具 Python 库!
    查看>>
    python | ggplot,一个超强的 Python 库!
    查看>>
    python | grab,一个强大的 Python 库!
    查看>>
    python | gunicorn,一个非常实用的 Python 库!
    查看>>
    python | h5py,一个无敌的关于 HDF5 的 Python 库!
    查看>>
    python | huey,一个非常厉害的 任务调度 Python 库!
    查看>>
    python | hypothesis,一个有趣的 Python 库!
    查看>>
    python | Indico,一个超酷的 Python 库!
    查看>>
    python | isort,一个有趣的 自动整理导入语句 的Python 库!
    查看>>