TEORI ALGORITMA
Dosen Pengampu : Zuhri Halim, M.Kom
Analogi :
●
Jika seseorang ingin mengirim surat kepada kenalannya di tempat lain, langkah yang harus
dilakukan adalah:
Langkah :
●
Menulis surat
●
Surat dimasukkan ke dalam amplop tertutup
●
Amplop dikasih alamat penerima dan pengirim
●
Amplop ditempeli perangko secukupnya.
●
Pergi ke Kantor Pos terdekat untuk mengirimkannya
Apa Itu Algoritma ?
● Definisi :
○ Urutan langkah-langkah untuk memecahkan
masalah yang disusun secara sistematis dan logis.
○ Kamus Besar Bahasa Indonesia:
Algoritma adalah urutan logis pengambilan putusan untuk pemecahan masalah.
● Algoritma dibutuhkan untuk memerintah
komputer mengambil langkah-langkah
tertentu dalam menyelesaikan masalah.
Apa Itu Program/Pemrograman?
Definisi
● Kumpulan instruksi-instruksi tersendiri yang biasanya disebut source code
yang dibuat oleh programmer (pembuat program).
● Program : Realisasi dari Algoritma.
Program = Algoritma + Bahasa
Mengapa Algoritma ?
● Pembuatan atau penulisan algoritma tidak tergantung pada bahasa pemrograman
manapun.
● Notasi algoritma dapat diterjemahkan ke dalam berbagai bahasa pemrograman.
● Apapun bahasa pemrogramannya, output yang akan dikeluarkan sama karena
algoritmanya sama.
Syarat Algoritma Baik?
● Tingkat kepercayaannya tinggi (realibility)
Hasil yang diperoleh dari proses harus berakurasi tinggi dan benar.
● Pemrosesan yang efisien (cost rendah)
Proses harus diselesaikan secepat mungkin dan frekuensi kalkulasi yang sependek mungkin.
● Sifatnya general
Bukan sesuatu yang hanya untuk menyelesaikan satu
kasus saja, tapi juga untuk kasus lain yang lebih general.
● Bisa dikembangkan (expandable)
Haruslah sesuatu yang dapat kita kembangkan lebih jauh berdasarkan perubahan requirement yang ada.
● Mudah dimengerti
Siapapun yang melihat, dia akan bisa memahami
algoritma Anda. Susah dimengertinya suatu program akan membuat susah di-maintenance (kelola).
● Portabilitas yang tinggi (portability)
Bisa dengan mudah diimplementasikan di berbagai platform komputer.
● Precise (tepat, betul, teliti)
● Efektif
Tidak boleh ada instruksi yang tidak mungkin dikerjakan boleh pemroses yang akan menjalankannya.
● Harus terminate
Jalannya algoritma harus ada kriteria berhenti.
● Output yang dihasilkan tepat.
Langkah Pembuatan Program
Mendefinisikan masalah
a. Kondisi awal, yaitu input yang tersedia.
b. Kondisi akhir, yaitu output yang diinginkan.
c. Data lain yang tersedia.
d. Operator yang tersedia.
e. Syarat atau kendala yang harus dipenuhi.
Langkah Pembuatan Program
Buat Algoritma dan Struktur Cara Penyelesaian
• Jika masalahnya kompleks, maka dibagi ke
dalam modul-modul
Langkah Pembuatan Program
Menulis program
●Pilihlah bahasa yang mudah dipelajari, mudah digunakan, dan lebih baik lagi jika sudah dikuasai, memiliki tingkat kompatibilitas tinggi dengan
perangkat keras dan platform lainnya.
Langkah Pembuatan Program
Mencari Kesalahan
a. Kesalahan sintaks (penulisan program).
b. Kesalahan pelaksanaan: semantik, logika, dan
ketelitian..
Langkah Pembuatan Program
● Uji dan Verifikasi Program
● Dokumentasi Program
● Pemeliharaan Program
STRUKTUR PENULISAN ALGORITMA
Setiap Algoritma akan selalu terdiri dari tiga bagian yaitu :
●Judul (Header)
●Kamus
●Algoritma
Header (Judul)
Judul adalah bagian teks algoritma yang digunakan sebagai tempat mendefinisikan nama dengan menentukan apakah teks
tersebut adalah program, prosedur, fungsi.
Kamus (Deklarasi)
Kamus adalah bagian teks algoritma sebagai tempat untuk mendefinisikan :
●Nama type
●Nama konstanta
●Nama variabel
●Nama fungsi
●Nama prosedur.
Kamus (Deklarasi)
Algoritma (Deskripsi)
Algoritma adalah bagian inti dari suatu algoritma yang berisi instruksi atau
pemanggilan aksi yang telah didefinisikan.
PENYAJIAN ALGORITMA
Bentuk penyajian untuk algoritma dibagi menjadi 3 (tiga) bentuk penyajian, yaitu :
● Algoritma dengan struktur Bahasa Indonesia
● Algoritma dengan Pseudocode
● Algoritma dengan Flowchart
Struktur Bahasa Indonesia
Sifat: Umum
● Tidak menggunakan simbol atau sintaks dari suatu bahasa pemrograman.
● Tidak tergantung pada suatu bahasa pemrograman.
● Notasi-notasinya dapat digunakan untuk seluruh
bahasa manapun.
Struktur Bahasa Indonesia
Contoh : Menghitung rata-rata tiga buah data Algoritma dengan struktur bahasa Indonesia :
● 1) Baca bilangan a, b, dan c
● 2)Jumlahkan ketiga bilangan tersebut
● 3)Bagi jumlah tersebut dengan 3
● 4)Tulis hasilnya
Pseudo-Code
Penyajian algoritma dengan pseudocode berarti menggunakan kode yang mirip
dengan kode pemrograman yang
sebenarnya. Pseudocode lebih rinci dari
English/Indonesia Structure.
Pseudo-Code
Contoh (1) : Menghitung rata-rata tiga buah data
Algoritma dengan struktur pseudocode :
●1) input (a, b, c)
●2) Jml = a+b+c
●3) Rerata = Jml/3
●4) Output (Rerata)
Flowchart
Flowchart adalah penggambaran secara grafik dari langkah-langkah dan urut-urutan prosedur dari
suatu program. Flowchart menolong analis dan
programmer untuk memecahkan masalah kedalam segmen-segmen yang lebih kecil dan menolong
dalam menganalisis alternatif-alternatif lain dalam
pengoperasian.
Flowchart
Kegunaan:
▪Untuk mendesain program
▪Untuk merepresentasikan program Maka, flowchartharus dapat
Merepresentasikankomponen-komponen dalam
bahasa pemrograman
Mengapa Flowchart
a. Relationship
Flowchart dapat memberikan gambaran yang efektif, jelas, dan ringkas tentang prosedur logic. Teknik penyajian yang bersifat grafis jelas akan lebih baik
daripada uraian-uraian yang bersifat teks
khususnya dalam menyajikan logikalogika
yang bersifat kompleks.
Mengapa Flowchart
b. Analysis
Dengan adanya pengungkapan yang jelas dalam model atau chart, maka para
pembaca dapat dengan mudah melihat
permasalahan atau memfokuskan perhatian
pada area-area tertentu sistem informasi.
Mengapa Flowchart
c. Communication
Karena simbol-simbol yang digunakan
mengikuti suatu standar tertentu yang sudah
diakui secara umum, maka flowchart dapat
merupakan alat bantu yang sangat efektif
dalam mengkomunikasikan logika suatu
masalah atau dalam mendokumentasikan
logika tersebut.
Lambang
Lambang (2)
Lambang (3)
Lambang (4)
Lambang (5)
Contoh Flowchart
●
Problem:
Menghitung
Luaspersegipanjang Algoritma:
1.Masukkanpanjang(p) 2.Masukkanlebar(l)
3.Hitungluas(L),
yaitupanjangkali lebar
4.Cetakluas(L)
Contoh Flowchart
●
Problem:
Menentukan
Bilangan ganjil atau
Genap
STRUKTUR DASAR ALGORITMA
Struktur dasar algoritma :
1. Struktur Runtunan (Sequence Proses)
2. Struktur Pemilihan (Selection Proses)
3. Struktur Pengulangan (Iteration Proses)
Struktur Runtunan
Sebuah runtunan terdiri dari satu atau lebih
‘instruksi’. Tiap-tiap instruksi dilaksanakan secara berurutan sesuai dengan urutan
penulisannya; sebuah instruksi baru bisa
dilaksanakan setelah instruksi sebelumnya
selesai dilaksanakan.
Struktur Runtunan
Struktur Pemilihan
Pada struktur ini, jika kondisi terpenuhi maka salah satu aksi akan dilaksanakan dan aksi yang ke dua diabaikan.
Kondisi adalah persyaratan yang dapat dinilai benar atau salah sehingga akan memunculkan ‘aksi’ yang berbeda dengan ‘kondisi’ yang berbeda.
Struktur Pemilihan
Notasi algoritmik : if Syarat then
Aksi {True}
endif {False}
Struktur Pemilihan
Notasi Algoritma, IF syarat THEN
aksi-1 {true}
ELSE
aksi-2 {false}
ENDIF
Struktur Pemilihan
CONTOH :
Menentukan bilangan terbesar diantara 3 bilangan:
‘if’ x > y ‘then’
‘if’ x > z ‘then’
tulis x sebagai bilangan terbesar
‘else’
tulis z sebagai bilangan terbesar
‘else’
‘if’ y > z ‘then’
tulis y sebagai bilangan terbesar
‘else’
tulis z sebagai bilangan terbesar
Struktur Pengulangan
Digunakan untuk program yang pernyataannya akan
dieksekusi berulang-ulang. Instruksi dikerjakan selama
memenuhi suatu kondisi tertentu. Jika syarat (kondisi)
masih terpenuhi maka pernyataan (aksi) akan terus
dilakukan secara berulang.
Struktur Pemilihan
For-Next
For var=awal to akhir
@@@@@.
instruksi-instruksi
@@@@@..
Next var
Struktur Pengulangan
While - do
Bentuk umum : While {kondisi} do
@@@@..
instruksi-instruksi
@@@@..
Endwhile
Struktur Pengulangan
Repeat - Until
Bentuk Umum ; Repeat
@@@@@@..
Instruksi
@@@@@@...
Until (kondisi)
Struktur Pengulangan
Contoh :
Algoritma Cetak_Angka
{mencetak 1, 2, .., 8 ke piranti keluaran}
Deklarasi :
K: integer Deskripsi :
K 1 {inisialisasi}
while k <= 8 do write (k)
k k + 1 endwhile
Contoh :
Algoritma Cetak_Angka
{mencetak 1, 2, .., 8 ke piranti keluaran}
Deklarasi :
K: integer Deskripsi :
K 1 {inisialisasi}
repeat
write (k)
k k + 1 until k > 8
1
Kompleksitas Algoritma
Dosen Pengampu : Zuhri Halim, M.Kom
Pendahuluan
• Sebuah masalah dapat mempunyai banyak algoritma penyelesaian. Contoh: masalah pengurutan (sort), ada puluhan algoritma pengurutan
• Sebuah algoritma tidak saja harus benar, tetapi juga harus mangkus (efisien).
• Algoritma yang bagus adalah algoritma yang mangkus (efficient).
• Kemangkusan algoritma diukur dari waktu (time) eksekusi algoritma dan kebutuhan ruang (space) memori.
• Algoritma yang mangkus ialah algoritma yang meminimumkan kebutuhan waktu dan ruang.
• Kebutuhan waktu dan ruang suatu algoritma bergantung pada ukuran masukan (n), yang menyatakan jumlah data yang diproses.
• Kemangkusan algoritma dapat digunakan untuk menilai algoritma yang bagus dari sejumlah algoritma penyelesaian masalah.
• Mengapa kita memerlukan algoritma yang
mangkus? Lihat grafik di bawah ini.
Model Perhitungan Kebutuhan Waktu
• Menghitung kebutuhan waktu algoritma dengan mengukur waktu sesungguhnya (dalam satuan detik) ketika algoritma dieksekusi oleh komputer bukan cara yang tepat.
• Alasan:
1. Setiap komputer dengan arsitektur berbeda mempunyai bahasa mesin yang berbeda → waktu setiap operasi antara satu komputer dengan komputer lain tidak sama.
2. Compiler bahasa pemrograman yang berbeda menghasilkan kode mesin yang berbeda → waktu setiap operasi antara compiler dengan compiler lain tidak sama.
• Model abstrak pengukuran waktu/ruang harus independen dari pertimbangan mesin dan compiler apapun.
• Besaran yang dipakai untuk menerangkan model abstrak pengukuran waktu/ruang ini adalah kompleksitas algoritma.
• Ada dua macam kompleksitas algoritma, yaitu: kompleksitas waktu dan kompleksitas ruang.
7
• Kompleksitas waktu, T(n), diukur dari jumlah tahapan komputasi yang dibutuhkan untuk menjalankan algoritma sebagai fungsi dari ukuran masukan n.
• Kompleksitas ruang, S(n), diukur dari memori yang digunakan oleh struktur data yang terdapat di dalam algoritma sebagai fungsi dari ukuran masukan n.
• Dengan menggunakan besaran kompleksitas waktu/ruang algoritma, kita dapat menentukan laju peningkatan waktu (ruang) yang diperlukan algoritma dengan meningkatnya ukuran masukan n.
8
• Ukuran masukan (n): jumlah data yang diproses oleh sebuah algoritma.
• Contoh: algoritma pengurutan 1000 elemen larik, maka n = 1000.
• Contoh: algoritma TSP pada sebuah graf lengkap dengan 100 simpul, maka n = 100.
• Contoh: algoritma perkalian 2 buah matriks berukuran 50 x 50, maka n = 50.
• Dalam praktek perhitungan kompleksitas, ukuran masukan dinyatakan sebagai variabel n saja.
Contoh
Kompleksitas Waktu
• Jumlah tahapan komputasi dihitung dari berapa kali suatu operasi dilaksanakan di dalam sebuah algoritma sebagai fungsi ukuran masukan (n)..
• Di dalam sebuah algoritma terdapat bermacam jenis operasi:
• Operasi baca/tulis
• Operasi aritmetika (+, -, *, /)
• Operasi pengisian nilai (assignment)
• Operasi pengakasesan elemen larik
• Operasi pemanggilan fungsi/prosedur
• dll
• Dalam praktek, kita hanya menghitung jumlah operasi khas (tipikal) yang mendasari suatu algoritma.
Contoh operasi khas di dalam algoritma
• Algoritma pencarian di dalam larik
Operasi khas: perbandingan elemen larik
• Algoritma pengurutan
Operasi khas: perbandingan elemen, pertukaran elemen
• Algoritma penjumlahan 2 buah matriks Operasi khas: penjumlahan
• Algoritma perkalian 2 buah matriks
Operasi khas: perkalian dan penjumlahan
• Contoh 1. Tinjau algoritma menghitung rerata sebuah larik (array).
sum ←0
for i ← 1 to n do
sum ← sum + a[i]
endfor
rata_rata ← sum/n
• Operasi yang mendasar pada algoritma tersebut adalah operasi penjumlahan elemen-elemen a
i(yaitu sum←sum+a[i]) yang dilakukan sebanyak n kali.
• Kompleksitas waktu: T(n) = n.
Latihan
• Contoh 6. Hitung kompleksitas waktu algoritma berikut berdasarkan jumlah operasi kali.
Jawaban
• Untuk
j = n, jumlah operasi perkalian = n
j = n/2, jumlah operasi perkalian = n/2 j = n/4, jumlah operasi perkalian = n/4
…
j = 1, jumlah operasi perkalian = 1
Jumlah operasi perkalian seluruhnya adalah
= n + n/2 + n/4 + … + 2 + 1 → deret geometri
Perancangan dan Analisis Algoritma
Zuhri Halim, S.Kom., M.Kom
Definisi :
Notasi asimtotik merupakan himpunan fungsi yang dibatasi oleh suatu fungsi n ∈ N yang cukup besar.
Fungsi : N → R (sering R
+)
Notasi Asimtotik digunakan untuk menentukan
kompleksitas suatu algoritma dengan melihat waktu tempuh algoritma. Waktu tempuh algoritma
merupakan fungsi : N → R
+Kompleksitas Waktu Asimptotik
Kompleksitas Waktu Asimptotik
Terdapat tiga macam yaitu :
⬜ Keadaan terbaik (best case)
Dilambangkan dengan notasi θ(...) dibaca Theta
⬜ Keadaan rata-rata (average case)
Dilambangkan dengan notasi Ω(...)dibaca Omega
⬜ Keadaan terburuk (worst case)
Dilambangkan dengan notasi O(...)dibaca Big-O Kinerja sebuah algoritma biasanya diukur dengan menggunakan
patokan keadaan terburuk (worst case) yang dinyatakan dengan Big- O
Notasi Big Oh
❖ Definisi 1 : waktu terburuk
iff ada dua bilangan konstanta c dan no ∍
Theorema : Misal
adalah suatu polinom derajat n. Maka
Notasi Theta
❖
Definisi 2 : waktu tercepat
iff ada dua konstanta c dan n
o∍
Notasi Omega
❖
Definisi 3 : waktu rata-rata
iff ada tiga konstanta positif c
1, c
2, dan n
o∍
7
8
Fungsi Kompleksitas
MENGHITUNG WAKTU PROSES (1)
Contoh : Pseudocode Selection Sort (pseudocode 3.6) 1 for i=1 to N-1 do
2 min=i
3 for j=i+1 to N do 4 if A[j]<A[min] then 5 min=j
6 end if 7 end for
8 swap(A[i],A[min]) 9 end for
Hitung waktu proses algoritma yang diperlukan untuk mengurutkan deretan yang berisi 8 angka acak ! Bagaimana jika ukuran input belum diketahui?
⬜ Dinyatakan dengan N
⬜ Waktu proses dinyatakan dengan sebuah persamaan N, selanjutnya disebut Fungsi Kompleksitas Fungsi Kompleksitas menyatakan seberapa kompleksnya sebuah algoritma
MENGHITUNG WAKTU PROSES (2)
Asumsi bahwa nilai N belum diketahui
Bisa dihitung bahwa untuk setiap perulangan i akan terjadi perulangan j sebanyak N-1, N-2, N-3, ..., 1 kali
Misalkan nilai N adalah 5, berarti kita perlu menghitung 5+4+3+2+1 (rumus deret hitung)
Dengan nilai a dan b = 1 diperoleh :
FUNGSI KOMPLEKSITAS
Fungsi Kompleksitas algoritma Selection Sort di atas
Dengan rumus Fungsi Kompleksitas N(N+1)/2 berarti jika N=5 maka waktu proses adalah 15.
Jika nilai N diperbesar menjadi 8, maka waktu proses menjadi 36.
Nilai N dan waktu proses bisa dipetakan dalam sebuah koordinat Cartesius dengan N di sumbu x dan waktu proses di sumbu y.
Terlihat bahwa waktu proses algoritma Selection Sort bertumbuh (growth rate) secara linear.
MEMBACA BIG-OH
O(1) artinya algoritma konstan O(n) artinya algoritma linear
O(n2) artinya algorritma quadratic O(n3) artinya algoritma qubic
O(log n) contohnya pada full balanced Binary Search Tree O(nm) artinya algoritma eksponensial
Notasi Big-O bisa berisi kombinasi dari contoh di atas
Penyederhanaan Big-O dilakukan pada komponen yang “less important”
Perancangan dan Analisis Algoritma
STRATEGI ALGORITMA
Dosen Pengampu: Zuhri Halim, M.Kom
JENIS STRATEGI ALGORITMA
● Strategi Solusi Langsung
✓Alg. Brute Force
✓Alg Greedy
● Strategi Berbasis Pencarian Pada Ruang Status
✓Teknik DFS (Depth First Search)
✓Teknik BFS (Breadth First search)
✓Alg. Backtracking
✓Alg. Branch and Bound
● Strategi Solusi Atas-Bawah
✓Alg. Devide and Conquer
● Strategi Solusi Bawah-Atas
✓Alg. Dinamic Programming
● Strategi Shortest Path
✓Alg. Djikstra
✓Alg . Floyd-Warshall
Strategi Solusi Langsung Algoritma Brute Force
Zuhri Halim, M.Kom
Definisi Brute Force
● Brute force adalah sebuah pendekatan yang langsung (straightforward) untuk memecahkan suatu masalah, biasanya didasarkan pada pernyataan masalah (problem statement) dan definisi konsep yang dilibatkan.
● Algoritma brute force memecahkan masalah dengan sangat sederhana, langsung dan dengan cara yang jelas (obvious way).
Contoh-contoh Brute Force
1. Menghitung an (a > 0, n adalah bilangan bulat tak- negatif)
an = a x a x … x a (n kali) , jika n > 0
= 1 , jika n = 0
Algoritma: kalikan 1 dengan a sebanyak n kali
2. Menghitung n! (n bilangan bulat tak- negatif)
n! = 1 × 2 × 3 × … × n , jika n > 0
= 1 , jika n = 0
Algoritma: kalikan n buah bilangan, yaitu 1,
2, 3, …, n, bersama-sama
3. Mengalikan dua buah matrik yang berukuran n × n.
● Misalkan C = A × B dan elemen-elemen matrik dinyatakan sebagai cij, aij, dan bij
● Algoritma: hitung setiap elemen hasil perkalian satu per satu, dengan cara mengalikan dua vektor yang panjangnya n.
Adakah algoritma perkalian matriks yang lebih mangkus daripada brute force?
4. Menemukan semua faktor dari bilangan bulat n selain dari 1 dan n itu sendiri.
● Definisi: Bilangan bulat a adalah faktor dari
bilangan bulat b jika a habis membagi b.
Adakah algoritma pemfaktoran yang lebih baik daripada brute force?
5. Mencari elemen terbesar (atau terkecil)
Persoalan: Diberikan sebuah himpunan yang beranggotakan n buah bilangan
bulat. Bilangan-bilangan bulat tersebut dinyatakan sebagai a
1, a
2, …, a
n. Carilah elemen terbesar di dalam himpunan
tersebut.
Kompleksitas algoritma ini adalah O(n).
6. Sequential Search
Persoalan: Diberikan n buah bilangan bulat yang dinyatakan sebagai a
1, a
2, …, a
n. Carilah apakah x terdapat di dalam himpunan bilangan bulat tersebut. Jika x ditemukan, maka lokasi (indeks) elemen yang bernilai x disimpan di dalam
peubah idx. Jika x tidak terdapat di dalam himpunan tersebut, maka idx diisi
dengan nilai 0.
Kompleksitas algoritma ini adalah O(n).
Adakah algoritma pencarian elemen yang lebih mangkus daripada brute force?
7. Bubble Sort
● Apa metode yang paling lempang dalam
memecahkan masalah pengurutan? Jawabnya adalah algoritma pengurutan bubble sort.
● Algoritma bubble sort mengimplementasikan
teknik brute force dengan jelas sekali.
8. Uji keprimaan
Persoalan:
Diberikan sebuah bilangan bilangan bulat
positif. Ujilah apakah bilangan tersebut
merupakan bilangan prima atau bukan.
Adakah algoritma pengujian bilangan prima yang lebih mangkus daripada brute force?
9. Menghitung nilai polinom secara brute force
Persoalan: Hitung nilai polinom
p(x) = a
nx
n+ a
n-1x
n-1+ … + a
1x + a
0pada titik x = x
0.
Kompleksitas algoritma ini adalah O(n
2).
Perbaikan (improve):
Kompleksitas algoritma ini adalah O(n).
Adakah algoritma perhitungan nilai polinom yang lebih mangkus daripada brute force?
Karakteristik Algoritma Brute Force
1. Algoritma brute force umumnya tidak “cerdas” dan tidak mangkus, karena ia membutuhkan jumlah langkah yang besar dalam penyelesaiannya. Kadang-kadang algoritma brute force disebut juga algoritma naif (naïve algorithm).
1. Algoritma brute force seringkali merupakan pilihan yang kurang disukai karena ketidakmangkusannya itu, tetapi dengan mencari pola-pola yang mendasar, keteraturan, atau trik-trik khusus, biasanya akan membantu kita menemukan algoritma yang lebih cerdas dan lebih mangkus.