导航:首页 > 源码编译 > 数据结构普里姆算法

数据结构普里姆算法

发布时间:2023-09-22 17:34:21

① 无论用普里姆算法或者是克鲁斯卡尔算法求最小生成树,得出的结果应该一样么

不总是一样的,克鲁斯卡尔算法是精确算法,即每次都能求得最优解,但对于规模较大的最小生成树问题,求解速度较慢。而普里姆算法是近似求解算法,虽然对于大多数最小生成树问题都能求得最优解,但相当一部分求得的是近似最优解。这是我个人见解。

② 数据结构里提到的普里母和克鲁斯卡尔分别是哪个国家的

普里母算法和克鲁斯卡尔方法求最小生成树完整程序

1、普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普里姆(英语:Robert C. Prim)独立发现;1959年,艾兹格·迪科斯彻再次发现了该算法。因此,在某些场合,普里姆算法又被称为DJP算法、亚尔尼克算法或普里姆-亚尔尼克算法

2、Kruskal算法是一种用来寻找最小生成树的算法,由Joseph Kruskal在1956年发表。用来解决同样问题的还有Prim算法和Boruvka算法等。三种算法都是贪婪算法的应用。和Boruvka算法不同的地方是,Kruskal算法在图中存在相同权值的边时也有效。

③ 这是一道数据结构问题,问题如下:对于如下图所示的带权无向图,给出利用普利姆(Prim)算法和克鲁斯卡尔

自己按下面的先后过程画图即是生成过程;说雀雀明(i,j)是一条连接顶点i和j的一条边;
普利姆(Prim)算法:从顶点0开始顷世早构造
(0,1),(0,2),(1,2),(2,5),(5,4)
克鲁斯卡尔算法:
(0,1),(0,2),(返或1,2),(4,5),(2,5)

④ 什么是普利姆算法

Prim算法:是图的最小生成树的一种构造算法。

假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,TV 是 WN 上最小生成树中顶点的集合,TE 是最小生成树中边的集合。显然,在算法执行结束时,TV=V,而 TE 是 E 的一个子集。在算法开始执行时,TE 为空集,TV 中只有一个顶点,因此,按普里姆算法构造最小生成树的过程为:在所有“其一个顶点已经落在生成树上,而另一个顶点尚未落在生成树上”的边中取一条权值为最小的边,逐条加在生成树上,直至生成树中含有 n-1条边为止。

如果看不懂还可以找一本数据结构的书看,这个算法挺简单的。

btw:其实你有空问,应该有空网络啊~网络就有了。懒得写,我还是直接从网络过来的~

⑤ 数据结构中排序和查找各种时间复杂度

数据结构中排序和查找各种时间复杂度
(1)冒泡排序
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
(2)选择排序
选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的。…… 例子说明好多了。序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了, 所以选择排序不稳定的排序算法
(3)插入排序
插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果和插入元素相等,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变。所以插入排序是稳定的。
(4)快速排序
快速排序有两个方向,左边的i下标一直往右走(往后),当a[i] <= a[center_index],其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走(往前),当a[j] > a[center_index]。如果i和j都走不动了,i <= j, 交换a[i]和a[j],重复上面的过程,直到i>j。 交换a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为 5 3 3 4 3 8 9 10 11, 现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱,所以快速排序是一个不稳定的排序算法。(不稳定发生在中枢元素和a[j]交换的时刻)
(5)归并排序
归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的段序列合并成一个有序的长序列。不断合并直到原序列全部排好序。相等时不发生交换。所以,归并排序也是稳定的排序算法。
(6)基数排序
基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序,最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收集,所以其是稳定的排序算法。
(7)希尔排序(shell)
希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比o(n^2)好一些。由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。
(8)堆排序
我们知道堆的结构是节点i的孩子为2*i和2*i+1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点。在一个长为n的序列,堆排序的过程是从第n/2开始和其子节点共3个值选择最大(大顶堆)或者最小(小顶堆),这3个元素之间的选择当然不会破坏稳定性。但当为n/2-1, n/2-2, ...1这些个父节点选择元素时,就会破坏稳定性。有可能第n/2个父节点交换把后面一个元素交换过去了,而第n/2-1个父节点把后面一个相同的元素没有交换,那么这2个相同的元素之间的稳定性就被破坏了。所以,堆排序是不稳定的排序算法
一、排序
排序法 平均时间 最差情形 稳定度 额外空间 备注
冒泡 O(n2) O(n2) 稳定 O(1) n小时较好
交换 O(n2) O(n2) 不稳定 O(1) n小时较好
选择 O(n2) O(n2) 不稳定 O(1) n小时较好
插入 O(n2) O(n2) 稳定 O(1) 大部分已排序时较好
Shell O(nlogn) O(ns) 1<s<2 不稳定???="" o(1)???????="" s是所选分组</s
快速 O(nlogn) O(n2) 不稳定 O(nlogn) n大时较好
归并 O(nlogn) O(nlogn) 稳定 O(1) n大时较好
堆 O(nlogn) O(nlogn) 不稳定 O(1) n大时较好
基数 O(logRB) O(logRB) 稳定 O(n) B是真数(0-9),R是基数(个十百)
二、查找
未写……
三 树图
克鲁斯卡尔算法的时间复杂度为O(eloge)
普里姆算法的时间复杂度为O(n2)
迪杰斯特拉算法的时间复杂度为O(n2)
拓扑排序算法的时间复杂度为O(n+e)
关键路径算法的时间复杂度为O(n+e)

阅读全文

与数据结构普里姆算法相关的资料

热点内容
java的队列类 浏览:357
荣耀手机带方舟编译器 浏览:496
表达式最小值算法 浏览:601
指南针多空资金源码 浏览:894
菜单上有灰色的命令 浏览:120
如何区分原神服务器 浏览:453
php多ip 浏览:583
易语言编译后打开需要dll 浏览:301
eos对称加密技术 浏览:16
程序员老公生活 浏览:814
mq语言编译器打不开 浏览:378
微信图片怎么查看文件夹 浏览:764
魔性解压游戏冒险王者 浏览:546
多级压缩气体功耗 浏览:151
德国大众空调压缩机价格 浏览:647
服务器怎么解决停电问题 浏览:673
安卓抖音如何看好友是否在线 浏览:443
中国银行选择编译环境 浏览:61
3dmax教程pdf 浏览:502
手机写易语言代码不用编译 浏览:736