1 / 20

Datastructuren Sorteren: alleen of niet alleen vergelijkingen (II)

Datastructuren Sorteren: alleen of niet alleen vergelijkingen (II). College 6. Vergelijkingsgebaseerde algoritmen. Enige operaties op objecten zijn: A[ i ] < A[ j ]; A[ i ] > A[ j ]; A[ i ] ³ A[ j ]; A[ i ] £ A[ j ]; A[ i ]==A[ j ] Verplaatsingen

howe
Download Presentation

Datastructuren Sorteren: alleen of niet alleen vergelijkingen (II)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DatastructurenSorteren: alleen of niet alleen vergelijkingen (II) College 6

  2. Vergelijkingsgebaseerde algoritmen • Enige operaties op objecten zijn: • A[i] < A[j]; A[i] > A[j]; A[i] ³ A[j]; A[i] £ A[j]; A[i]==A[j] • Verplaatsingen • Voorbeelden: Quicksort, Randomized Quicksort, Heapsort, Bubblesort, Insertionsort, … • Allemaal gebruiken ze W(n log n) tijd: • Q(n log n) worst case: Heapsort (…) • Q(n2) worst case, Q(n log n) gemiddeld: Randomized Quicksort • Q(n2) worst case en gemiddeld: Bubble sort

  3. Vorige keer • Een aantal algoritmen die NIET vergelijkingsgebaseerd zijn: • Counting sort • Radix sort • Bucket sort • Deze gebruiken eigenschappen van de waardes: kijken binnenin de waardes • Zijn dan – als die eigenschappen gelden – sneller: O(n) tijd (worst case, verwacht, …) • Werken dus alleen zo snel als die eigenschappen gelden!!!

  4. Vandaag • Ondergrens voor vergelijkings-gebaseerd sorteren (comparison sorts) • Vandaag Datastructuren

  5. De vraag • Vraag: zouden er sorteeralgoritmen die minder dan Q(n lg n) tijd gebruiken? • O(n), O(n lg lg n), O(n Ö (lg n)) ? • Het antwoord is JA en NEE • JA – als we extra aannamen kunnen maken over de input en die gebruiken • NEE – als we dat niet kunnen Datastructuren

  6. Ondergrenzen Voor Sorteren Vijf Datastructuren

  7. Vergelijkingsgebaseerd sorteeralgoritme(herhaling) • In een vergelijkingsgebaseerd sorteeralgoritme(comparison sort) zijn de enige operaties die op de data worden uitgevoerd: • Vergelijkingen:A[i] < A[j]; A[i] > A[j]; A[i] ³ A[j]; A[i] £ A[j]; A[i]==A[j] • Verplaatsingen • De data worden verder niet bekeken om extra informatie er uit te halen waar we de loop van het programma mee beïnvloeden Datastructuren

  8. Allemaal verschillende elementen • We bewijzen: vergelijkingsgebaseerde algoritmen moeten op sommige inputs lg(n!) = Q(n lg n) vergelijkingen doen • We nemen in het bewijs aan dat alle elementen in de array (van lengte n) verschillend zijn • Algoritme moet immers dan ook correct werken Datastructuren

  9. De stelling Stelling Voor ELK vergelijkingsgebaseerd algoritme A: er is een constante c, zodat voor elke n er een input met n elementen is waar A cn lg n vergelijkingen uitvoert (en dus kost A W(n lg n) tijd)

  10. Model van algoritme:Beslissingsboom • Binaire boom, met • Elke knoop heeft twee of nul kinderen • Elke interne knoop is gelabeld met een vergelijkingstest: welke twee (verschillende) elementen (uit oorspronkelijk array) worden met elkaar vergeleken? • Links: als 1e element het kleinste is • Rechts: als 2e element het kleinste is • Bij een blad ... Tja … wat doen we daar? Datastructuren

  11. Beslissingsboom voor Insertion Sort op 3 elementen 1:2 INSERTION-SORT(A) for j = 2 to lengte(A) do key = A[j] i = j – 1; whilei > 0 and A[i] > keydo A[i+1] = A[i] i = i – 1; A[i+1] = key 1:3 2:3 546 1:3 2:3 456 645 654 465 564 In de bladeren staan voorbeeldenvan inputs die daar terecht komen Datastructuren

  12. Bladeren gemarkeerd met een permutatie 1:2 1:3 2:3 {2,1,3} 1:3 2:3 {1,2,3} {3,1,2} {3,2,1} {1,3,2} {2,3,1} Datastructuren

  13. Over beslissingsbomen • Als twee inputs dezelfde ordening hebben, komen ze in hetzelfde blad • Bijvoorbeeld: (4,6,5) of (10, 30, 20) of (2, 47, 42) • Er kunnen testen zich herhalen (bijvoorbeeld in bubble sort) • Er kunnen bladeren zijn waar je nooit terecht kan komen (komt ook in bubble sort voor) • Niet zo belangrijk hoe je precies test (i<j of j<i) etc. • Markeer bladeren met de permutaties die daar terecht komen

  14. Hooguit één permutatie in een blad • Als twee inputs in hetzelfde blad terecht komen, worden dezelfde data-bewegingen uitgevoerd • De inputs worden op dezelfde manier gepermuteerd! • Prima, als we dezelfde sortering op de inputs hebben (als {4,6,5}, {1,3,2} of {12, 49, 25}) • Niet prima, als de inputs anders gesorteerd zijn: want dan is minstens één antwoord fout • In elk blad van de boom staat hooguit één permutatie van {1,2,3,…,n} Datastructuren

  15. Diepte van beslisbomen versus vergelijksgebaseerd sorteren Elke permutatie moet voorkomen in een blad van de beslisboom Elk blad van de beslisboom heeft hooguit 1 permutatie Als er een permutatie in een blad met diepte r zit moeten voor die permutatie r vergelijkingen worden uitgevoerd Er zijn n! permutaties Diepte van een boom met n! bladeren is ondergrens voor vergelijkingsgebaseerd sorteren

  16. Diepte van beslisboom • Als een binaire boom diepte r heeft, heeft de boom maximaal 2r bladeren • Bewijs met inductie naar r. Triviaal als r=0; als r>0, dan wortel heeft twee kinderen met bomen met diepte r-1, dus 2r-1 + 2r-1 bladeren • Een beslisboom voor sorteren van n elementen heeft minstens n! bladeren, dus heeft diepte minstens lg(n!) = Q(n lg n) • lg(n!) < lg(nn) = n lg n • lg(n!) > lg((n/2)n/2) = n/2 * (log n/2) =n/2 * (log n – 1) = W(n lg n) • Want n! > n/2 * (n/2+1) * … * (n-1) * n > (n/2)n/2 Datastructuren

  17. Stelling Stelling: Elk vergelijksgebaseerd algoritme gebruikt voor sommige inputs van lengte nW(n lg n) vergelijkingen en dus W(n lg n) tijd. Gevolg: heapsort en merge sort zijn “asympthotisch optimaal”. Datastructuren

  18. Vijf Conclusies Datastructuren

  19. Sorteren • Zonder gebruik te maken van speciale eigenschappen van input: W(n lg n) • Ondergrensbewijs: aantal vergelijkingen • Met gebruik van speciale eigenschappen: • Sneller, vaak O(n) • Counting Sort • Radix Sort • Bucket Sort • Maar natuurlijk alleen voor inputs die zulke eigenschappen hebben

  20. Conclusies • In de praktijk worden soms hybride methodes gebruikt • Uiterst slimme methoden om heel weinig elementen zo snel mogelijk te sorteren • Overstappen van ene sorteermethode naar andere ergens gedurende algoritme • Voor implementatie van sommige van deze algoritmen (en voor heel veel andere toepassingen) hebben we lijsten nodig • Later kijken we naar implementaties van lijsten en speciale versies: queues en stacks

More Related