Otomatisasi Indeks Ebook Algorithms Dengan Menggunakan Algoritma Knuth-Morris- Pratt Dan Algoritma Quicksort

BAB 2

LANDASAN TEORI

2.1 Desain Analisis Algoritma

Kovelamudi (2013) menyatakan algoritma dapat di definisikan sebagai prosedur
komputasi yang mengambil beberapa nilai atau set nilai-nilai sebagai output. Ini adalah
tahap-tahap komputasi yang akan mengubah input menjadi output. Dan merupakan alat
untuk untuk memecahkan berbagai permasalahan di dalam komputer. Algoritma harus
memiliki kriteria sebagai berikut :
Input

: nilai 0 atau lebih disisipkan.

Output

: setidaknya akan menghasilkan satu kuantitas.

Kepastian


: setiap instruksi jelas dan tidak ambigu.

Finiteness

:Jika kita menelusuri petunjuk dari sebuah algoritma, maka untuk
semua kasus, algoritma akan berhenti setelah memasuki langkah
terakhir.

Efektivitas

: Setiap instruksi harus dimulai dari awal sehingga dapat diproses.

Sebuah program adalah ekspresi dari algoritma dalam bahasa pemrograman. Kumpulan
dari instruksi, yang mana komputer akan mengikuti instruksi untuk memecahkan sebuah
masalah.

Sekali sebuah algoritma diberikan kepada sebuah permasalahan dan dijamin akan
memberikan hasil yang diharapkan, maka langkah penting selanjutnya adalah
menentukan besar biaya yang diperlukan algoritma tersebut untuk memperoleh hasil itu.
Proses inilah yang disebut dengan analisis algoritma (Weiss.M.A, 1996). Maksud

dilakukannya analisis algoritma (Horowitz & Sahni, 1978) adalah untuk:
1. Memenuhi aktivitas intelektual.
2. Meramalkan suatu hal yang akan terjadi atau yang akan didapat dari
algoritma tersebut.
3. Mengetahui efektifitas suatu algoritma dibanding dengan algoritma yang lain
untuk persoalan yang sama.
Universitas Sumatera Utara

2.2 Jenis-jenis Algoritma

Jenis-jenis algoritma terdapat beragam klasifikasi algoritma dan setiap klasifikasi
mempunyai alasan tersendiri. Salah satu cara untuk melakukan klasifikasi jenis-jenis
algoritma adalah dengan memperhatikan paradigma dan metode yang digunakan untuk
mendesain algoritma tersebut. Beberapa paradigma yang digunakan dalam menyusun
suatu algoritma akan dipaparkan dibagian ini. Masing-masing paradigma dapat
digunakan dalam banyak algoritma yang berbeda (Kovelamudi, 2013).

2.2.1

Divide and Conquer


Kovelamudi (2013) paradigma untuk membagi suatu permasalahan besar menjadi
permasalahan-permasalahan yang lebih kecil. Pembagian masalah ini dilakukan terus
menerus sampai ditemukan bagian masalah kecil yang mudah untuk dipecahkan.
Singkatnya menyelesaikan keseluruhan masalah dengan membagi masalah besar dan
kemudian memecahkan permasalahan-permasalahan kecil yang terbentuk.

2.2.2

Dynamic Programming

Kovelamudi (2013) paradigma pemrograman dinamik akan sesuai jika digunakan pada
suatu masalah yang mengandung sub-struktur yang optimal dan mengandung beberapa
bagian permasalahan yang tumpang tindih. Paradigma ini sekilas terlihat mirip dengan
paradigma Divide and Conquer, sama-sama mencoba untuk membagi permasalahan
menjadi sub permasalahan yang lebih kecil, tapi secara intrinsik ada perbedaan dari
karakter permasalahan yang dihadapi

2.2.3


Greedy Algorithm

Kovelamudi (2013) sebuah algoritma serakah mirip dengan sebuah pemrograman
dinamik, bedanya jawaban dari submasalah tidak perlu diketahui dalam setiap tahap; dan
menggunakan pilihan “serakah” apa yang dilihat terbaik pada saat itu. Adapun jenisjenis algoritma yang lain adalah :

Universitas Sumatera Utara

1. Bahasa Semu (pseudocode).
Yaitu dengan menggunakan bahasa sehari-hari, tetapi harus jelas dan struktur.
2. DiagramAlir/Alur (Flowchart).
Yaitu dengan membuat suatu penulisan atau penyajian algoritma berupa diagram
yang menggambarkan susunan alur logika dari suatu permasalahan.

2.3

Algoritma Quicksort

Quicksort adalah algoritma pengurutan yang dikembangkan oleh Tony Hoare. Algoritma
Quicksort melakukan perbandingan sebayak n log n untuk mengurutkan data sebanyak

n. kondisi paling buruk dari jumlah perbandingan adalah n2. Secara praktis, Quicksort
beroperasi lebih cepat dibanding algoritma dengan kompleksitas n logn n lainnya.
Sareen (2013) menyatakan bahwa keuntungan dari penggunaan algoritma Quicksort
adalah cepat dan efisien, sedangkan kerugian yang dapat dialami adalah menghasilkan
performa yang buruk apabila data sudah terurut. Berikut adalah sarat dalam melakukan
pengurutan ataupun penyortiran algoritma Quicksort;
1. Semua elemen yang ada disebelah kiri pivot harus lebih kecil atau sama
dengan pivot, dan semua elemen disebelah kanan pivot harus lebih besar atau
sama dengan pivot.
2. Pivot yang sudah diurutkan disusun berdasarkan urutan dari array/list.
3. Conquer yaitu disusun menjadi 2 sub array secara rekursif.
4. Kemudian digabungkan.
5. Permasalahannya yaitu sorting kunci n pada yang bukan urutan penurunan
6.

Inputkan bilangan integer n

positive, array dari kunci m yang sudah

diindekskan dari pertama hingga data ke-n.

7. Output, array m yang berisi kunci yang tidak menurun
8. Quicksort(rendah, tinggi)
1. Tinggi> rendah
2. kemudian partisi (rendah, tinggi, pivotIndex)
3. Quicksort (rendah, pivotIndex -1)
4. Quicksort (pivotIndex 1, tinggi)

Partisi array untuk partisi Quicksort (rendah, tinggi, poros)
Universitas Sumatera Utara

1. pivotitem = S [rendah]
2. k=low
3. for j = low +1 tinggi
4. lakukan if S [ j ] < pivot item
5. Kemudian k = k + 1
6. Ganti S [ j ] dan m [ k ]
7. pivot = k
8. Ganti S[low] dan S[pivot]
Quicksort adalah algoritma sorting acak berdasarkan paradigma Divide and Conquer
Divide: memilih elemen acak dari x (pivot) dan partisi m ke dalam

L elements lebih kecil dari x
E elements sama dengan x
G elements lebih besar dari x
Recursive: sorting L dan G
Conquer: gabungkan L, E dan G

2.3.1 Metode Rekursif dalam Algoritma Quicksort

Quicksort dengan pendekatan rekursif tidak membutuhkan struktur data khusus, seperti
stack, karena setiap kelompok akan berjalan secara rekursif. Robert Sedgewick & Kevin
Wayne (2011) menyatakan bahwa terdapat dua bagian pada pendekatan rekursif, yaitu
sort

dan

partisi.

Partisi

merupakan


bagian

yang

melakukan

tugas

untuk

mengelompokkan data, sedangkan sort adalah bagian yang melakukan proses rekursif.
Semakin besar jumlah data, maka kompleksitas ruang suatu algoritma rekursif akan
semakin besar.

Sedgewick & Wayne

(2011) juga menyatakan bahwa terdapat tiga kasus

kompleksitas waktu pada penggunaan algoritma Quicksort. Pertama adalah kasus

terbaik, yaitu ketika proporsi data yang ingin diurutkan seimbang. Seimbang adalah
keadaan di mana kelompok kiri dan kelompok kanan memiliki jumlah anggota
kelompok yang relatif sama. Biasanya kasus ini terjadi jika memakai pivot berupa nilai
median. Kasus terbaik algoritma Quicksort memiliki kompleksitas n log n. Kedua adalah
kasus terburuk, yaitu ketika semua elemen, kecuali pivot, hanya berada di salah satu
Universitas Sumatera Utara

kelompok sehingga kelompok lainnya menjadi kosong. Hal ini akan menyebabkan
terjadinya banyak pengulangan pada saat pengurutan data. Nilai pivot pada kasus ini
biasanya adalah nilai maksimum atau minimum dari kelompok data yang ingin
diurutkan. Kompleksitas dari kasus terburuk ini adalah ½ n2. Kondisi yang ketiga adalah
kasus rata-rata, yaitu ketika pivot tidak terpilih secara acak dari data. Kompleksitas dari
kasus rata-rata sama dengan kasus terbaik adalah 1.39 n log n.

2.3.2 Implementasi Quicksort

Implementasi Quicksort ( Abdul. K, 2012.)
Algoritma:
Subrutin Quicksort(L,p,r)
Jika p < r MAKA

q

partisi (L,p,r)

Quicksort(L,p,q)
Quicksort(L,q+1,r)
Akhir-jika
Akhir – subrutin
Untuk mengurutkan isi keseluruhan Larik L, diperlukan pemanggilan seperti berikut:
Quicksort(L,O, jumlah-elemen(L)-1)
Subrutin partisi sendiri seperti berikut:
Subrutin partisi(L,p,r)
x

L[p]

i

p


j

r

Ulang selama benar
Ulang selama L[j] > x
j

j -1

Akhir-ulang
Ulang selama L[j] < x
i

i–1

Akhir-ulang
Jika i < j maka
Universitas Sumatera Utara

// Tukarkan L[i] dengan L[j]
tmp

L[i]

L[i]

L[j]

L[j]

tmp

Sebaliknya
Nilai – balik J
Akhir-jika
Akhir – ulang
Akhir - subrutin

Abdul (2012) Pertama-tama x

L[p] dipakai untuk membagi larik L[p..r]

menjadi 2 bagian (disebut pemartisian) dengan kondisi semua elemen bagian kiri selalu
lebih kecil daripada nilai elemen pivot dan nilai semua elemen pivot. Pemartisian
dilakukan dengan menggunakan variabel i dan j. Dalam hal ini i berupa penunjuk yang
bergerak turun.Variabel i dinaikkan secara terus menerus sehingga L[i] >= elemen pivot
dan variabel j diturunkan secara terus-menerus sehingga L[j] = j. Pada keadaan seperti ini nilai balik subrutin
partisi berupa j. Seperti pada gambar 2.1 dibawah :

Universitas Sumatera Utara

2

0

1

6

2

2
4

3

4

5

6

7

3

7

5

4

8

Pivot

i
6

L[0]yaitu

6

j
2

4

3

7

5

4

Setelah i digerakkan ke

8

kanan sampai L[i] >= 6
i

j

dan setelah j digerakkan
ke kiri sampai L[j]=6
i
4

2

4

3

5

j

Ke kiri sampai L[j]= 6
j

i

dan setelah j digerakkan
Ke kiri sampai L[j]