Upload
hadi-khairi
View
60
Download
6
Embed Size (px)
DESCRIPTION
tugas kuliah
Citation preview
BAB I
PENGURUTAN
Tujuan utama pengerutan:
Menunjukkan sejumlah contoh yang mengilustrasikan struktur data dan untuk
menunjukkan bagaimana pemilihan struktur data mempengaruhi algoritma untuk
menyelesaikan atau malakukan tugasnya.
Pengurutan juga menunjukkan contoh yang bagus untuk menunjukkan bahwa suatu
persoalan dapat diselesaikan dengan sejumlah algoritma yang berbeda-beda,masing-masing
mempunyai keuntungan dan kerugian yang harus diperhitungkan untuk suatu aplikasi
tertentu.pengurutan diartikan sebagai proses pengurutan kembali sekumpulan objek kedalam
suatu pengurutan tertentu.
Tujuan pengurutan adalah
Untuk mendapatkan kemudahan dalam mencari anggota dalam suatu himpunan
Untuk mempermudah menentukan data maksimal atau data minimum
Secara umum ada 2 jenis pengurutan data:
1 Pengurutan secara urut naik
Pengurutan dari data yang nilainya paling kecil sampai data yang paling besar.bila N
objek disimpan dalam larik(L),maka pengurutan manaik berarti menyusun elemen larik
sedemikian sehingga L[1]<L[2]<L[3]<…….< L[N]
2 Pengurutan secara urut turun
Pengurutan dari data yang nilainya paling besar sampai data yang paling kecil
sehingga elemen lariknya L[1]>L[2]>L[3]>……..>L[N]
Data yang diurut dapat berupa data yang bertipe numeric dasar/tipe
bentuk(record).jika data bertipe bentuk record/rekaman ,maka harus dijelaskan berdasarkan
field apa data itu diurut.
Contoh:
Data integer terurut menaik
23,27,45,67
Data real terurut menurun
25,12,20,19,-12,-20
Data string terurut menaik
Agus ,Budi,Cinta,Dodi
Data mahasiswa terurut menaik berdasarkan nim
(091011201,Rida,A++),(091011208,Taufik,A++),(091011212,Nora,A++)
Pengurutan biasanya digunakan untuk:
Membantu proses pencarian(searching)
Menyelesaikan masalah-masalah komplek seperti penjadwalan(schedule),pengelolaan
basis data,reset operasi dsb.
Pengurutan terbagi atas 2 kelompok:
1. Pengurutan internal
Pengurutan terhadap sekumpulan data yang disimpan dalam memori utama
computer.umumnya struktur data yang dipakai adalah larik/Array,sehingga pengurutan
internal disebut juga pengurutan Larik/Array.
2. Pengurutan eksternal
Pengurutan data yang disimpan dalam memori sekunder,biasanya data bervolume
besar sehingga tidak mampu dimuat semuanya dalam memori computer,yang disebut juga
dengan pengurutan Arsip/File.karena struktur eksternal yang dipakai adalah arsip.
Macam-macam metode pengurutan:
I. Pengurutan dengan penyisipan langsung(straightinsertion)
Metode penyisipan langsung banyak digunakan oleh pemain kartu,dalam metode ini
elemen kartu dibagi menjadi 2 kelompok:
Kelompok pertama(1),disebut kelompok tujuan(kartu yang ada ditangan pemain sudah
terurut)dengan urutan Ai,…..Ai-1
Kelompok kedua(2),disebut kelompok sumber(kartu yang ada diatas meja yang masih belum
terurut)dengan urutan Ai…..An.(Pada setiap langkah dimulai dengan i=2 dan setiap kali
nilainya +1,elemen ke-i diambil dari kolompok sumber akan dipindahkan kekelompok tujuan
dengan menyisipkan pada tempat yang sesuai.
II. Pengurutan sisip(insertion sort)
Metode pengurutan dengan cara menyisipkan elemen larik pada posisi yang
tepat.Pencarian posisi yang tepat dilakukan dengan cara melakukan pencarian beruntun
dalam larik.Selama pencarian posisi yang tepat dilakukan penggeseran elemen larik.Insertion
sort dilakukan dengan mencari tempat yang tepat kemudian disisipkan.Insertion sort tidak
dipergunakan untuk jumlah data yang besar.
Contoh:
Data yang akan diurutkan : 23,45,12,24,56
iterasi A[0] A[1] A[2] A[3] A[4] A[5]
I=1 0 23 45 12 24 56
I=2 45 23 45 12 24 56
I=3 12 12 23 45 24 56
I=4 24 12 23 24 45 56
I=5 56 12 23 24 45 56
Data yang akan diurutkan: 7,5,3,6
iterasi A[0] A[1] A[2] A[3] A[4]
I=1 0 7 5 3 6
I=2 7 5 7 3 6
I=3 3 3 5 7 6
I=4 6 3 5 6 7
Langkah –langkah pengurutan dengan pengisipan langsung(straightinsertion):
Asumsi : L[0] dianggap sudah ditempat
Langkah 1
L[1] harus dicari tempatnya yang tepat pada L[0….1] dengan cara menggeser elemen L[0] ke
kanan bila L[0…0] lebih dari L[1].
Langkah 2
L[2] harus dicari tempatnya yang tepat pada L[0…..2] dengan cara menggeser elemen L[0…
1] ke kanan bila L[0….1] lebih besar dari L[2].
Langkah 3
L[3] harus dicari tempatnya yang tepat pada L[0…3]dengan cara menggeser elemen L[0…2]
ke kanan bila L[0…2] lebih besar dari L[3].
Dan seterusnya
Langkah N-1
L[N-1] harus dicari tempatnya yan tepat pada L[0….N-1] dengan cara menggeser elemen
L[0….N-2] ke kanan bila L[0….N-2] lebih besar dari L[N-1]
Misalnya posisi yang dipindahkan adalah K maka sisipkan L[N-1] pada L[K]
Contoh:
Tinjau larik dengan n=6 elemen dibawah ini belum terurut.Larik ini akan diurut secara menaik
29 27 10 8 76 21
Iterasi ke-0;elemen L[0] dianggap sudah terurut
29 27 10 8 76 21
Iterasi ke-1;cari posisi yang tepat untuk L[1] pada L[0…1]
27 29 10 8 76 21
iterasi ke-2 ; cari posisi yang tepat untuk L[2] pada L[0…2]
10 27 29 8 76 21
Iterasi ke-3 ; cari posisi yang tepat untuk L[3] pada L[0…3]
8 10 27 29 76 21
Iterasi ke-4 ; cari posisi yang tepat untuk L[4] pada L[0….4]
8 10 27 29 76 21
Iterasi ke-5 ; cari posisi yang tepat untuk L[5] pada L[0….5]
8 10 21 27 29 76
III. Metode seleksi(selection sort)
Algoritma selection sort termasuk algoritma sorting internal.Semua data yang akan
diurutkan harus berada dalam memori computer(biasanya dalam bentuk struktur data Array
of structure).Pada setiap putarannya diseleksi bilangan terkecil lalu ditempatkan pada posisi
yang semestinya,dibandingkan dengan algoritma bubble sort,frekuensi pertukaran data
selection sort lebih sedikat.
Cara kerja metode seleksi didasarkan pada pencarian elemen dengan nilai
terkecil,kemudian dilakukan penukaran ke elemen ke-1.Secara singkat metode ini bisa
dijelaskan sebagai berikut:
a. Pada langkah pertama dicari data terkecil dari data pertama sampai data
terakhir,kemudian data terkecil tersebut ditukarkan dengan data pertama.Dengan
demikian,data pertama sekarang mempunyai nilai paling kecil dibandingkan data
yang lain.
b. Pada langkah kedua data terkecil kita cari mulai dari data kedua sampai data
terakhir.Data terkecil yang kita peroleh ditukar dengan data kedua,demikian
seterusnya sampai seluruh vector dalam keadaan terurut.
Untuk lebih memperjelas proses pengurutan dengan metode seleksi berikut ini:
Iterasi ke A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9]
I=1,lok=3 23 45 12 24 56 34 27 23 16
I=2,lok=9 12 45 23 24 56 34 27 23 16
I=3,lok=3 12 16 23 24 56 34 27 23 45
I=4,lok=8 12 16 23 24 56 34 27 23 45
I=5,lok=8 12 16 23 23 56 34 27 24 45
I=6,lok=7 12 16 23 23 24 34 27 56 45
I=7,lok=7 12 16 23 23 24 27 34 56 45
I=8,lok=9 12 16 23 23 24 27 34 56 45
akhir 12 16 23 23 24 27 34 45 56
glangsung,dalam setiap langkah pada metode penyisipan langsung kita hanya memperhatikan
satu elemen dari sumber dan semua elemen dari larik tujuan untuk menentukan posisinya
yang tepat,sehingga sering disebut one source multiple destinations.Dalam metode seleksi
terjadi sebaliknya yakni kita memperhatikan semua elemen dalam larik sumber untuk
menentukan elemen terkecil yang akan kita tempatkan pada tujuan,sehingga sering disebut
multiple source one destination.
Kelebihan dan kekurangan selection sort:
Kompleksitas selection sort relative lebih kecil
Mudah menggabungkan kembali,tetapi sulit membagi masalah
Membutuhkan metode tambahan
Contoh lain selection sort : 60,70,30,50,40,20
Iterasi ke A[1] A[2] A[3] A[4] A[5] A[6]
I=1,lok=6 60 70 30 50 40 20
I=2,lok=3 20 70 30 50 40 60
I=3,lok=5 20 30 70 50 40 60
I=4,lok=4 20 30 40 50 70 60
I=5,lok=6 20 30 40 50 70 60
akhir 20 30 40 50 60 70
IV. Bubble sort
Bubble sort sering dikenal dengan metode gelembung adalah metode yang dilakukan dengan
cara penukaran dua buah elemen yang letaknya berdekatan dengan cara ditukarkan untuk
mencapai keadaan urut yang diinginkan.
o Dengan selection sort,kita membuat satu penukaran pada setiap iterasi
o Bubble sort meningkatkan kinerja pengurutan dengan membuat lebih dari satu
penukaran setiap iterasi.
o Ide dasar dibalik bubble sort adalah membuat sepasang perbandingan dan
menukarkan posisi dari pasangan data tersebut jika mereka belum terurut
o Bubble sort mudah dipahami tapi tidak efisien karena setiap looping selalu ada
penukaran
o Bubble sort sudah tidak dipergunakan lagi
Contoh bubble sort:
1) Urutkan : 35,17,32,61,2,37
Langkah 1 : 35 17 32 61 2 37
Swap
Langkah 2 : 17 35 32 61 2 37
Swap
Langkah 3 : 17 32 35 61 2 37
OK
Langkah 4 : 17 32 35 61 2 37
Swap
Langkah 5 : 17 32 35 2 61 37
Swap
Iterasi 1 : 17 32 35 2 37 61
Lanjutkan iterasi
Iterasi 1 : 17 32 35 2 37 61
OK OK Swap
Iterasi 2 : 17 32 2 35 37 61
OK Swap
Iterasi 3 : 17 2 32 35 37 61
Swap
Iterasi 4 : 2 17 32 35 37 61
OK
Iterasi 5 : 2 17 32 35 37 61
2) Urutkan : 29,27,10,8,76
Langkah 1 : 29 27 10 8 76
Swap
Langkah 2 : 27 29 10 8 76
Swap
Langkah 3 : 27 10 29 8 76
Swap
Langkah 4 : 27 10 8 29 76
OK
Iterasi 1 : 27 10 8 29 76
Lanjutkan iterasi
Iterasi 1 : 27 10 8 29 76
Swap
Iterasi 2 : 10 27 8 29 76
Swap
Iterasi 3 : 10 8 27 29 76
Swap
Iterasi 4 : 8 10 27 29 76
V. Metode Quick Sort
Algoritma yang menggunakan metode devide dan qonquen yaitu dengan mempartisi
tabel dengan acuan elemen tabel yang dijadikan sebagai pusat.
Algoritma guik sort:
Devide,jika S memiliki dua elemen,pilih salah satu elemen x dan S yang kita buat
sebagai pivot,biasanya yang dipilih sebagai pivot adalah elemen terakhir dalam
S.Pindahkan smua elemen dalam S kedalam tiga larik berikut:
1. L adalah menyimpan semua elemen dalam S yang kecil dari x (>x)
2. E adalah menyimpan semua elemen dalam S yang sama dengan x (=x)
3. G adalah menyimpan semua elemen dalam S yang besar dari x (>x)
Recur,secara recur sif urutkan larik L dan G
Qonquer,kembalikan elemen-elemen kedalam S secara terurut dengan terlebih dahulu
menyisipkan elemen-elemen L,kemudian E dan diikuti dengan G.
Contoh :
Terdapat larik : 85 24 63 45 17 31 96 50
Terlalu sulit mengurutkan data tersebut dalam satu langkah
Pilih 50 sebagai pivot
Bagi tiga elemen :
L= <x 24 45 17 31
E= =x 50
G= >x 85 63 96
Larik = 24 45 17 31
Pivot = 31
L=24 17
E=31
G=45
Larik=24 17
Pivot=17
L=-
E=17 L E G
G=24 - 17 24
Maka larik= L E G L
17 24 31 45 Qonquer
1
Larik=85 63 96
Pivot=96
L=86 63
E=9
G=-
Larik=85 63
Pivot=63
L=-
E=63 L E G
G=85 - 63 85
Maka larik= L E G G
63 85 96 - Qonquer 2
Maka Qonquer= L E G
17 24 31 45 50 63 85 96
BAB II
HEAP
Heap adalah sebuah binary tree dengan ketentuan sebagai berikut:
Tree harus complete binary tree
o Semua level tree mempunyai simpul maksimum kecuali pada level akhir
o Pada level terakhir,node tersusun dari kiri ke kana tampa ada yang dilewati
Perbandingan nilai suatu node dengan nilai node child-nya mempunyai ketentuan
berdasarkan jenis heap,diantaranya:
o Max Heap mempunyai ketentuan bahwa nilai suatu node lebih besar atau sama
dengan(>=)dari nilai child-nya.
o Min Heap mempunyai ketentuan bahwa nilai suatu node lebih kecil atau sama
dengan(<=)dari nilai child-nya
Contoh:
Contoh penggunaan heap adalah pada persoalan yang mempertahankan antrian
prioritas(priority queu).Dalam antrian prioritas,elemen yang dihapus adalah elemen yang
mempunyai prioritas terbesar(atau terkecil,tergantung keperluan),dan elemen inilah yang
selalu terletak di akar(root).Suatu heap dapat sewaktu-waktu berubah baik itu penambahan
elemen(insert)dan penghapusan elemen(delete).
Ada beberapa operasi yang dapat terjadi di sebuah heap,yaitu;
1. Reorganisasi Heap(mengatur ulang heap)
2. Membentuk Heap(mengatur binary tree agar menjadi heap)
3. Penyisipan Heap(menyisipan node baru)
4. Penghapusan Heap(menghapus node root)
5. Pengurutan Heap(Heap Sort)
Reorganisasi Heap
Algoritma heap semuanya bekerja dengan prinsip bahwa modifikasi nilai prioritas
pada suatu simpul dengan melanggar kondisi heap.Bila kondisi heap dilanggar,maka heap
harus diorganisasi kembali.
Sebagai contoh kita gunakan pada heap maksimum.Ketika nilapi/prioritas suatu node
merubah,maka ada dua kemungkinan yang terjadi:
Nilai prioritas node bertambah sehingga nilai prioritasnya lebih besar dari
parentnya,maka lakukan langkah sbb:
Tukarkan nilai prioritas node tersebut dengan nilai prioritas parentnya
Ulangi langkah diatas,sampai ditemukan posisi yang tepat
Proses ini disebut dengan proses sift-up.
Contoh node dengan prioritas 5 menjadi 10
Kondisi awal
Node dengan prioritas 5 menjadi 10
Karena prioritas node lebih besar dari pada prioritas parent,maka tukarkan posisinya.
Karena prioritas node lebih besar dari pada prioritas parent,maka tukarkan posisinya.
Karena prioritas node lebih besar dari pada prioritas parent,maka tukarkan posisinya.
Nilai prioritas node berkurang sehingga menjadi lebih kecil dari prioritas diantara
node childnya,makayang harus dilakukan adalah:
Tukarkan nilai prioritas simpul yang berubah dengan nilai prioritas
dari child yang mempunyai prioritas terbesar
Ulangi langkah di atas sampai ditemukan posisi yang tepat.
Proses ini disebut dengan sift-down.
Contoh:Node dengan prioritas 9 menjadi 5
Kondisi awal
Prioritas node lebih kecil dari salah satu child,ssehinnga tukarkan
Prioritas node lebih kecil dari salah satu child,ssehinnga tukarkan
Prioritas node lebih kecil dari salah satu child,ssehinnga tukarkan
Pembentukan HeapPada mulanya jika suatu complete binary tree memiliki prioritas antrian secara acak,maka langkah yang harus dilakukan agar binary tree dapat dissebut sebagai heap adalah dengan melakukan proses sigt-down dari node bernomor tengah (banyak node/2 atau N/2),menurun sampai pertama.Kndisi awal
Representasi array:
5 7 1 3 2 6 8 4 9 1 2 3 4 5 6 7 8 9
N=9 , tengah=N/2=9/2=4
Lakukan reorganisasi heap pada node 4 sampai 1
Reorganisasi pada node 4 sehingga tree menjadi
Representasi array:
5 7 1 9 2 6 8 4 3 1 2 3 4 5 6 7 8 9
Reorganisasi pada node 3 sehingga tree menjadi
Representasi array:
5 7 8 9 2 6 1 4 3 1 2 3 4 5 6 7 8 9
Reorganisasi pada node 2 sehingga tree menjadi
Representasi array:
5 9 8 7 2 6 1 4 3 1 2 3 4 5 6 7 8 9
Reorganisasi pada node 1 , karena sudah sesuai dengan aturan heap maka node 1 tidak berubah
Representasi array:
9 7 8 5 2 6 1 4 3 1 2 3 4 5 6 7 8 9
Penyisipan HeapPenyisipan heap dilakukan ketika ada sebuah elemen baru diinsertkan.Algoritma untuk penyisipan data adalah:
Simpan elemen baru tersebut setelah data paling akhir (tree dengan level paling bawah dan pada posisi sebelah kanan dari data terakhir atau jika level telah penuh , maka simpan data baru tersebut dalam level baru).
Lakukan reorganisasi heap pada node baru tersebut.Proses yang biasanya dipakai adalah proses sift up
Banyak simpul ditambah 1Contoh: Penyisipan heap dengan prioritas/nilai 8Kondisi awal:Banyak Node (N):9
Sisipkan di posisi setelah data terakhir , dan banyak node (N) ditambah dengan 1 menjadi 10
Reorganisasi pada node baru (10)
Reorganisasi pada node 5 (karena ada perubahan prioritas) , tukarkan dengan node 7 (node2).
Karena posisi node 2 telah tepat , maka tidak ada reorganisasi sehingga proses penyisipan pun selesai.
Penghapusan HeapProses penghapusan dilakukan ketika root suatu tree diambil.Algoritma penghapusan heap adalah:
Ambil nilai heap Ambil nilai prioritas pada node terakhir , dan dipakai sebagai prioritas root Lakukan proses reorganisasi heap pada root.Umumnya proses yang dilakukan adalah
proses sift down. Banyak simpul dikurang 1.
Contoh: hapus elemen heap.Elemen yang diambil adalah 10 (root).N:10
Ambil nilai root , kemudian ganti dengan prioritas simpul terakhir (simpul 10 dengan prioritas 2).sehingga tree menjadi:
Dan banyak simpul (N) dikurang 1 menjadi 9
Kemudian lakukan reorganisasi heap dengan proses sift down pada posisi 1 (root) sehingga tree menjadi:
Karena terjadi pertukaran dengan node 3,maka node 3 direorganisasi kembali sehingga tree menjadi:
Karena heap telah benar , maka proses penyisipan selesai.
Pengurutan Heap(Heap Sort)Pengurutan heap dapat dilakukan dengan algoritma seperti dibawah ini:
Buat heap maksimum Jika N lebih besar dari 1 maka tukarkan nilai/prioritas root dengan prioritas simpul
terakhir (simpul ke-N) tetapi jika N sama dengan 1 maka ambil nilai yang ada di root. Kemudian nilai banyak simpul (N) dikurangi 1 Jika N>1 maka lakukan reorganisasi heap yaitu proses sift down terhadap root Lakukan langkah 2 sampai 4 sampai simpul habis (N=0).
Contoh:
Data yang akan diurutkan adalah: 20,11,21,23,17,9,5
Dari data diatas , dapat disusun tree seperti dibawah ini:
Langkah pertama adalah mengkonversi tree diatas menjadi sebuah heapKondisi awalN=7
Representasi array:
20 11 21 23 17 9 5 1 2 3 4 5 6 7
Lakukan reorganisasi heap untuk node N/2 (7/2) yaitu 3 sampai node 1.
Node 3
Child sesuai sehingga tidak ada sift down
Representasi array:
20 11 21 23 17 9 5 1 2 3 4 5 6 7
Node 2
Lakukan reorganisasi sift down pada node 2.Karena child dari node 2 ada yang memiliki prioritas lebih besar yaitu 23 dan 17.Tukarkan prioritas node 2 dengan child yang memiliki prioritas paing besar (node 4). Sehingga tree menjadi:
Representasi array:
20 23 21 11 17 9 5 1 2 3 4 5 6 7
Node 1
Lakukan sift down karena nilai prioritas child lebih besar dari prioritas node 1.Tukarkan prioritas node 1 dengan prioritas node yang memiliki prioritas terbesar (node 2).Sehingga tree menjadi:
Representasi array:
23 20 21 11 17 9 5 1 2 3 4 5 6 7
Tukarkan nilai simpul root (1) dengan nilai simpul terakhir (N=7) sehingga tree menjadi seperti dibawah ini:
Representasi array:
5 20 21 11 17 9 23 1 2 3 4 5 6 7
Banyak elemen (N) dikurangi 1 menjadi 7-1=6 elemen.simpul dengan nomor diatas N abaikan karena sudah tidak termasuk tree lagi
Reorganisasikan sift down terhadap node root (1) sehingga tree menjadi:
Representasi array:
21 20 9 11 17 5 23 1 2 3 4 5 6 7
Tukarkan nilai simpul root (1) dengan nilai simpul terakhir (N=6) sehingga tree menjadi seperti dibawah ini:
Representasi array:
5 20 9 11 17 21 23 1 2 3 4 5 6 7
Reorganisasi sift-down terhadap node root (1) sehingga tree menjadi:
Representasi array:
20 17 9 11 5 21 23
1 2 3 4 5 6 7
Tukarkan nilai simpul root (1) dengan nilai simpul terakhir (N=5) sehingga tree menjadi seperti di bawah ini:
Representasi array:
5 17 9 11 20 21 23 1 2 3 4 5 6 7
Reorganisasi sift-down terhadap node root (1) ssehingga tree menjadi:
Representasi array:
17 11 9 5 20 21 23 1 2 3 4 5 6 7
Tukarkan nilai simpul root (1) dengan nilai simpul terakhir (N=4)sehingga tree menjadi seperti di bawah ini:
Representasi array:
5 11 9 17 20 21 23 1 2 3 4 5 6 7
Reorganisasi sift-down terhadap node root (1) sehingga tree menjadi:
Representasi array:
5 11 9 17 20 21 23 1 2 3 4 5 6 7
Tukarkan nilai node root dengan nilai node ke-N sehingga tree menjadi:
Representasi array:
9 5 11 17 20 21 23 1 2 3 4 5 6 7
Reorganisasi sift-down terhadap node root (1) sehingga tree menjadi sebagai berikut:Karena node root telah sesuai ketentuan heap pada proses Reorganisasi tidak dilakukan sehingga tree tetap
9 5 11 17 20 21 23 1 2 3 4 5 6 7
Tukarkan nilai root dengan nilai pada node ke-N (N=2).Sehingga tree menjadi:
Representasi array:
5 9 11 17 20 21 23 1 2 3 4 5 6 7
Karena N sama dengan 1 maka tidak perlu ada reorganisasi Karena N sama dengan 1 maka ambil data yang ada di root sehingga tree menjadi kosong ,
seperti di bawah ini:
Representasi array:
5 9 11 17 20 21 23 1 2 3 4 5 6 7
Karena N telah mencapai 0 maka pengurutan selesai.