Förfining av partition

I algoritmdesign är partitionsförfining  en metod för att representera en partition av en uppsättning som en datastruktur som gör att dess uppsättningar kan delas upp i fler mindre uppsättningar. I denna mening är förfining av partitionering dubbelt med disjoint set-systemet , som också stöder partitionering i disjoint set, men där operationer kombinerar par av set. I vissa tillämpningar för förfining av partitioner, som lexikografisk bredd-först-sökning , bibehåller datastrukturen också ordningen för uppsättningarna inom partitionen.

Partitionsförfining är en nyckelkomponent i flera effektiva algoritmer för grafer och finita automater , inklusive DFA-minimering , Coffman–Graham-algoritmen för parallell schemaläggning och lexikografisk bredd-först-sökning . [1] [2] [3]

Datastruktur

Algoritmen för partitionsförfining stöder familjen av disjunkta uppsättningar Si . I början av algoritmen innehåller denna familj den enda uppsättningen av alla element i datastrukturen. Vid varje steg erhåller algoritmen en mängd X , och varje mängd Si i familjen som innehåller element av X delas upp i två uppsättningar : skärningspunkten SiX och skillnaden S i \ X

Denna algoritm kan implementeras effektivt med hjälp av datastrukturer som representerar följande information: [4] [5]

För att utföra förfiningsoperationen itererar algoritmen över elementen i den givna uppsättningen X. För varje sådant element x hittar den en mängd Si som innehåller x och kontrollerar om skärningen Si X har gjorts . Om inte, skapar den en andra uppsättning och lägger till Si till listan med L uppsättningar separerade av operationen. Sedan, oavsett om en ny mängd har bildats, tar algoritmen bort x från Si och adderar den till SiX byter med det sista elementet Si och minskar sedan slutindexet Si och startindexet för den nya mängden . Slutligen, efter att alla element i X har bearbetats på detta sätt, går algoritmen genom L , och delar varje strömmängd Si i två, och betraktar båda dessa uppsättningar som bildade som ett resultat av förfiningsoperationen.

Tidsuppskattningen för att utföra en enda förfiningsoperation på detta sätt är O (| X |) , oavsett antalet element i uppsättningsfamiljen, och även oberoende av det totala antalet uppsättningar i datastrukturen. Därför är exekveringstiden för förfiningssekvensen proportionell mot den totala storleken på uppsättningarna som ges till algoritmen vid varje förfiningssteg.

Applikation

En av de första tillämpningarna av partitionsförfining hittades i Hopcrofts algoritm för att minimera DFA [6] . I det här problemet ges en deterministisk finit automat som indata , och den måste hitta en ekvivalent automat med så få tillstånd som möjligt. Hopcrofts algoritm stöder uppdelningen av inmatningsautomattillstånd i delmängder med egenskapen att två valfria tillstånd i olika delmängder måste mappas till olika utgångsautomattillstånd. Inledningsvis finns det två delmängder, varav den ena innehåller alla accepterande tillstånd för automaten och den andra innehåller resten. Vid varje steg väljs en delmängd Si och en av automatens ingångssymboler x , och tillståndsundermängderna förfinas till tillstånd för vilka övergången märkt x kommer att leda till Si , och tillstånd för vilka x kommer att leda till en annan plats. När den valda uppsättningen Si delas genom förfining, behöver endast en av de två resulterande uppsättningarna (den minsta av de två) beaktas igen; sålunda deltar varje tillstånd i uppsättningar X under O ( slogn ) -förfiningsstegen , och den övergripande algoritmtidsuppskattningen är O ( nslogn ) , där n  är antalet initiala tillstånd och s är alfabetets storlek  . [6]

Partitionsförfining tillämpades av Sethi [7] i en effektiv implementering av Coffman-Graham-algoritmen för parallell schemaläggning. Sethi visade att den kan användas för att konstruera en lexikografiskt ordnad topologisk sort av en given riktad acyklisk graf i linjär tid; denna lexikografiska topologiska ordning är ett av nyckelstegen i Coffman-Graham-algoritmen. I den här applikationen är elementen i de disjunkta uppsättningarna hörn av ingångsgrafen, och uppsättningarna X som används för att förfina uppdelningen är grannmängderna till hörnen. Eftersom det totala antalet grannar till alla hörn helt enkelt är antalet kanter i grafen, tar algoritmen tid som är linjär i antalet kanter.

Förfining av partitioner är också ett nyckelsteg i lexikografisk bredd-först-sökning, en grafsökningsalgoritm med applikationer för att känna igen ackordsgrafer och några andra viktiga klasser av grafer. I dessa fall är elementen i de disjunkta uppsättningarna hörn, och mängden X är grannskapspunkter , så algoritmen tar linjär tid. [8] [9]

Se även

Anteckningar

  1. Paige, Robert & Tarjan, Robert E. (1987), Three partition refinement algorithms , SIAM Journal on Computing vol. 16(6): 973–989 , DOI 10.1137/0216062  .
  2. Habib, Michel & Paul, Christophe (1999), Partition refinement techniques: an interesting algorithmic tool kit , International Journal of Foundations of Computer Science vol 10 (2): 147–170 , DOI 10.1142/S0129054199000125  .
  3. Habib, Michel & Paul, Christophe (1998), STACS 98: 15th Annual Symposium on Theoretical Aspects of Computer Science Paris, Frankrike, 25–27 februari 1998, Proceedings , vol. 1373, sid. 25–38 , DOI 10.1007/BFb0028546  .
  4. Valmari, Antti & Lehtinen, Petri (2008), Effektiv minimering av DFA med partiella övergångsfunktioner , i Albers, Susanne & Weil, Pascal, 25:e internationella symposiumet om teoretiska aspekter av datavetenskap (STACS 2008) , vol. 1, Leibniz International Proceedings in Informatics (LIPIcs), Dagstuhl, Tyskland: Schloss Dagstuhl: Leibniz-Zentrum fuer Informatik, sid. 645–656, ISBN 978-3-939897-06-4 , doi : 10.4230/LIPIcs.STACS.2008.1328 , < http://drops.dagstuhl.de/opus/volltexte/2008/1328 > Arkiverad 2018 juli Wayback-maskin 
  5. Knuutila, Timo (2001), Re-describing an algorithm av 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 algorithm for minimizing states in a finite automaton, Theory of machines and computations (Proc. Internat. Sympos., Technion, Haifa, 1971) , New York: Academic Press, s . ... 189–196  .
  7. Ravi Sethi. Schemaläggning av grafer på två processorer  //  SIAM Journal on Computing. — 1976-03. — Vol. 5 , iss. 1 . — S. 73–82 . - ISSN 1095-7111 0097-5397, 1095-7111 . - doi : 10.1137/0205005 . Arkiverad från originalet den 4 november 2021.
  8. Rose, DJ; Tarjan, RE & Lueker, GS (1976), Algorithmic aspects of vertex elimination on graphs , SIAM Journal on Computing vol. 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, Tyskland, 21-23 juni 2004, Revised Papers , vol. 3353, sid. 1–19 , DOI 10.1007/978-3-540-30559-0_1  .

Litteratur