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 ).
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.
Det er klart, hvordan man finder minimum (maksimum) i en given matrix i lineær tid:
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 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.
Input: tal, der repræsenterer det -th element.
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 .