`
javasee
  • 浏览: 973316 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

一步一步写算法(之图结构)

 
阅读更多

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】


图是数据结构里面的重要一章。通过图,我们可以判断两个点之间是不是具有连通性;通过图,我们还可以计算两个点之间的最小距离是多少;通过图,我们还可以根据不同的要求,寻找不同的合适路径。当然,有的时候为了计算的需要,我们还需要从图中抽象出最小生成树,这样在遍历计算的时候就不需要持续判断是不是遇到了循环节点。当然,这所有的一切都是从图的表示开始的。

1)矩阵表示

矩阵表示可以说是最简单的表示方法,如果说一个图中有5个点,那么我们就可以构建一个5*5的矩阵。如果点和点之间存在连接,那么填上1;反之如果不存在连接,那么可以用0表示,当然对角线上面的点是没有意义的。如下图所示:

如果点和点之间还是存在方向的,那么它们关于(x,x)对称轴就是不对称的,所以结果也可能是这样的:

当然,如果点和点之间的关系存在某种权重,比如说距离,那我们可以用它来代替原来的数据1:

矩阵表示下的图结构非常直观。但是,矩阵有一个特点,就是比较浪费空间。因为我们这里举例的顶点比较少,只有5个,但是请大家试想一下,如果一张图上有10000个节点,那么10000*10000该是多大的一个空间啊。重要的是,这10000*10000上面大多数点都是0,所以浪费的空间是相当可观的。


2)数组结构

为了改变矩阵浪费空间的特点,我们可以建立一个只有顶点和边组成的数据空间。比如说,我们定义一个这样的结构:

上面定义的数据结构非常简洁。第1个为起始顶点,第2个为终点,第3个为权重,第4个判断当前边是否有向。图中要是有多少边,我们就要定义多少个这样的数据。如果把这些边的数据都放在一起构成一个数组,那么我们就可以用这个数组来表示图的全部信息了。

但是,我们还是觉得有遗憾的地方。这个数据结构过分强调了边的意义和重要性,忽略了顶点本身的含义。因为,我们在强调边的时候,应该添加进顶点的相关特性。离开顶点的支持,单纯的边信息是没有什么含义的。


3)基于顶点链表的图表示

首先,我们定义顶点的基本结构:

我们用VECTEX记录顶点的相关信息,LINE表示节点的相关信息。如果LINE是在VECTEX中的变量,那么neighbor表示当前所有节点的起始点都是start点。如果它是PATH中的变量呢,那么next的起始点就是LINE链接的前面一个点,不知道我讲清楚了没有?下面就是点与点之间PATH的定义。

其中start为起始点,end为终结点,next为start链接的下一个点,lenth为路径的总长度,当然也可以修改成其他的权重形式。

注意事项:

1)数组和链表是图结构的基础,朋友们应该好好掌握

2)每一种数据结构都有自己的应用场合,关键是理解其中的思想和方法

3)图的表示是图运算的基础,掌握它们是我们进一步学习的基本条件

分享到:
评论

相关推荐

    一步一步写算法

    文件"一步一步写算法(之图添加和删除).pdf"可能涉及图的邻接矩阵或邻接表表示,以及如何在图中添加和删除节点或边。 5. **查找算法**: - 查找算法如二分查找、线性查找等是数据结构中基础且重要的部分。"一步一步...

    一步一步写算法(全)

    在学习过程中,"一步一步写算法"可能会涵盖基础数据结构,如数组、链表、栈、队列、堆、树和图,因为它们是实现许多算法的基础。理解这些数据结构的特性和操作,能帮助我们更有效地设计和分析算法。 此外,资源中...

    数据结构与算法.pdf

    线性结构是指数据元素之间是一对一的关系,树形结构是指数据元素之间是一对多的关系,图结构是指数据元素之间是多对多的关系,集合结构是指数据元素之间没有任何关系。 线性结构可以进一步分为顺序存储和链式存储两...

    算法与数据结构.pdf

    图结构则能够表示复杂的网络关系,如社交网络。每一种数据结构都有其特有的运算方式,如树的遍历、图的搜索等。 数据结构的选择与设计必须基于对问题的深刻理解。在这个过程中,抽象数据类型(ADT)的概念起到了...

    数据结构与算法 题库

    ### 数据结构与算法题库解析 #### 一、选择题解析 **1. 算法的计算量的大小称为计算的( )。** **答案:B. 复杂性** **解析:** 在计算机科学中,算法的计算量通常指的是算法运行时所需资源的度量,包括时间和...

    数据结构与算法

    贪心算法则在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是全局最好或最优的算法;回溯算法是一种通过探索所有可能的候选解来找出所有解的算法;分支限界算法则是对搜索空间进行剪枝,从而...

    数据结构算法背诵版

    数据结构与算法是计算机科学的核心组成部分,它们在软件开发、数据分析、人工智能等多个领域扮演着至关重要的角色。在《数据结构算法背诵版》这一资源中,我们深入探讨了一系列基础及进阶的数据结构与算法概念,旨在...

    数据结构与算法 课后答案

    数据结构与算法是计算机科学的基础,对于理解和设计高效的软件系统至关重要。C++作为一种强大的编程语言,常被用于实现和理解这些概念。以下是对标题“数据结构与算法 课后答案”以及描述“数据结构与算法(C++版)...

    数据结构算法演示系统DSDEMO

    4. **图结构**:由节点和边构成,用于表示对象之间的复杂关系,如图搜索算法(深度优先搜索、广度优先搜索)和最短路径问题(Dijkstra算法、Floyd-Warshall算法)。 接下来,DSDEMO会涵盖各种核心算法: 1. **排序...

    数据结构算法演示

    数据结构与算法是计算机科学的基础,对于理解和设计高效的软件至关重要。本资源“数据结构算法演示”提供了一系列SWF格式的动态演示,旨在帮助学习者直观地理解这些抽象概念。 首先,我们要了解数据结构。数据结构...

    数据结构与算法 -电子教案

    9. **贪心算法**: 在每一步选择局部最优解,期望整体达到最优,如霍夫曼编码、Prim最小生成树算法等。 10. **字符串处理**: KMP算法、Boyer-Moore算法等用于模式匹配,Rabin-Karp算法用于字符串搜索,这些在文本...

    算法与数据结构-C语言版

    《算法与数据结构-C语言版》是针对计算机科学领域中至关重要的两个概念——算法和数据结构的深入学习资料。陈守孔版的课程通常以其详尽的解释和实用的示例而闻名,对于初学者和有经验的程序员来说都是宝贵的学习资源...

    数据结构与算法-java

    - **图遍历算法**:深度优先搜索(DFS)和广度优先搜索(BFS)在图结构中的应用。 - **动态规划**:解决最优化问题,如背包问题、最长公共子序列等。 - **贪心算法**:每一步都采取局部最优解,如Prim算法和...

    数据结构算法Flash演示

    4. **贪心算法与动态规划**:贪心算法在每一步都选择当前最优解,但不保证全局最优,如霍夫曼编码。动态规划则通过保存中间状态来避免重复计算,求解最优化问题,如背包问题、最长公共子序列等。这些算法在演示中会...

    数据结构算法演示程序

    通过图形化界面,用户可以看到每一步操作如何影响数据结构的形态,这对于理解算法的工作原理非常有帮助。 同时,该程序支持C和Pascal语言,这两种语言在计算机科学教育中占有重要地位。C语言简洁高效,常用于系统级...

    数据结构与算法.rar

    - **图结构**:由节点和边构成,用于表示实体间的关系,如社交网络、道路网络等。 - **堆**:一种特殊的树形数据结构,如最大堆和最小堆,常用于优先队列的实现。 - **栈**:后进先出(LIFO)的数据结构,主要...

    算法与数据结构_张乃孝

    3. **数据结构**:涵盖数组、链表、栈、队列、集合、映射、树(如二叉树、AVL树、红黑树)和图等。这些数据结构提供了不同的数据组织方式,适用于不同的问题场景。 4. **递归与分治策略**:递归是算法设计中的重要...

    数据结构、算法与应用 C++语言描述 原书第2版.pdf

    3. **图结构**:包括有向图和无向图,以及相关的遍历算法如深度优先搜索(DFS)和广度优先搜索(BFS)。 4. **散列结构**:如哈希表,它提供快速的查找、插入和删除操作,通过散列函数将键映射到数组的特定位置。 ...

Global site tag (gtag.js) - Google Analytics