Know-how, előadás, megosztott készletek
Példák split-készletek használatára
1. példa Tekintse meg a nem irányított grafikon csatlakoztatott összetevőinek elszigetelésével kapcsolatos problémát. Emlékezzünk rá, hogy a kapcsolt komponens a gráf csúcsainak egy részhalmazának maximális befogadása oly módon, hogy bármelyik csúcsa egy lánccal kapcsolódik. Feltételezzük, hogy a gráf csúcsai számmal vannak számozva, és mindegyik él egy pár () csúcspontja. Azt is feltételezzük, hogy az élek halmaza nem üres.
Algoritmus a nem irányított grafikon csatlakoztatott összetevőinek elválasztására
Nyilvánvaló, hogy a gyűjtemény felépített alcsoportjai a szükséges összekapcsolási komponenseket képviselik. Az alapműveletek nevének használata a különálló készletek gyűjtésénél. a fent bemutatott algoritmus a következő formában írható:
2. példa. Figyelembe kell venni egy irányítatlan összefüggő grafikon nélküli hurkot, amelynek éleihez pozitív valós számokat rendelnek súlyokká. Szükség van egy átlós fa létrehozására. amely a gráf összes csúcsát lefedi, és amelynek minimális összsúlya a belépő éleknek. Tehát, hagyd, hogy az adott grafikonnak számsorai legyenek a számok, és egy sor szélekkel. A készlet minden szegélye pár végén és egy szám - súlya. A probléma megoldásához különböző algoritmusokat javasoltak. Figyelembe vesszük az algoritmust. aki Kruskalot tervezte.
Megjegyezzük, hogy a működés során az algoritmus lesz beállítva a borda alkotó részgráf kiindulási körmentes gráf, amely a fa, amely számos fák. A ciklusok hiányát az ismertetett algoritmus 6. pontjának "If" ellenőrzése garantálja. Valójában, ha két részrészlet egy fába merül össze a 3. lépésben talált peremmel.
Ha az eredeti grafikon csatlakoztatva van, amint azt a probléma megállapításánál megemlítjük, akkor az ilyen algoritmus segítségével létrehozott készlet nyilvánvalóan egy fát jelent. amely az eredeti grafikon összes csúcsait tartalmazza. Az a bizonyíték, hogy a belépő bordák összsúlya minimális, a "Grafikonok" részben találhatók.
Az algoritmus természetesen az elválasztott készletek szerkezetét használja. Figyeljünk a legkisebb súlyra vonatkozó szegmensek szerinti keresési műveletekre. Ennek a műveletnek a hatékonysága nagymértékben függ attól, hogy az adatszerkezetet a készlet tárolja-e. A művelet hatékony végrehajtásának technikáit a "Priority queues" szakaszban tárgyaljuk.
Különálló halmazok ábrázolása tömbökkel
Legyen olyan elemek halmaza, amelyből külön elkülönített részegységek gyűjteményét készítik. Az egyik legegyszerűbb módja annak, hogy a gyűjteményt képviseljük, hogy egy tömböt képviseljünk. Ezzel a módszerrel minden elem a megfelelő (ek) a tömb sejt tegye neve (kanonikus elem) a részhalmazát, amely az illető tartozik. Ha az elem nem tartozik a gyűjtemény egyik részhalmazába, akkor a -th cellában írja be a 0-ot.
Végrehajtási műveletek tömb használatával
Jelölje meg a tömb hosszúságát, amely által képviseljük a gyűjteményt. Egy üres gyűjteményt nullával töltött tömb képvisel.
A CREATE () műveletet úgy hajtja végre, hogy az elemet a cellába írja a számmal. A művelet ideje.
Az UNIFY () műveletet az alábbiak szerint végezzük. A tömb elemeit átnézik, és a cellákban, ahol a név íródott, új nevet ad. Ennek következtében az újonnan létrehozott részhalmaz neve lesz, és nem lesz semmilyen részhalmaz neve. Nyilvánvaló, hogy ez a művelet ideje.
A (z) FIND () művelet az elem tartalmaként adja meg a számot a tömbben. A művelet ideje.
Ilyen megvalósítása különálló készletek. Nyilvánvaló, hogy az önkényes műveletek végrehajtásának ideje, amelyek között szerepel az UNIFY műveletek értéke.