Zpřesnění oddílu

V návrhu algoritmu je upřesnění oddílu  metodou reprezentující oddíl množiny jako datovou strukturu , která umožňuje její množiny rozdělit na více menších množin. V tomto smyslu je upřesnění dělení duální vůči systému disjunktních množin , který také podporuje dělení do disjunktních množin, ale ve kterém operace kombinují dvojice množin. V některých aplikacích pro upřesnění oddílu, jako je lexikografické prohledávání do šířky , struktura dat také zachovává pořadí sad v oddílu.

Zpřesnění oddílů je klíčovou součástí několika účinných algoritmů pro grafy a konečných automatů , včetně minimalizace DFA , Coffman-Grahamova algoritmu pro paralelní plánování a lexikografického prohledávání do šířky . [1] [2] [3]

Struktura dat

Algoritmus zpřesnění rozdělení podporuje rodinu disjunktních množin Si . Na začátku algoritmu tato rodina obsahuje jedinou množinu všech prvků v datové struktuře. V každém kroku algoritmus získá množinu X a každá množina S i v rodině obsahující prvky X je rozdělena do dvou množin: průnik S iX a rozdíl S i \ X

Tento algoritmus lze efektivně implementovat pomocí datových struktur reprezentujících následující informace: [4] [5]

K provedení operace upřesnění algoritmus iteruje prvky dané množiny X . Pro každý takový prvek x najde množinu S i , která obsahuje x a zkontroluje , zda byl proveden průsečík S iX . Pokud ne, vytvoří druhou množinu a přidá S i do seznamu L množin oddělených operací. Poté, bez ohledu na to, zda byla vytvořena nová množina, algoritmus odstraní x z S i a přidá je k S iX prohodí s posledním prvkem S i a poté sníží koncový index S i a počáteční index nové množiny. . Nakonec, poté, co byly všechny prvky X tímto způsobem zpracovány, algoritmus prochází L , přičemž rozděluje každou aktuální množinu Si na dvě, přičemž obě tyto množiny považuje za vytvořené v důsledku operace zpřesnění.

Časový odhad pro provedení jedné operace upřesnění tímto způsobem je O (| X |) , bez ohledu na počet prvků v rodině množin a také bez ohledu na celkový počet sad v datové struktuře. Proto je doba provádění upřesňovací sekvence úměrná celkové velikosti sad daných algoritmu v každé fázi upřesňování.

Aplikace

Jedna z prvních aplikací zpřesňování oddílů byla nalezena v Hopcroftově algoritmu pro minimalizaci DFA [6] . V tomto problému je jako vstup zadán deterministický konečný automat a ten musí najít ekvivalentní automat s co nejmenším počtem stavů. Hopcroftův algoritmus podporuje rozdělení stavů vstupního automatu do podmnožin s tou vlastností, že libovolné dva stavy v různých podmnožinách musí být mapovány na různé stavy výstupního automatu. Zpočátku existují dvě podmnožiny, z nichž jedna obsahuje všechny přijímací stavy automatu a druhá obsahuje zbytek. V každém kroku je vybrána jedna podmnožina Si a jeden ze vstupních symbolů x automatu a stavové podmnožiny jsou upřesněny na stavy, pro které přechod označený x povede k S i , a stavy, pro které x povede k jinému. místo. Když je zvolená množina Si rozdělena upřesněním, je třeba znovu uvažovat pouze jednu ze dvou výsledných množin (menší ze dvou); každý stav se tedy účastní množin X během upřesňovacích kroků O ( s log n ) a celkový odhad času algoritmu je O ( ns log n ) , kde n  je počet počátečních stavů a ​​s  je velikost abecedy. [6]

Zpřesnění oddílů bylo aplikováno Sethi [7] v efektivní implementaci Coffman-Grahamova algoritmu pro paralelní plánování. Sethi ukázal, že může být použit ke konstrukci lexikograficky uspořádaného topologického druhu daného orientovaného acyklického grafu v lineárním čase; toto lexikografické topologické uspořádání je jedním z klíčových kroků v Coffman-Grahamově algoritmu. V této aplikaci jsou prvky disjunktních množin vrcholy vstupního grafu a množiny X použité k upřesnění rozdělení jsou sousední množiny vrcholů. Protože celkový počet sousedů všech vrcholů je jednoduše počet hran v grafu, algoritmus potřebuje čas, který je lineární v počtu hran.

Zpřesnění oddílu je také klíčovým krokem v lexikografickém prohledávání šířky, algoritmu prohledávání grafů s aplikacemi pro rozpoznávání akordických grafů a některých dalších důležitých tříd grafů. V těchto případech jsou prvky disjunktních množin vrcholy a množina X je množina bodů sousedství , takže algoritmus trvá lineárně. [8] [9]

Viz také

Poznámky

  1. Paige, Robert & Tarjan, Robert E. (1987), Three partition Improvement algorithms , SIAM Journal on Computing vol. 16(6): 973–989 , DOI 10.1137/0216062  .
  2. Habib, Michel & Paul, Christophe (1999), Techniky zpřesňování oddílů: zajímavá sada nástrojů pro algoritmy , International Journal of Foundations of Computer Science vol. 10 (2): 147–170 , DOI 10.1142/S0129054199000125  .
  3. Habib, Michel & Paul, Christophe (1998), STACS 98: 15. výroční symposium o teoretických aspektech počítačové vědy Paříž, Francie, 25.–27. února 1998, Proceedings , sv. 1373, str. 25–38 , DOI 10.1007/BFb0028546  .
  4. Valmari, Antti & Lehtinen, Petri (2008), Efektivní minimalizace DFA s částečnými přechodovými funkcemi , v Albers, Susanne & Weil, Pascal, 25. mezinárodní symposium o teoretických aspektech informatiky (STACS 2008) , sv. 1, Leibniz International Proceedings in Informatics (LIPIcs), Dagstuhl, Německo: Schloss Dagstuhl: Leibniz-Zentrum fuer Informatik, str. 645–656, ISBN 978-3-939897-06-4 , doi : 10.4230/LIPIcs.STACS.2008.1328 , < http://drops.dagstuhl.de/opus/volltexte/2008/1328 > Archivováno 18. července 2008 Wayback Machine 
  5. Knuutila, Timo (2001), Re-describe an algorithm by Hopcroft , Theoretical Computer Science vol. 250: 333–363 , DOI 10.1016/S0304-3975(99)00150-4 
  6. ↑ 1 2 Hopcroft, John (1971), An n log n algoritmus pro minimalizaci stavů v konečném automatu, Teorie strojů a výpočtů (Proc. Internat. Sympos., Technion, Haifa, 1971) , New York: Academic Press, s. .. 189–196  .
  7. Ravi Sethi. Plánování grafů na dvou procesorech  //  SIAM Journal on Computing. — 1976-03. — Sv. 5 , iss. 1 . — S. 73–82 . - ISSN 1095-7111 0097-5397, 1095-7111 . - doi : 10.1137/0205005 . Archivováno z originálu 4. listopadu 2021.
  8. Rose, DJ; Tarjan, RE & Lueker, GS (1976), Algorithmické aspekty eliminace vrcholů na grafech , SIAM Journal on Computing , svazek 5 (2): 266–283 , DOI 10.1137/0205021  .
  9. Corneil, Derek G. (2004), Graph-Theoretic Methods in Computer Science: 30th International Workshop, WG 2004, Bad Honnef, Germany, June 21-23, 2004, Revised Papers , sv. 3353, str. 1–19 , DOI 10.1007/978-3-540-30559-0_1  .

Literatura