Anda di halaman 1dari 24

Heapsort

Jurusan Matematika
Fakultas Matematika dan Ilmu Pengetahuan Alam
Universitas Udayana
Kelompok 1
2
Anna Fitriani 1108405001
Komang Candra Ivan 1108405007
Lia Jenita 1108405009
Ni Putu Iin Vinny Dayanti 1108405018
Ni Nyoman Kiswanti 1108405019
Desak Ayu Wiri Astiti 1108405021
NI Made Anggi Nuning Lestari 1108405030
I Gede Hardi Karmana 1108405031
Herlina Hidayati 1108405040
Ni Wayan Diansuantari 1108405041
G.A.A Ririn Veranika 1108405042
Tri Alit Tresna Putra 1108405043

Apa itu heap?
3
Definisi heap:
1. Sebuah memori yang berukuran besar di mana
programmer dapat mengalokasikan blok yang
diperlukan, dan mengeluarkan mereka (atau
memungkinkan mereka untuk menjadi koleksi tak
terpakai) ketika tidak lagi dibutuhkan
2. Sebuah pohon biner rata kiri yang seimbang di
mana node tidak memiliki nilai lebih besar
dari nilai dalam induknya
Kedua definisi ini memiliki sedikit kesamaan
Heapsort menggunakan definisi kedua

Pohon Biner Seimbang
4
Pengingat:
Kedalaman node adalah jarak dari akar ke node itu
Kedalaman pohon adalah kedalaman dari node terdalam
Sebuah pohon biner dari kedalaman n
adalah seimbang jika semua node pada
kedalaman 0 sampai n-2 memiliki dua anak
Seimbang Seimbang Tidak Seimbang
n-2
n-1
n
Pohon Biner Rata Kiri
5
Sebuah pohon biner dari kedalaman n
yang seimbang adalah rata kiri apabila :
Memiliki 2
n
node pada kedalaman n (pohon tersebut
penuh), atau
Memiliki 2
k
node pada kedalaman k, untuk semua k < n,
dan semua daun pada kedalaman n ditempatkan di
sebelah kiri sebisa mungkin
Rata kiri Tidak rata kiri
Sasaran
6
Pertama, kita akan belajar bagaimana mengubah
pohon biner menjadi heap
Selanjutnya, kita akan belajar bagaimana
mengubah sebuah pohon biner kembali
ke heap setelah berubah dengan cara tertentu
Akhirnya kita akan melihat bagaimana
menggunakan ide-ide untuk mengurutkan
susunan
Sifat Heap
7
Sebuah node memiliki sifat heap jika nilai dalam
node adalah lebih besar atau sama dengan
nilai pada anak-anaknya
Semua node daun secara otomatis memiliki sifat heap
Sebuah pohon biner adalah tumpukan jika semua
node di dalamnya memiliki sifat heap
12
8 3
node biru
mempunyai
sifat heap
12
8 12
node biru
mempunyai
sifat heap
12
8 14
node biru tidak
mempunyai sifat
heap
Penyaringan
8
Apabila terdapat node yang tidak memiliki sifat
heap, Anda dapat memberikan sifat heap dengan
menukar nilainya dengan nilai dari anak yang lebih
besar
Terkadang ini disebut penyaringan
Perhatikan bahwa anak itu bisa kehilangan sifat
heap
14
8 12
node biru
memiliki sifat
heap
12
8 14
node biru tidak
memiliki sifat
heap
Membuat Heap I
9
Sebuah pohon yang terdiri dari satu node
otomatis menjadi heap
Kita membuat sebuah heap dengan
menambahkan node sekaligus :
Tambahkan node dari kiri ke node paling kanan di
tingkatan terdalam
Jika tingkatan terdalam penuh, mulai tingkatan yang
baru
Contoh:
Add a new
node here
Add a new
node here
Membuat Heap II
10
Setiap kita menambahkan node, kita bisa
meniadakan sifat heap dari induknya
Untuk memperbaikinya, kita menyaringnya
Tapi setiap kita menyaring, nilai node teratas dari
penyaringan bisa bertambah, dan ini bisa
meniadakan sifat heap dari induknya
Kita mengulang proses penyaringan, menaikkan
pohon sampai
Kita mencapai node yang nilainya tidak perlu
ditukar (karena induknya masih lebih besar
daripada kedua anaknya), atau
Kita mencapai akar
Membuat Heap III
11
8 8
10
10
8
10
8 5
10
8 5
12
10
12 5
8
12
10 5
8
1 2 3
4
Anak Lainnya Tidak Terpengaruh
12
node yang berisi 8 tidak terpengaruh karena induknya membesar ,
bukan mengecil
node yang berisi 5 tidak terpengaruh karena induknya membesar,
bukannya mengecil
node yang berisi 8 tidak terpengaruh karena walaupun induknya
mengecil, dia tetap lebih besar
12
10 5
8 14
12
14 5
8 10
14
12 5
8 10
Pseudocode Heapify(A,i)
16
1
4 10
14 7 9 3
2 8 1
2 3
4 5 6 7
8 9 10
2
1
16
14 10
4 7 9 3
8 1
2 3
4 5 6 7
8 9 10
1
16
14 10
8 7 9 3
2 4 1
2 3
4 5 6 7
8 9 10
Heapify(A,2):
Heapify(A,4):
Heapify(A,9):
Build Heap
4 1 3 2 16 9 10 14 8 7
1 2 3 4 5 6 7 8 9 10
A
4
1 3
2 16 9 10
14 8 7
2 3
4 5 6 7
8 9 10
i
1
4
1 3
2 16 9 10
14 8 7
2 3
4 5 6 7
8 9 10
i
1
4
1 3
14 16 9 10
2 8 7
2 3
4 5 6 7
8 9 10
i
1 4
1 10
14 16 9 3
2 8 7
2 3
4 5 6 7
8 9 10
i
1
Pseudocode Of Heap sort
16
4
16 10
14 7 9 3
2 8 1
2 3
4 5 6 7
8 9 10
i
1
16
14 10
8 7 9 3
2 4 1
2 3
4 5 6 7
8 9 10
1
Pseudocode of Heap sort
17
Contoh Heap
18
Ini adalah pohon biner setelah heapify
Sorting
19
Apakah "heap" itu harus dilakukan dengan menyortir
array?
Inilah bagian yang rapi:
Karena pohon biner seimbang dan rata kiri,maka dapat
disajikan sebagai array
Bahaya Will Robinson: Penyajian ini bekerja dengan baik
hanya dengan keseimbangan, rata kiri pohon biner
Semua operasi kita pada pohon biner dapat disajikan
sebagai operasi pada array

Memetakan ke deret
20
Keterangan:
Anak kiri dari indeks i adalah pada indeks 2 * i
Anak kanan indeks i adalah pada indeks 2 * i + 1
Contoh: anak-anak dari node 4 (19) adalah 8 (18) dan 9
(14)
19
14 18
22
3 21
14
11 9
15
25
17 22
25 22 17 19 22 14 15 18 14 21 3 9 11
1 2 3 4 5 6 7 8 9 10 11 12 13
Hapus dan Ganti Akar
21
Akar" adalah elemen pertama dalam array
" node paling kanan pada tingkat yang terdalam" adalah
elemen terakhir
Tukar mereka ...
Dan kemudian... Anggap bahwa elemen terakhir dalam
array tidak ada lagi. Yaitu, "indeks terakhir" adalah 12
(yang berisi nilai 9)
25 22 17 19 22 14 15 18 14 21 3 9 11
1 2 3 4 5 6 7 8 9 10 11 12 13
11 22 17 19 22 14 15 18 14 21 3 9 25
1 2 3 4 5 6 7 8 9 10 11 12 13
Reheap dan Ulangi
22
Reheap node akar (indeks 1, mengandung 11) ...
Ingat, meskipun, bahwa indeks "terakhir" array berubah
Ulangi sampai yang terakhir menjadi pertama, dan array
diurutkan!
22 22 17 19 21 14 15 18 14 11 3 9 25
1 2 3 4 5 6 7 8 9 10 11 12 13
9 22 17 19 22 14 15 18 14 21 3 22 25
1 2 3 4 5 6 7 8 9 10 11 12 13
11 22 17 19 22 14 15 18 14 21 3 9 25
1 2 3 4 5 6 7 8 9 10 11 12 13
...Kemudian, hapus dan ganti node akarnya
Analysis
Dengan pemikiran:
Setiap Heapify memerlukan waktu (lg n). Terdapat
O(n). Oleh karena itu, Build-Heap memerlukan O(n lg
n).
Analisis Ketat: O(n)
Asumsikan n = 2
k
-1, merupakan sebuah pohon biner
komplit. Waktu yang diperlukan oleh Heapify ketika
bekerja pada ketinggian node h adalah O(h).

Total waktu =

dengan perhitungan :
0
1

k - 1
h = k
(
k n = lg

) ( )
2 . 2
( ) (
2
lg
0
lg
0
1
n O
h
n O h O
n
n
h
h
n
h
h
= =
(
(
(


= =
+
2
2
0
=

= h
h
h
Terima Kasih
24
Om Santih, Santih, Santih, Om

Anda mungkin juga menyukai