网络最小生成树更新策略_程远

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

收稿日期: 2011-11-29 作者简介: 程远( 1986-) ,男,安徽绩溪人,铜陵学院网络中心助理工程师,中国科学技术大学计算机科学与技术学院硕士研 究生,研究方向: 算法。
126
计算机与现代化
2012 年第 6 期
节点和边频繁变动的网络,重新计算累积的时间耗费 依然十分惊人。因此,如果能够仅仅针对改变的边和 节点来计算局部的最小生成树,就可以节约大量的时 间。本文针对这种情况,对传统的最小生成树算法做 了改进,使其可以仅仅针对有过改动的节点和边作出 修改,避 免 了 更 新 时 需 要 重 新 计 算 而 造 成 的 时 间 耗费。
Prim 算法做了改进,使其不必重新计算也能在连通图发生改变时更新最小生成树。
关键词: Kruskal 算法; Prim 算法; 最小生成树; 连通网络
中图Hale Waihona Puke Baidu类号: TP301. 6
文献标识码: A
doi: 10. 3969 / j. issn. 1006-2475. 2012. 06. 034
An Update Strategy for Minimum Spanning Tree of Net
2. 2 针对节点的更新策略
节点的更新同样可以视为节点所包含边的权值 由无穷大变为一个特定的值( 节点的增加,形成了经 过新增节点的通路,连通了原来并无通路或者通路耗 费较大的旧节点) 或者由特定的值变为无穷大( 节点 的删减,导致经过该节点的通路被删除) 。因此节点 的更新也可以看成是同时有多个边变化的情形,所以 节点的更新和边的更新差别不是很大,可以转换成边 权值的变化。参考边的更新策略,当节点增加时,需 要将与新增节点相连的边按照顺序插入最小生成树 的有序集合,每插入一条边都要检查是否构成回路, 一旦构成回路的话,删去构成回路的最大边。
0引言
最小生成树算法原本是用于求解带权无向连通 图中最小生成树的算法[1]。因为其具有较高的现实 意义,因此一直是研究的热门。许多文献针对最小生 成树算法在现实中的应用做了大量的研究。例如文 献[2]中 提 出 将 最 小 生 成 树 算 法 用 于 解 决 天 然 气 输 配管网规模的大型化管网系统的优化,从而进一步提 高了运行 的 经 济 效 益 和 利 用 率。 文 献[3]将 最 小 生 成树算法应用于探测路面裂缝的检测。除了各种工 程规划方面的应用外,在网络领域,例如无线传感器 网络等亦有广泛的应用[4]。在图形领域,文献[5]提 出了基于 最 小 生 成 树 的 图 型 匹 配 算 法。 文 献[6]利 用分布算法将求解最小生成树的算法减少到了 O( D ( G) + n0. 61 ) ,其中 D( G) 为无权图的宽度。文献[7] 则进一步利用 NNT 树( Nearest Neighbor Tree) 将最小
2. 3 基于 Kruskal 策略的动态网络最小生成树更新 算法的性能分析
动态网络最小生成树更新算法是基于 Kruskal 策 略的,时间耗费主要是新边在集合中位置的界定,以 及检查回路。而查找回路和合并操作耗费取决于改 变的边或节点的个数。因此本算法的时间复杂度主 要取决于对有序集合的查找,从而确定新边在集合中 的位置的时间耗费。不过当权值变小时只需要查找 最小生成树集合,其搜索耗费要小很多。只有当权值 变大时才需要查找边的有序集合,在这样的情况下, 选择合适的搜索算法即可有效地减少时间复杂度。 例如采 用 折 半 查 找 的 话,搜 索 耗 费 为 O ( log2 n + 1) [11]。如果使用 Fibonacci 数的有序表查找的话,在 平均查找性能上要优于折半查找。考虑到实际应用, 动态网络的数据库往往存储在外存储器上,因此 Fibonacci 的效率会更高[12]。因此实际耗费 远 小 于 重 新进行一次最小生成树操作的情形。
生成树算法的时间复杂度降低到 O( D + L* logn) 。 然而在现实生活中经常会出现网络频繁变动的情况。 在类似于文 献[8]中 将 最 小 生 成 树 应 用 到 无 线 移 动 网络中的情况下,网络的频繁变动就成了一个不可忽 视的问题。边和节点的频繁变动导致需要重新生成 最小生成树。但并不是所有的变动都会影响到整个 最小生成树,有的变动甚至对原最小生成树没有造成 任何影响。然而现有的最小生成树算法往往只能一 次性生成网络的最小生成树,一旦面临动态网络的情 况,就需要不断地重新生成新的最小生成树,这样造 成了不必要的耗费。而且随着输入的数据越来越多, 现有 的 求 解 最 小 生 成 树 算 法,例 如 Kruskal 算 法 和 Prim 算法则变得越来越臃肿。这类基于贪心策略的 算法总需要遍历并比较全部的节点和边。在现实应 用中往往需要面对大量的边和节点,虽然大量的研究 已经尽力减少了生成最小生成树的时间耗费,但对于
在算法中需要保存 Kruskal 算法所生成的全部边 集合,以及最小生成树集合这两个有序集合。考虑到 不用重新生成最小生成树所节约的时间,这样的空间 代价是可以接受的。
考虑较简单的边权值减小的情况。当 Kruskal 算 法在生成最小生成树时,会将边排序,然后从小到大 依次加入最小生成树集合,因此可利用这个排序集合 来动态更新最小生成树。首先判断权值减少的边的 状态,如果该边原本就在最小生成树上的话,权值的 减小对最小生成树没有实质影响。但是如果该边不 在最小生成树上的话,就要查看边的改变是否影响了 最小生成树。首先新生成的边( u,v) 按照插入排序 的方式插入到最小生成树的有序集合中。因为是插 入和替换掉旧有的两端点间的通路,所以不需要考虑 其他未选入最小生成树的边的情况,只需要检查最小 生成树的有 序 集 合 即 可,减 少 了 查 找 插 入 的 时 间 损 耗。最后按照 Kruskal 算法的方式检测回路,并删去 构成回路的最大边。这样生成的树就是新的最小生 成树。
1 动态网络最小生成树算法的理论基础
最小生成树算法本质上就是建立一个边的集合, 这个集合最初是最小生成树的一个子集,然后在图中 寻找满 足 集 合 的 安 全 边 ( 安 全 边 是 指 不 构 成 回 路 边) ,且这个安全边的权值又是最小,即将这个边加 入集合。如此反复,不断扩充这个子集直至遍历全部 的边。这 样 返 回 的 边 的 集 合 必 定 是 一 棵 最 小 生 成 树[1,9]。因此最 小 生 成 树 算 法 往 往 是 基 于 贪 心 算 法 策略,倾 向 于 选 择 符 合 条 件 的 最 小 边。像 经 典 的 Kruskal 算法和 Prim 算法均是利用贪心算法策略来 求解最小生成树。Kruskal 算法是每次选择一条不构 成回路的最小边加入边集合直到所有的边都被遍历 完毕。而 Prim 算法则是以节点为基础,从任意根节 点开始,每次选择一条权值尽可能小的安全边加入集 合中,直至该图全部的节点均被遍历到。本文的动态 更新算法,则是分别基于 Kruskal 算法和 Prim 算法两 种不同的策略。需要注意的是,虽然不同的最小生成 树算法生成的最小生成树可能不一样,但是最小生成 树本质上是不构成回路同时权值又尽可能小的边的 集合,因此只要满足这一条件即为最小生成树。所以 本文的更新算法,不论是基于 Kruskal 算法还是 Prim 算法策略均与之前生成最小生成树所使用的算法无 关,只需要根据实际情况来选择不同的算法策略。设 图 G( V,E) 为一个无向带权连通图,以文献[1]中的 图 G 为例来说明算法的过程,如图 1 所示。
图 1 无向图
2 基于 Kruskal 算法策略的动态网络 最小生成树更新算法
Kruskal 算法策略本质上是排序操作,将所有的
边排序后依次选取最小边并检查是否构成回路,一旦 不构成回路即加入最小生成树中。Kruskal 算法生成 的树 可 能 不 唯 一[10],因 此,不 同 于 最 短 路 径,一 旦 网 络发生改变的时候,受影响的仅仅只是与发生变动的 边或节点相关联的边或节点,因此只需要考虑新加入 的边或节点在图中的位置,以及它们对周边节点的影 响即可。所以根据 Kruskal 算法策略,只需根据边的 排序集合,将改变后的边和节点插入到相应的位置, 并经过回路检测即可。
当节 点 减 少 时,则 需 要 考 察 边 的 有 序 集 合 V ( G) 。与边的更新策略不同的是,与被删除节点所连 接的边 V[i]的权值的变化只有增到无穷大一种情 况。因此,只需直接将 V[i]从边的有序集合中删除, 然后再从 V[i]的原始权值 w[i]的位置向后寻找,找 到不属于最小生成树集合且插入最小生成树集合不 构成回路的边。如此生成的树即为新的最小生成树。
2. 1 针对边的更新策略
如果将无向带权连通图视为一个含有无穷大权 值边的完全连通图的话,那么边的增删以及替换操作 实际上可以看成是边的权值的变化。当旧边的权值 减小时,权值的减小可能会带来新的通路,从而改变 最小生成树。而当边的权值增加时,增加的权值可能 会阻塞旧有通路,影响到最小生成树的生成。边的增 删则是边权值变化的极端体现。当增加一条新边时, 即是新增边的两端点之间原有的权值为无穷大的边 的权值减少到了一个限定的值,所以可以直接视为旧 边的权值变小。当删除边的时候,可以视为旧边的权 值增加至无穷大,这时候就需要寻找新的通路。
Abstract: Solving the problem of minimum spanning tree has been widely used to solve searching issues in reality. However,the node of a connected graph net is often changed,and,once it’s changed,the traditional algorithm has to recalculate the minimum spanning tree. But,even the graph node changes,not all of minimum spanning tree will be changed,which results in unnecessary waste. This article is aimed at improving Kruskal algorithm and Prim algorithm,which can update the minimum spanning tree when the graph changes without recalculating. Key words: Kruskal algorithm; Prim algorithm; minimum spanning tree; connected graph net
2012 年第 6 期 文章编号: 1006-2475( 2012) 06-0125-06
计算机与现代化 JISUANJI YU XIANDAIHUA
总第 202 期
网络最小生成树更新策略
程 远1,2
( 1. 中国科学技术大学计算机科学与技术学院,安徽 合肥 230027; 2. 铜陵学院网络中心,安徽 铜陵 244000)
边权值增加的情况要复杂一些,权值的增加往往 导致原有的边的通路不再有效,因此必须重新探索新 通路,这样就需要检索边的有序集合。首先标记权值 增加的边( u,v) 原始权值 w,然后将边( u,v) 按照新
2012 年第 6 期
程远: 网络最小生成树更新策略
127
的权值重新插入到边的有序集合 V( G) 的合适位置, 并从 w 的位置开始在 V( G) 中向后搜索。因为 w 的 改变不影响权值比它小的边的排序,所以只需考虑权 值比 w 大的边中是否有合适的通路。因为是有序集 合,所以最先找到的不在最小生成树集合中,且插入 到最小生成树中并不构成回路的边就是新生成最小 生成树的边。
摘要: 求解最小生成树问题被广泛应用于求解现实中的搜索相关问题。然而现实瞬息万变,一个连通网络的节点常常发
生变动。而一旦发生改变,传统算法必须要再次计算最小生成树。但是虽然节点发生了变动,最小生成树未必全部发生
改变,这就造成了不必要的浪费。鉴于此提出一种基于 Kruskal 算法和 Prim 算法的最小树更新策略,对 Kruskal 算法和
CHENG Yuan1,2
( 1. School of Computer Science and Technology,University of Science and Technology of China,Hefei 230027,China; 2. Network Center,Tongling University,Tongling 244000,China)
相关文档
最新文档