Schreier-Sims algoritme

Schreier-Sims algoritme

Earl Cayley Group
Opkaldt efter Charles Sims og Otto Schreyer
Forfatter Charles Sims
formål Bestemmelse af rækkefølgen af ​​en permutationsgruppe
Datastruktur Permutationer
værste tid

Schreier-Sims- algoritmen  er en algoritme fra området for beregningsgruppeteori, der tillader, efter en enkelt udførelse i lineær tid, at finde rækkefølgen af ​​en gruppe genereret af permutationer, kontrollere om et element tilhører en sådan gruppe og opregne dets elementer . Algoritmen blev foreslået af Charles Sims i 1970 for at finde primitive permutationsgrupper [1] og er baseret på Schreiers undergruppegenerationslemma [2] . Repræsentationen af ​​permutationsgruppen, som algoritmen finder, er analog med trinformen af ​​matricen for densstrengmellemrum [3] . Metoderne udviklet af Sims danner grundlag for de fleste moderne algoritmer til at arbejde med permutationsgrupper [4] , modifikationer af algoritmen bruges også i moderne computeralgebrasystemer som GAP og Magma [5] . En af de mest oplagte anvendelser af algoritmen er, at den kan bruges til at løse Rubik's Cube [6] .

Historie

Et af hovedproblemerne i teorien om permutationsgrupper er søgningen efter permutationsgrupper af en given grad (det vil sige det mindste antal elementer i et sæt, hvis permutationsgruppe indeholder en given permutationsgruppe). I 1970 var alle permutationsgrupper blevet fundet for potenserne 2 til 11, for potenserne 12 til 15 var alle transitive grupper (det vil sige undergrupper, der virker transitivt på et generatorsæt ) fundet, og for potenserne 16 til 20 kun primitive grupper var blevet fundet permutationer . For at søge efter primitive grupper af højere grad udviklede Charles Sims et program, der finder orden og en vis struktur i en permutationsgruppe givet af dens generatorsæt [1] .

Det originale program nævnt i Sims' papir blev skrevet til IBM 7040 Rutgers University og støttede enhver gruppe, hvis grad var mindre end 50 [7] . Et nøjagtigt estimat af køretiden for en algoritme blev først udført af Furst, Hopcroft og Lax i 1980 [8] . Løbetiden blev forbedret af Jerrum i 1982 [9] og af Donald Knuth i 1981 [10] . I 1980 blev der udviklet en effektiv probabilistisk version af algoritmen [11] . Forskellige variationer af algoritmen, inklusive dem, der bruger Schreier-vektoren i stedet for kredsløbstræet, blev demonteret af Sheresh i 2003 [12] [13] .

I beregningsgruppeteori er algoritmer over permutationsgrupper et af de mest udviklede områder, og selv i dag er de fleste af disse algoritmer baseret på metoderne udviklet af Sims [4] .

Hovedidé

Effektiviteten af ​​beregninger med en permutationsgruppe afhænger i det væsentlige af, hvordan den er specificeret i programmet [2] . En effektiv måde at gøre dette på er at isolere et antal af dens undergrupper og vælge unikke cosets for hver undergruppe i den serie i forhold til dens forgænger. Algoritmen foreslået af Charles Sims finder et antal undergrupper, hvor hver næste gruppe er stabilisatoren af ​​den forrige. Rækkefølgen af ​​punkter, som stabilisatorer er konstrueret til, kaldes basen , og sættet, der indeholder de genererende elementer for hver gruppe i serien , kaldes det stærke generatorsæt [2] .

Algoritmen konstruerer en base og et stærkt generatorsæt for permutationsundergruppen givet af dens generatorsæt , ved at bruge Schreiers lemma til at finde generatorsættene. Størrelsen af ​​de mængder, der opnås ved mellemliggende trin, vokser eksponentielt, derfor er der udviklet variationer af algoritmen, der reducerer antallet af overvejede genererende elementer [2] .

Den ovenfor beskrevne repræsentation opdeler en gruppe i et produkt af delmængder indlejret i den, svarende til hvordan trinrepræsentationen opdeler et vektorrum i en direkte sum af underrum indlejret i det [3] .

Udtalelse af problemet

En symmetrisk gruppe er en gruppe, hvis elementer er permutationer af elementer i et sæt . Normalt tages . som sådan et sæt . I en sådan notation kan elementerne i en gruppe ses som afbildninger , der tager et sæt ind i sig selv, det vil sige dets automorfismer . Gruppeoperationen i sådan notation er sammensætningen af ​​permutationer, for permutationer og defineret som , hvor for . I overensstemmelse hermed vil enhedspermutationen være en permutation sådan, at , og den omvendte permutation kan gives som [14] .

Lade være  sæt af permutationer af længde . En genereret undergruppe af et sæt er den mindste ved inklusion undergruppe , der indeholder som en undergruppe eller tilsvarende en undergruppe af alle elementer , der kan repræsenteres som et endeligt produkt af elementer og deres invers. Rækkefølgen af ​​en permutationsgruppe er antallet af elementer i den , og dens grad er kardinaliteten af ​​det sæt , som den virker på. I en sådan notation bør algoritmen være i stand til at [7] :

Ansøgninger

Algoritmeændringer er implementeret i de to mest populære computeralgebrasystemer, der er specialiseret i beregningsgruppeteori  - GAP og Magma [5] . Værktøjer til at arbejde med permutationsgrupper, herunder coset-optællingsalgoritmer og Schreier-Sims-algoritmen, er også tilgængelige i de mere generelle populære systemer Maple og Mathematica [15] . Oprindeligt blev algoritmen udviklet til at søge efter primitive permutationsgrupper af en given grad [1] , men efterfølgende er omfanget af dens anvendelse vokset mange gange - for eksempel ved hjælp af denne algoritme kan du finde løsninger på en given Rubiks terningkonfiguration , da dens rotationer danner en gruppe [6] . Algoritmen viste sig også godt, når man arbejdede med matrixgrupper [16] .

Algoritme

Gruppefaktorisering

Lade være  en undergruppe af nogle endelige gruppe , betegnes ved tværgående af familien af ​​venstre cosets . Ethvert element kan være unikt repræsenteret som , hvor og . Ved successivt at anvende dette resultat til og dets undergrupper, kan det generaliseres i følgende form [3] [17] :

Lad være en række undergrupper . Så kan ethvert element være unikt repræsenteret som , hvor .

Beregning af rækkefølge og listeelementer

Visningen beskrevet ovenfor har følgende egenskaber:

For også at kunne kontrollere elementer for at tilhøre en genereret undergruppe, er det nødvendigt at overveje serier af undergrupper af en speciel form, nemlig dem, der er sammensat af stabilisatorer [7] .

Baner og stabilisatorer

Lad handle på settet . Vi vælger et sæt af elementer og konstruerer et antal undergrupper, så hvor  er elementets stabilisator . Med andre ord  er en undergruppe af elementer , der oversætter hvert af elementerne til sig selv [7] . Med denne tilgang vil den del af sættet , som den næste undergruppe ikke-trivielt virker på, ved hvert næste trin falde med et element, og rækkefølgen af ​​den undergruppe, som arbejdet udføres med, vil være mindst to gange . Det følger af dette, at iterationer af algoritmen vil være nødvendige, før den ønskede partition findes [18] .

For at konstruere cosets skal du bruge det faktum, at der er en en-til-en overensstemmelse (bijection) mellem elementerne i kredsløbet og de venstre cosets af stabilisatoren [19] .

Bevis

Ved sætningen om baner og stabilisatorer er sættet af cosets og kredsløbet ækvivalente i kraft. Knyt hvert element til et element i kredsløbet .

Lad , så sæt og falde sammen. Men heraf følger, at det også er sammenfaldende og :

t en ω = t en ( G ω ω ) = ( t en G ω ) ω = ( t 2 G ω ) ω = t 2 ( G ω ω ) = t 2 ω {\displaystyle t_{1}\omega =t_{1}(G_{\omega }\omega )=(t_{1}G_{\omega })\omega =(t_{2}G_{\omega })\ omega =t_{2}(G_{\omega }\omega )=t_{2}\omega }

Hvert coset blev tildelt nøjagtigt ét element i kredsløbet. Fordi cosets dækker hele gruppen , er alle matchede elementer forskellige. Så det er i sandhed en bijektion.

Det følger af beviset, at man som repræsentanter for cosets kan tage elementer, der realiserer forskellige punkter i kredsløbet [19] .

Ejerskabskontrol

Betegn med et sådant element , at . Opdeling i en række stabilisatorer giver dig mulighed for at kontrollere elementet for at tilhøre gruppen [7] :

Disse egenskaber giver dig mulighed for at lave en overgang fra til , hvilket i sidste ende vil føre til, at det aktuelle element skal ligge i . Hvis dette virkelig er tilfældet, så , hvorfra er det muligt at udtrykke [7] .

Baneberegning

Lad gruppen have et generatorsæt . Banen for ethvert element under påvirkning af en gruppe kan organiseres i et træ med følgende form [17] :

Det beskrevne træ kan bygges ved en dybde -første traversering, for dette er det nødvendigt at sortere gennem elementet ved hvert toppunkt , indtil det viser sig, at der endnu ikke er allokeret et toppunkt for [17] . Implementeringseksempel i Python :

# Opbygger et kredsløbstræ givet element w og genereringssæt S def build_schreier_tree ( w , S , kredsløb ): for g i S : hvis g [ w ] ikke er i kredsløb : kredsløb [ g [ w ]] = gælder ( g , kredsløb [ w ]) build_schreier_tree ( g [ w ], S , orbit )

Her returnerer funktionen resultatet af at anvende gruppeoperationen på elementerne og som første og andet argument, og elementet gemmes i .

Schreiers Lemma

Det følger af Schreier-lemmaet, at stabilisatoren genereres af sættet af Schreier-generatorer: . Dette resultat giver os mulighed for at konstruere et generatorsæt for ud fra generatorsættet for og elementets kredsløb . Mulig implementering af en funktion, der returnerer et nyt generatorsæt [20] :

# Tager et generatorsæt for G_{w-1} og en kredsløb på w # Returnerer et generatorsæt for G_w def make_gen ( S , orbit ): n = len ( næste ( iter ( S ))) newS = sæt () for s i S : for u i kredsløb : newS . tilføje ( reducere ( anvende , [ omvendt ( kredsløb [ s [ u ] ] ), s , kredsløb [ u ]])) returnere newS

Algoritmen er ikke udtømt af dette, da selv om størrelsen af ​​det nye generatorsæt polynomielt afhænger af størrelsen af ​​kredsløbet og det gamle generatorsæt for et enkelt opkald, er størrelsen af ​​den genererende funktion samlet for alle kald til denne funktion. mængde vokser eksponentielt [2] .

Sigtningsgeneratorer

For at undgå ukontrolleret vækst af generatorsæt skal der anvendes en sigteprocedure . Dette ville kræve følgende erklæring [3] [20] :

Lad . Så er det muligt at konstruere et sæt af højst elementer sådan, at .

Bevis

Lad os først bevise følgende lemma:

Lad . Så ændres følgende transformationer ikke :

  1. Erstatning for
  2. Udskiftning med , hvor og
Bevis

Lad, efter at have anvendt en af ​​disse operationer, vi får et sæt . Det er indlysende . På den anden side kan disse konverteringer vendes ved konverteringer af samme type, så . Så .

Ved hjælp af sådanne transformationer kan vi reducere sættet til en sådan form, at der for ethvert par i sættet højst er ét element, således at:

s ( ω en ) = ω en ,   s ( ω 2 ) = ω 2 , … ,   s ( ω jeg − en ) = ω jeg − en ,   s ( ω jeg ) = ω j ≠ ω jeg {\displaystyle s(\omega _{1})=\omega _{1},\ s(\omega _{2})=\omega _{2},\dots ,\ s(\omega _{i- 1})=\omega _{i-1},\ s(\omega _{i})=\omega _{j}\neq \omega _{i}} Dette kan opnås ved at tilføje elementer til det nye sæt et ad gangen og fortsætte på samme måde som Gauss-metoden :

  1. Lad os sige, at vi vil tilføje et nyt element ,
  2. Lad os gå sekventielt
    1. Hvis , så gå til ,
    2. Hvis , så tjek om et element med et sådant par allerede er stødt på ,
      1. Hvis vi mødtes, så erstat med og gå til ,
      2. Ellers skal du huske, hvad der svarer til parret , og tilføje i den aktuelle form til ,
  3. Hvis vi ved udgangen af ​​den algoritme, vi har , ignorerer vi og ændrer ikke .

Denne algoritme bruger derfor kun de elementære operationer angivet ovenfor . Bemærk, at hvis , så , så overgangen til fra i algoritmen er korrekt, og hvert par svarer faktisk ikke til mere end én permutation. Under hensyntagen til, at der højst er sådanne par , opnår vi den nødvendige påstand.

Proceduren beskrevet i beviset kaldes Sims-filteret og fungerer i [21] . Dens implementering kan se sådan ud:

# Tager et overordnet sæt S # Returnerer et fortyndet overordnet sæt S' def normalisere ( S ): n = len ( næste ( iter ( S ))) newS = sæt () base = [{} for i i området ( n )] for s i S : for x i området ( 0 , n ): hvis s [ x ] != x : hvis s [ x ] i base [ x ] : s = gælder ( omvendt ( s ), base [ x ][ s ] [ x ]]) andet : base [ x ][ s [ x ]] = s newS . tilføje ( r ) bryde returnere nyS

Ud over Sims -filteret kan Jerrum-filteret [22] bruges til at søge efter et lille sæt . I modsætning til Sims-filteret, som finder et sæt af højst elementer, finder Jerrum-filteret et sæt af højst elementer. Samtidig virker Jerrum-filteret for , så i tilfælde af Schreier-Sims-algoritmen er det at foretrække at bruge Sims-filteret [21] .

Algoritme

Alt ovenstående giver tilsammen en algoritme, der kortfattet kan implementeres som følger [20] :

# Tager et generatorsæt S = s1, ..., sk # Returnerer coset transversals U1, ..., Uk def schreier_sims ( S ): n = len ( næste ( iter ( S ))) ans = [] w = 0 mens S : kredsløb = {} kredsløb [ w ] = tupel ( område ( n )) build_schreier_tree ( w , S , kredsløb ) og += [[ kredsløb [ i ] for i i kredsløb ]] S = normalisere ( make_gen ( S , kredsløb )) w += 1 retur ans

Trin for trin har dens handlinger følgende betydning:

  1. Elementets kredsløb bygges ved dybde-først søgning,
  2. Alle Schreier generatorer er beregnet til ,
  3. Mange generatorer decimeres for at undgå deres eksponentielle vækst.

Ved udgangen vil algoritmen returnere en liste, hvis elementer er tværgående af cosets .

Køretid for algoritmen

I alt kræver algoritmen ikke flere iterationer. Hver iteration består af:

  1. At bygge et kredsløbstræ, der tager elementære operationer,
  2. Konstruktionen af ​​Schreier-generatorer, som tager elementær drift og returnerer generatorer,
  3. Normalisering af generatorsættet, som tager elementære operationer, hvor  er sættet opnået i det foregående trin.

Værdien i det tilfælde, hvor sættet er givet , ændres ikke gennem hele algoritmen og er lig med . Størrelsen af ​​generatorsættet er initialt lig med , og overstiger ved hvert efterfølgende trin ikke . Således kan den samlede køretid for algoritmen i ovenstående implementering estimeres til [8] [12] [13] .

Variationer af algoritmen

Pseudo-lineære versioner

Tidligere har det vist sig, at algoritmen kræver iterationer. I det generelle tilfælde kan størrelsen af ​​gruppen være af størrelsesordenen , og i dette tilfælde ifølge Stirling-formlen , som naturligvis er større . Men i nogle tilfælde er rækkefølgen af ​​gruppen lille, og derfor er det mere rentabelt at have en algoritme, der afhænger af , og ikke  - for eksempel, når det drejer sig om en kendt gruppe, der er angivet som en permutationsgruppe [12] .

Ved Cayleys sætning er enhver endelig gruppe isomorf til en eller anden permutationsgruppe . Graden af ​​en sådan gruppe kan være stor, men for mange grupper er deres rækkefølge sådan, at . For eksempel er den dihedrale gruppe isomorf til permutationsgruppen genereret af cyklisk skift og refleksion . Det vil sige, at graden af ​​denne gruppe er , og rækkefølgen er , og . For sådanne grupper kan man overveje algoritmer med køretid , som kaldes pseudo-lineære [12] .

I et forsøg på at bringe algoritmen tættere på en pseudo-lineær og reducere graden , inkluderet i dens køretid, kom Sheresh til versioner af algoritmen, der kræver [18] :

  1. tid og hukommelse
  2. tid og hukommelse.

Probabilistisk version

Den første fungerende probabilistiske version af algoritmen blev udviklet af Jeffrey Leon i 1980 [11] . Normalt er det det, de mener, når de taler om den probabilistiske Schreyer-Sims-metode. Ved udtynding af Schreier-generatorer blev denne procedure afsluttet for tidligt, hvis 20 generatorer i træk viste sig at være faktoriseret. Sheresh viste, at denne procedure sammen med nogle optimeringer giver følgende erklæring [5] :

For enhver konstant er der en Monte Carlo-type algoritme , der med en fejlsandsynlighed på højst vil konstruere et stærkt generatorsæt for permutationsgruppen ved hjælp af tid og hukommelse.

I moderne computeralgebrasystemer bruges modifikationer af denne version af algoritmen med forskellige heuristika normalt til at fremskynde programmet [5] .

Noter

  1. 1 2 3 Sims, 1970 , s. 169-170.
  2. 1 2 3 4 5 Murray, 2003 , s. 1-3.
  3. 1 2 3 4 5 Holt, Eyck, O'Brien, 2005 , s. 87-90.
  4. 1 2 Sheresh, 2003 , s. 1-4.
  5. 1 2 3 4 Sheresh, 2003 , s. 62-64.
  6. 1 2 Brouwer, 2016 , s. fire.
  7. 1 2 3 4 5 6 7 Sims, 1970 , s. 176-177.
  8. 1 2 Furst, Hopcroft, Lax, 1980 .
  9. Jerrum, 1986 .
  10. Knuth, 1991 .
  11. 1 2 Leon, 1980 .
  12. 1 2 3 4 Sheresh, 2003 , s. 48-54.
  13. 1 2 Holt, Eyck, O'Brien, 2005 , s. 93-94.
  14. Zhuravlev, Flerov, Vyaly, 2019 , Permutations, s. 31-36.
  15. Holt, Eyck, O'Brien, 2005 , s. 1-7.
  16. Murray, O'Brien, 1995 .
  17. 1 2 3 Murray, 2003 , s. 9-24.
  18. 1 2 Sheresh, 2003 , s. 59-62.
  19. 1 2 Zhuravlev, Flerov, Vyaly, 2019 , Orbits and stabilizers, s. 140-145.
  20. 1 2 3 Murray, 2003 , s. 25-33.
  21. ↑ 1 2 Vipul Naik. Sims filter  (engelsk) . Groupprops, The Group Properties Wiki . Hentet 23. september 2019. Arkiveret fra originalen 1. september 2019.
  22. Vipul Naik. Jerrums  filter . Groupprops, The Group Properties Wiki . Hentet 19. september 2023. Arkiveret fra originalen 1. september 2019.

Litteratur