关于最小生成树的实例详解
最小生成树-Prim算法和Kruskal算法
图的生成树是它的一棵含有所有顶点的无环连通子图,一棵加权图的最小生成树是它的一棵权值最小的生成树。
Prim算法
算法简单描述
1).输入:一个加权连通图,其中顶点集合为V,边集合为E;
2).初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew = {},为空;
3).重复下列操作,直到Vnew = V:
a.在集合E中选取权值最小的边,其中u为集合Vnew中的元素,而v不在Vnew集合当中,并且v∈V(如果存在有多条满足前述条件即具有相同权值的边,则可任意选取其中之一);
b.将v加入集合Vnew中,将边加入集合Enew中;
4).输出:使用集合Vnew和Enew来描述所得到的最小生成树。
下面对算法的图例描述
图例 | 说明 | 不可选 | 可选 | 已选(Vnew) |
---|---|---|---|---|
|
此为原始的加权连通图。每条边一侧的数字代表其权值。 | - | - | - |
顶点D被任意选为起始点。顶点A、B、E和F通过单条边与D相连。A是距离D最近的顶点,因此将A及对应边AD以高亮表示。 | C, G | A, B, E, F | D | |
|
下一个顶点为距离D或A最近的顶点。B距D为9,距A为7,E为15,F为6。因此,F距D或A最近,因此将顶点F与相应边DF以高亮表示。 | C, G | B, E, F | A, D |
![]() |
算法继续重复上面的步骤。距离A为7的顶点B被高亮表示。 | C | B, E, G | A, D, F |
|
在当前情况下,可以在C、E与G间进行选择。C距B为8,E距B为7,G距F为11。E最近,因此将顶点E与相应边BE高亮表示。 | 无 | C, E, G | A, D, F, B |
|
这里,可供选择的顶点只有C和G。C距E为5,G距E为9,故选取C,并与边EC一同高亮表示。 | 无 | C, G | A, D, F, B, E |
顶点G是唯一剩下的顶点,它距F为11,距E为9,E最近,故高亮表示G及相应边EG。 | 无 | G | A, D, F, B, E, C | |
现在,所有顶点均已被选取,图中绿色部分即为连通图的最小生成树。在此例中,最小生成树的权值之和为39。 | 无 | 无 | A, D, F, B, E, C, G |
算法实现可参考《算法》第四版,或者清华出版社《数据结构—java语言实现》(实现方法更加清晰简单)
Kruskal算法
1.概览
Kruskal算法是一种用来寻找最小生成树的算法,由Joseph Kruskal在1956年发表。用来解决同样问题的还有Prim算法和Boruvka算法等。三种算法都是贪婪算法的应用。和Boruvka算法不同的地方是,Kruskal算法在图中存在相同权值的边时也有效。
2.算法简单描述
1).记Graph中有v个顶点,e个边
2).新建图Graphnew,Graphnew中拥有原图中相同的e个顶点,但没有边
3).将原图Graph中所有e个边按权值从小到大排序
4).循环:从权值最小的边开始遍历每条边 直至图Graph中所有的节点都在同一个连通分量中
if 这条边连接的两个节点于图Graphnew中不在同一个连通分量中
添加这条边到图Graphnew中
图例描述:
首先第一步,我们有一张图Graph,有若干点和边
将所有的边的长度排序,用排序的结果作为我们选择边的依据。这里再次体现了贪心算法的思想。
资源排序,对局部最优的资源进行选择,排序完成后,我们率先选择了边AD。这样我们的图就变成了右图
在剩下的变中寻找。我们找到了CE。这里边的权重也是5
依次类推我们找到了6,7,7,即DF,AB,BE。
下面继续选择, BC或者EF尽管现在长度为8的边是最小的未选择的边。但是现在他们已经连通了(对于BC可以通过CE,EB来连接,
类似的EF可以通过EB,BA,AD,DF来接连)。所以不需要选择他们。类似的BD也已经连通了(这里上图的连通线用红色表示了)。
算法实现可参考《算法》第四版中代码。
Atas ialah kandungan terperinci 关于最小生成树的实例详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara menggunakan PHP untuk menjana kod pengesahan imej yang boleh dimuat semula Dengan pembangunan Internet, untuk mengelakkan serangan berniat jahat dan operasi mesin automatik, banyak tapak web menggunakan kod pengesahan untuk pengesahan pengguna. Satu jenis kod pengesahan yang biasa ialah kod pengesahan imej, yang menghasilkan gambar yang mengandungi aksara rawak dan memerlukan pengguna memasukkan aksara yang betul sebelum meneruskan. Artikel ini akan memperkenalkan cara menggunakan PHP untuk menjana kod pengesahan imej yang boleh dimuat semula dan memberikan contoh kod khusus. Langkah 1: Buat imej kod pengesahan Mula-mula, kita perlu mencipta imej kod pengesahan

Menjana data rawak adalah sangat penting dalam bidang sains data. Daripada membina ramalan rangkaian saraf, data pasaran saham, dsb., tarikh biasanya digunakan sebagai salah satu parameter. Kita mungkin perlu menjana nombor rawak antara dua tarikh untuk analisis statistik. Artikel ini akan menunjukkan cara menjana k tarikh rawak antara dua tarikh tertentu menggunakan modul rawak dan datetime ialah perpustakaan terbina dalam Python untuk mengendalikan masa. Sebaliknya, modul rawak membantu dalam menjana nombor rawak. Jadi kita boleh menggabungkan modul rawak dan masa tarikh untuk menjana tarikh rawak antara dua tarikh. Syntax random.randint (mula, tamat, k) rawak di sini merujuk kepada pustaka rawak Python. Kaedah randint menggunakan tiga perkara penting

iFlytek telah menaik taraf fungsi minit mesyuarat, yang boleh menukar secara langsung ungkapan pertuturan kepada draf bertulis, dan AI boleh meringkaskan minit mesyuarat berdasarkan rakaman. AI boleh membantu anda melengkapkan penulisan minit mesyuarat Pada 31 Ogos, versi web iFlytek telah dinaik taraf, menambah fungsi rakaman masa nyata pada bahagian PC, yang boleh menggunakan kecerdasan buatan untuk menjana minit mesyuarat secara bijak. Pelancaran fungsi ini akan meningkatkan kecekapan pengguna dalam menyusun kandungan dan membuat susulan ke atas item kerja utama selepas mesyuarat. Bagi orang yang sering menghadiri mesyuarat, fungsi ini sudah pasti alat yang sangat praktikal yang boleh menjimatkan banyak masa dan tenaga Senario aplikasi fungsi ini adalah terutamanya untuk menukar rakaman pada PC kepada teks dan menjana minit mesyuarat secara automatik, bertujuan untuk menyediakan. pengguna dengan kualiti terbaik Produk dengan perkhidmatan terbaik dan teknologi paling canggih untuk meningkatkan kecekapan pejabat dengan cepat

Penjanaan bahasa semula jadi ialah teknologi kecerdasan buatan yang menukar data kepada teks bahasa semula jadi. Dalam era data besar hari ini, semakin banyak perniagaan perlu menggambarkan atau mempersembahkan data kepada pengguna, dan penjanaan bahasa semula jadi ialah kaedah yang sangat berkesan. PHP ialah bahasa skrip sebelah pelayan yang sangat popular yang boleh digunakan untuk membangunkan aplikasi web. Artikel ini akan memperkenalkan secara ringkas cara menggunakan PHP untuk penjanaan bahasa semula jadi asas. Memperkenalkan perpustakaan penjanaan bahasa semula jadi Pustaka fungsi yang disertakan dengan PHP tidak termasuk fungsi yang diperlukan untuk penjanaan bahasa semula jadi, jadi

Visualisasi data adalah penting untuk pemahaman dan pembentangan maklumat yang cekap. Di antara banyak jenis carta yang tersedia, carta wafel ialah cara baharu untuk memaparkan data dalam struktur seperti grid dengan jubin segi empat sama. Modul Python yang berkuasa PyWaffle memudahkan pembangunan carta wafel, serupa dengan banyak kaedah pengiraan dan analisis data. Dalam artikel ini, kita akan melihat cara membuat carta wafel menggunakan modul Python PyWaffle yang canggih. Mari pasang PyWafle dan lihat cara menggunakannya untuk menggambarkan data kategori. Jalankan arahan berikut dalam cmd anda untuk memasang perpustakaan dan kemudian mengimportnya ke dalam kod anda Terjemahan bahasa Cina bagi pipinstallpywaffleExample1 ialah: Contoh 1 Dalam contoh ini, kami

Bagaimana untuk menjana kod QR dengan had masa menggunakan PHP? Dengan populariti pembayaran mudah alih dan tiket elektronik, kod QR telah menjadi teknologi biasa. Dalam banyak senario, kami mungkin perlu menjana kod QR dengan had masa, yang akan menjadi tidak sah walaupun selepas tempoh masa tertentu. Artikel ini akan memperkenalkan cara menggunakan PHP untuk menjana kod QR terhad masa dan menyediakan contoh kod untuk rujukan. Memasang perpustakaan PHPQRCode Untuk menggunakan PHP untuk menjana kod QR, kita perlu memasang perpustakaan PHPQRCode terlebih dahulu. perpustakaan ini

Apa yang perlu dilakukan jika jadual kandungan perkataan dijana dengan tidak betul Dengan perkembangan teknologi, dokumen elektronik telah menjadi bahagian yang sangat diperlukan dalam kerja dan kajian harian kita. Apabila menyunting dokumen elektronik, terutamanya artikel atau kertas panjang, penjanaan jadual kandungan adalah langkah yang sangat penting. Jadual kandungan boleh memudahkan pembaca mencari kandungan dan struktur artikel dan meningkatkan kecekapan membaca. Walau bagaimanapun, kadangkala kami menghadapi beberapa masalah dalam proses penjanaan katalog, seperti ralat penjanaan katalog, susunan tidak teratur, dsb. Jadi, jika direktori perkataan dijana secara tidak betul, bagaimanakah kita harus menyelesaikannya? kepala

Bagaimana untuk menghasilkan buku ralat untuk menjawab soalan dalam talian Dalam era maklumat hari ini, menjawab soalan dalam talian telah menjadi tugas biasa bagi kebanyakan pelajar dan pendidik. Soalan yang salah selalu menjadi salah satu masalah dalam proses pembelajaran Ramai orang berharap dengan mudah menjana buku jawapan yang salah untuk jawapan dalam talian supaya mereka boleh menyemak dan menguasai ilmu dengan lebih baik. Artikel ini akan memperkenalkan cara merealisasikan fungsi penjanaan buku ralat jawapan dalam talian melalui pengaturcaraan, dan memberikan contoh kod khusus. Langkah 1: Bina antara muka web untuk menjana jawapan dalam talian dan buku kecil ralat Anda memerlukan antara muka web untuk memaparkan soalan dan jawapan. Boleh guna HTML
