Learning Data Structure_5_图(2)

天气越来越热,看书还得静得下心啊,今天继续图这一章,概念和算法众多,第一遍看以广度优先的形式为主,以后若要用到具体的算法再去翻“算法导论”吧。下面是学习内容和笔记。

图(graph)

1.图的存储结构

邻接矩阵:顶点数组 + 边数组(二元);无向图的边数组为对称矩阵,有向图非对称(行的元素和表顶点的出度和,列对应入度和);网图的边数组中元素由布尔型变为权值。

邻接表:顶点表(data+firstedge) + 边表(adjvex+next);有向图的边表分出边表和入边表;带权的网图,在边表中增加一个weight的数据域。

十字链表:是对有向图邻接表的优化;将邻接表和逆邻接表结合,重新定义顶点表(data+firstin+firstout),边表结点结构(tailvex弧尾下标 + headvex弧头下标 + headline +taillink);创建算法的时间复杂度和邻接表相同,但是出度和入度可同时方便的求得——关注顶点。

邻接多重表:是对无向图邻接表的优化;重新定义边表结构(ivex + ilink + jvex + jlink);ivex和jvex表一条边的两个顶点,ilink表指向依附顶点ivex的下一条边,jlink表指向依附顶点jvex的下一条边;同一条表,邻接表用两个顶点表示,邻接多重表用一个顶点表示——关注边。

边集数组:由两个一维数组组成,顶点数组+边数组(begin + end + weight)。

2.图的遍历

深度优先DFS(depth first search)和广度优先BFS(breadth first search)。

3.最小生成树

一个连通图(带权)的生成树是一个极小的连通子图,含全部n个顶点,只含恰足以构成一棵树的n-1条边,把构成连通网的最小代价生成树称为最小生成树。

Prim(普里姆)算法: N=(V,{E})是连通图,开始时从V中任取一点u并入顶点集U,从V-U中取一点vi,从U中取一点ui,使得(ui,vi)权最小,将vi并入U;重复上述过程,直至U =V.

Kruskal(克鲁斯卡尔)算法:严版 P175。

4.最短路径

定义:指源顶点到终顶点之间的经过的边上的权值之和最少的路径。

Dijkstra(迪杰斯特拉)算法:初态:D[j] = MIN{D[i] | vi属于V};次短路径的终点是vk,则下一条次短的路径为或是(v,vk)或是(v,vj,vk)。

Floyd(弗洛伊德)算法:三个for循环。

5.拓扑排序:AOV网;拓扑排序算法:建立邻接表,顶点表(in + data + firstedge)+边表——解决工程能否顺利进行,并给出顶点的顺序。

6.关键路径:AOE网;解决工程完成需要的最短时间——注意与最短路径相区别,关键路径求的是网中权值和(时间和)最大的一条路径,即关键路径;算法原理由etv(通过拓扑排序计算得到)和ltv求得ete和lte,根据ete[k]与lte[k]是否相等来判断ak是否是关键路径上的关键活动。

Learning Data Structure_5_图(2)

时间: 2024-10-12 21:51:19

Learning Data Structure_5_图(2)的相关文章

Learning Data Structure_4_树(2)和图(1)

今天杂事较多,学习时间比较分散,所以效率不是很高,看的内容也较少,总体来看,这四天把数据结构的内容看了过半,还剩图.查找和排序三章,争取接下来三天内把数据结构的内容结束掉.下面是今天的学习内容. 树(tree) 1.前序遍历算法:与二叉树的定义一样采用递归形式. 2.中序和后序遍历与前序类似用递归实现:前.中.后是指单次递归算法中访问根节点的顺序 3.已知(前+中)or(后+中)序遍历序列可以唯一确定一颗二叉树:单已知 前+后 则不能. 4.扩展二叉树:将每个结点的空孩子指针引出一个虚结点:扩展

Learning Data Structure_3_串和树(1)

今天找兼职继续碰壁中,吃过中饭接着蹲图书馆看数据结构,呵呵,被KMP算法虐了一下午,恨啊,当初上数据结构选修课的时候怎么没好好听呢.下面是今天的学习笔记. 串(string) 1.定义:是由0个或多个字符组成的有限序列,即字符串. 2.串的比较通过字符的编码大小来实现,有ASCII码(7位和8位二进制).Unicode码(16位):字符串的相等. 3.串不是线性表,因为串针对的是字符集,注重子串的查找替换等,线性表针对单个元素的操作. 4.串也分顺序存储结构和链式存储结构 5.朴素的模式匹配算法

Learning Data Structure_1_数据结构绪论和算法

今天回到了杭电,在戴荣学弟的帮助下暂住他的寝室,解决了基本的生活问题,可以多点时间精力开始学习阅读刘志老师给的暑假要求掌握的书籍和知识了. 首先是数据结构,手头上主要是两本教材,一本是严蔚敏等主编的<数据结构(c语言版)>,另一本是程杰编的<大话数据结构>,前者经典严谨,后者通俗有趣,应该是不错的选择.以下是简要的学习内容和笔记. 数据结构绪论 1.数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科. 2.掌握以下概念和术语:数据.数据

Learning Data Structure_2_线性表、栈和队列

一个人在学校的日子有些寂寞,但是st说男人要耐得住寂寞,做学问也是如此吧.今天看了线性表.栈和队列的内容.以下是学习记录. 线性表(list) 1.定义:0个或多个数据元素的有限序列,元素有且只有一个直接后继和一个直接前驱:基本操作ListLength.GetElem.LocateElem.ListInsert等,并集Union的实现. 2.线性表的顺序存储结构 指用一段地址连续的存储单元依次存储数据元素(c语言中用数组实现改结构):数组长度>=线性表的长度:对于任意位置的存入或取出的所需时间相

Learning Data Structure_7_排序

浑沦吞枣的过了一遍数据结构,今天把最后一章排序的内容结束.大概实现了一个星期看完的想法,当然不是为了求速度,这一次看主要是把各种数据结构做到心中有数,概念清晰,了解各自有哪些经典的算法和算法思路原理.以后若要用到特定的结构和算法再去算法导论中详细研读.下面是今天的学习笔记. 排序(ranking) 1.排序可看成是对线性表的操作:多个关键字排序可转化成单个关键字排序:排序的稳定和不稳定:主要讲内排序,其排序算法主要受3方面影响:时间性能,辅助空间,算法复杂性. 2.按复杂度分:简单算法(冒泡排序

R8:Learning paths for Data Science[continuous updating…]

Comprehensive learning path – Data Science in Python Journey from a Python noob to a Kaggler on Python So, you want to become a data scientist or may be you are already one and want to expand your tool repository. You have landed at the right place.

【转】The most comprehensive Data Science learning plan for 2017

I joined Analytics Vidhya as an intern last summer. I had no clue what was in store for me. I had been following the blog for some time and liked the community, but did not know what to expect as an intern. The initial few days were good – all the in

【深度学习Deep Learning】资料大全

转载:http://www.cnblogs.com/charlotte77/p/5485438.html 最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: Free Online Books Deep Learning66 by Yoshua Bengio, Ian Goodfellow and Aaron Courville Neural Networks and Deep Learning42 by Michael Nielsen Deep Learning27 by

Machine and Deep Learning with Python

Machine and Deep Learning with Python Education Tutorials and courses Supervised learning superstitions cheat sheet Introduction to Deep Learning with Python How to implement a neural network How to build and run your first deep learning network Neur