63
Koffman & Wolfgang kapitel 8, avsnitt 8 Heapsort 1

Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Koffman & Wolfgangkapitel 8, avsnitt 8

Heapsort

1

Page 2: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Heapsort

Mergesort har komplexitet O(n log n)men det kräver temporärt ett extra fält

Heapsort kräver inte något extraminnedet är en in-place-algoritmsom namnet antyder använder algoritmen en heap för att sortera fältet

2

Page 3: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Första versionen av Heapsort

En enkel Heapsort-algoritm:skapa en tom heaptag ett element i taget ur fältet och stoppa in i heapentag sedan ut elementen ur heapen ett i taget och stoppa tillbaka i fältet

Denhär versionen kräver extraminnehur gör man detta in-place?

3

Page 4: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Heapsort in-place

Antag att vi har ett fält med n elementlåt första elementet vara en heap med ett elementutöka heapen med ett element i tagetlåt elementet bubbla upp till rätt plats i heapen

Nu har vi en heap; hur gör vi den till en lista?byt ut det översta elementet med det sistaminska heapens storlek, och låt det nya översta elementet bubbla ner till rätt ställefortsätt så tills heapen bara har ett element

Vi måste bygga heapen som en max-heap, eftersom vi flyttar elementen sist i fältet hela tiden

4

Page 5: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort

89

76 74

37 32 39 66

20 26 18 28 29 6

Heap OK

Page 6: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

89

76 74

37 32 39 66

20 26 18 28 29 6

Remove

Page 7: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

6

76 74

37 32 39 66

20 26 18 28 29 89

Reheap

Page 8: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

76

6 74

37 32 39 66

20 26 18 28 29 89

Page 9: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

76

37 74

6 32 39 66

20 26 18 28 29 89

Page 10: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

76

37 74

26 32 39 66

20 6 18 28 29 89

Page 11: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

76

37 74

26 32 39 66

20 6 18 28 29 89

Heap OK

Page 12: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

76

37 74

26 32 39 66

20 6 18 28 29 89

Remove

Page 13: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

29

37 74

26 32 39 66

20 6 18 28 76 89

Reheap

Page 14: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

74

37 29

26 32 39 66

20 6 18 28 76 89

Page 15: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

74

37 66

26 32 39 29

20 6 18 28 76 89

Page 16: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

74

37 66

26 32 39 29

20 6 18 28 76 89

Heap OK

Page 17: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

74

37 66

26 32 39 29

20 6 18 28 76 89

Remove

Page 18: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

28

37 66

26 32 39 29

20 6 18 74 76 89

Reheap

Page 19: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

66

37 28

26 32 39 29

20 6 18 74 76 89

Page 20: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

66

37 39

26 32 28 29

20 6 18 74 76 89

Page 21: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

66

37 39

26 32 28 29

20 6 18 74 76 89

Heap OK

Page 22: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

66

37 39

26 32 28 29

20 6 18 74 76 89

Remove

Page 23: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

18

37 39

26 32 28 29

20 6 66 74 76 89

Reheap

Page 24: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

39

37 18

26 32 28 29

20 6 66 74 76 89

Page 25: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

39

37 29

26 32 28 18

20 6 66 74 76 89

Page 26: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

39

37 29

26 32 28 18

20 6 66 74 76 89

Heap OK

Page 27: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

39

37 29

26 32 28 18

20 6 66 74 76 89

Remove

Page 28: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

6

37 29

26 32 28 18

20 39 66 74 76 89

Reheap

Page 29: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

37

6 29

26 32 28 18

20 39 66 74 76 89

Page 30: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

37

32 29

26 6 28 18

20 39 66 74 76 89

Page 31: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

37

32 29

26 6 28 18

20 39 66 74 76 89

Heap OK

Page 32: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

37

32 29

26 6 28 18

20 39 66 74 76 89

Remove

Page 33: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

20

32 29

26 6 28 18

37 39 66 74 76 89

Reheap

Page 34: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

32

20 29

26 6 28 18

37 39 66 74 76 89

Page 35: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

32

26 29

20 6 28 18

37 39 66 74 76 89

Page 36: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

32

26 29

20 6 28 18

37 39 66 74 76 89

Heap OK

Page 37: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

32

26 29

20 6 28 18

37 39 66 74 76 89

Remove

Page 38: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

18

26 29

20 6 28 32

37 39 66 74 76 89

Reheap

Page 39: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

29

26 18

20 6 28 32

37 39 66 74 76 89

Page 40: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

29

26 28

20 6 18 32

37 39 66 74 76 89

Page 41: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

29

26 28

20 6 18 32

37 39 66 74 76 89

Heap OK

Page 42: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

29

26 28

20 6 18 32

37 39 66 74 76 89

Remove

Page 43: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

18

26 28

20 6 29 32

37 39 66 74 76 89

Reheap

Page 44: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

28

26 18

20 6 29 32

37 39 66 74 76 89

Page 45: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

28

26 18

20 6 29 32

37 39 66 74 76 89

Heap OK

Page 46: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

28

26 18

20 6 29 32

37 39 66 74 76 89

Remove

Page 47: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

6

26 18

20 28 29 32

37 39 66 74 76 89

Reheap

Page 48: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

26

6 18

20 28 29 32

37 39 66 74 76 89

Page 49: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

26

20 18

6 28 29 32

37 39 66 74 76 89

Page 50: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

26

20 18

6 28 29 32

37 39 66 74 76 89

Heap OK

Page 51: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

26

20 18

6 28 29 32

37 39 66 74 76 89

Remove

Page 52: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

6

20 18

26 28 29 32

37 39 66 74 76 89

Reheap

Page 53: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

20

6 18

26 28 29 32

37 39 66 74 76 89

Page 54: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

20

6 18

26 28 29 32

37 39 66 74 76 89

Heap OK

Page 55: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

20

6 18

26 28 29 32

37 39 66 74 76 89

Remove

Page 56: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

18

6 20

26 28 29 32

37 39 66 74 76 89

Reheap

Page 57: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

18

6 20

26 28 29 32

37 39 66 74 76 89

Heap OK

Page 58: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

18

6 20

26 28 29 32

37 39 66 74 76 89

Remove

Page 59: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

6

18 20

26 28 29 32

37 39 66 74 76 89

Reheap

Page 60: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Trace of Heapsort (cont.)

6

18 20

26 28 29 32

37 39 66 74 76 89

Heap OK

Page 61: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Heapsort, implementering

Vi implementerar heapen som ett fält:

fältet är uppdelat i en heap-del och en sorterad listavarje element vi tar bort flyttas till slutet av fältetheap-delen av fältet minskar successivt

Page 62: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Heapsort, algoritm

Algoritm för In-Place Heapsort

1. while n is less than table.length:2. increment n by 1 (this inserts a new item into the heap)3. restore the heap property4.while the heap is not empty:5. remove the first item from the heap by swapping it with the last item in the heap 6. restore the heap property

Page 63: Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver temporärt ett extra fält Heapsort kräver inte något extraminne det är en in-place-algoritm

Analys av Heapsort

Heapar är logaritmiska:stoppa in/ta bort element är O(log n) att stoppa in n element är O(n log n) att ta bort n element är också O(n log n) O(n log n) + O(n log n) = O(n log n)algoritmen kräver inget extra minne

63