热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

有向图php,【小龙的资结演算法秘籍】(8)有向图(directedgraph)及DAG(directedacyclicgraph)的详细介绍...

哈啰~大家好,之前在【小马的资结演算法秘笈】(6)超好懂的图(gragh)与树(tree)的观念介绍介绍过什幺是graph,那什幺是directedgr

哈啰~ 大家好, 之前在【小马的资结演算法秘笈】(6)超好懂的图(gragh)与树(tree) 的观念介绍介绍过什幺是graph, 那什幺是directed graph呢? 其实很简单,undirec...

哈啰~ 各位好!,

以前在【小龙的资结演算法秘籍】(6)非常好懂的图(gragh)与树(tree) 的意识详细介绍详细介绍过什幺是graph,

那什幺是directed graph呢?

其实不是很难,undirected graph的边是沒有分方位的,

边所相互连接的2个端点是相通的

譬如说这张地形图(北- 新北、桃- 桃源、竹- 新竹):

7d9f0c2175233f20e2bb8e0c8e54a225.png

「新北」与「桃源」邻近,画一条线连起來,

「桃源」与「新竹」邻近,画一条线连起來,

相互是能够 相通的

可是如果是directed graph,

大家便会把边标上方位,

意味着能够 从哪儿来到哪儿,

例如画成那样:

9c5139bbf0981e31f3ce5ba58a16181c.png

那幺含意就变为桃源跟新北是能够 相通的,

可是只能桃源能够 去新竹,新竹不能去桃源

由于directed graph,是有专一性的,

就很合适用于表达有单行线的地形图,

或者用于表述有依次关係的办事次序,

讨论一下一些生活上的事例协助了解吧

一、用餐次序

你来饭店用餐的情况下,

餐食将会会依照一定的次序出去,

用端点 A->B 表达 A要先吃了,B餐食才会出現

譬如说本图表达要先吃了开胃小菜才可以吃汤和主餐,

汤和主餐都吃完了才可以吃甜品

对于饮品沒有限定,什幺情况下吃都能够

aed786a13ce2f9636345c25341117976.png

二、修课次序

譬如说在修课的情况下,一部分课程内容会规定「先修课程内容」,

还可以用有向图表述修课依次关係,

譬如说图上表达要修「学习英语」以前要先修好「基础英文一」和「基础英文二」才能够 修,

通识课程内容则不用先修课程内容

6d0a495fd0a9a84a1c27e8af072950e9.png

DAG(directed acyclic graph)

简易详细介绍完directed graph,

那什幺是directed acyclic graph呢?

acyclic是沒有环的,

假如一个directed graph里边沒有cycle,

就称之为是一个DAG

cycle简易而言,是你能够 从一个点考虑,

历经一条相对路径后又回到原点,

譬如说这幅图你能从A考虑,

走A->B->C->D->A绕一圈返回A,

这幅图便是有cycle的

ea880eeedc51ae85c5913b391af6e29e.png

相反,若把图改为那样就沒有cycle

786e8c496448cc6878e25a23890fe3f6.png

形象化而言,假如用directed graph表达办事次序得话,

DAG能够 确保寻找一个次序把事儿做了,

要不是DAG就没法做(表达有环,会相互之间把事儿卡死),

打个比方:

是我很多东西爱吃,

吃鱼以前要先吃豆腐花

吃饮品以前要先吃鱼

吃苹果以前要先吃饮品

吃饮品以前要先吃豆腐花

1b25c90b7c83a3d8e8f393b2ad14160a.png

那样的话就没法寻找考虑所述标准的进食次序

简易详细介绍topological sort

topological sort(汉语译者拓扑排序)与DAG拂面有关,

即然姓名都称为sort了,

表达是某类排列

topological sort便是寻找一种次序,

促使你可以圆满把事儿把表达事儿顺序的directed graph做了,

譬如说这幅图是用餐次序

aed786a13ce2f9636345c25341117976.png

先吃了开胃小菜才可以吃汤和主餐,

汤和主餐都吃完了才可以吃甜品

饮品沒有限定,什幺情况下吃都能够

那幺「开胃小菜」->「汤」->「主餐」->「甜品」->「饮品」是一个合理合法的拓扑排序,

「开胃小菜」->「饮品」 ->「主餐」->「汤」->「甜品」也是一个合理合法的拓扑排序,

拓扑排序有很多种多样将会排法,要是不违背依次顺序的都能够

怎么知道一张有向图有木有cycle呢?

我们可以思索一个难题,让你一个directed graph,

你怎样可以用程序分辨这幅图有木有cycle呢?

这就留到下一章讲要怎么写程序做topological sort的情况下一併讲吧

参考文献



推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了游戏开发中的人工智能技术,包括定性行为和非定性行为的分类。定性行为是指特定且可预测的行为,而非定性行为则具有一定程度的不确定性。其中,追逐算法是定性行为的具体实例。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • HashMap的扩容知识详解
    本文详细介绍了HashMap的扩容知识,包括扩容的概述、扩容条件以及1.7版本中的扩容方法。通过学习本文,读者可以全面了解HashMap的扩容机制,提升对HashMap的理解和应用能力。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了数模国赛的报名参加方法,包括学校报名和自己报名的途径。同时给出了建模竞赛的建议,重在历练的同时掌握方法以及弥补自己的短板。此外,还分享了论文的结构和模型求解部分的注意事项,包括数学命题的表述规范和计算方法的原理等。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
author-avatar
cresslyty_723
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有