Udvælgelsesalgoritme

I datalogi er en udvælgelsesalgoritme  en algoritme til at finde det k . største element i en matrix (sådan et element kaldes kth ordens statistik ). Særlige tilfælde af denne algoritme er at finde minimumselementet , maksimumelementet og medianen . Der findes en algoritme, der med garanti løser problemet med at vælge det k. største element i O( n ).

Valg ved at sortere

Udvælgelsesproblemet kan reduceres til sortering . Faktisk kan du sortere et array og derefter tage det element, du har brug for, i rækkefølge. Dette er effektivt, når valget skal foretages flere gange: så kan du sortere arrayet i O( n log n ) og derefter vælge elementer fra det. Men hvis valget skal træffes én gang, kan denne algoritme være urimelig lang.

Lineær algoritme til at finde minimum (maksimum)

Det er klart, hvordan man finder minimum (maksimum) i en given matrix i lineær tid:

En gennemsnitlig lineær algoritme til at finde k -te ordens statistik

Der er en algoritme til at finde k -te ordens statistik baseret på quicksort algoritmen , der kører i O( n ) i gennemsnit.

Ideen med algoritmen er, at arrayet er opdelt i to dele i forhold til et tilfældigt (med ligeså sandsynligt) udvalgt element - elementer, der er mindre end det valgte, falder i den ene del, resten i den anden (denne operation udføres for , kl. i slutningen af ​​det er det valgte element på plads ). Hvis der er nøjagtige elementer i den første del ( ), så er det valgte element det ønskede element, hvis , så udføres algoritmen rekursivt for den første del af arrayet, ellers - for den anden (i sidstnævnte tilfælde for næste iteration, trækkes fra ). Rekursive kald fører til en eksponentielt faldende størrelse af det behandlede array med hver iteration, og af denne grund er eksekveringstiden for algoritmen .

BFPRT-algoritme (lineær deterministisk)

BFPRT-algoritme giver dig mulighed for at finde k - te ordens statistik garanteret i O( n ). Opkaldt efter dets opfindere: Manual Blum, Robert W. Floyd, Vaughan R. P ratt , Ronald L. R ivest og Robert Endre T arjan. Det bruges med en ret lang liste af elementer, over 800 elementer.

Sådan virker det

Input: tal, der repræsenterer det -th element.

  1. Listen er opdelt i delmængder af elementer, 5 elementer hver (undtagen den sidste delmængde). Antallet af elementer i delmængder kan overstige 5 og skal under alle omstændigheder være ulige. Men hvis du opdeler listen i undersæt af 3 elementer, vil køretiden ikke være lineær.
  2. Hvert delsæt sorteres ved hjælp af en passende sorteringsalgoritme .
  3. Lade være  sættet af medianer dannet i delmængder efter sortering. Find rekursivt medianen i  - medianen af ​​medianer. Lad os ringe til hende .
    • Den resulterende struktur efter trin 3 har følgende egenskab:
      • En fjerdedel af alle elementer har alligevel en nøgle . (En delmængde af sættet )
      • En fjerdedel af alle elementer har alligevel en nøgle . (En delmængde af sættet )
  4. Nu er listen opdelt i forhold til medianen s i 2 delmængder og . I dette tilfælde skal kun halvdelen af ​​alle elementer sammenlignes med s, da to fjerdedele af elementerne allerede er sorteret i forhold til s. Som følge heraf indeholder hver af delmængderne og maksimalt 3/4 af alle elementer (minimum er 1/4 af alle elementer).
  5. Hvis en:
    • , så findes det ønskede element - dette er medianen af ​​medianerne
    • , så kaldes algoritmen rekursivt på sættet
    • i alle andre tilfælde kaldes algoritmen rekursivt på sættet

Garanteret oppetid

Med hvert rekursivt opkald giver algoritmen dig mulighed for at kassere mindst en fjerdedel af alle elementer. Dette giver en øvre grænse for den garanterede lineære køretid for en deterministisk algoritme , da den er udtrykt ved gentagelsesrelationen . Generelt, hvis undersættene er af størrelse , udtrykkes køretiden som .

Litteratur