Anda di halaman 1dari 35

Pengantar Strategi Algoritmik &

Kompleksitas waktu dan ruang

Sukmawati Nur Endah


Departemen Informatika UNDIP
Pentingnya Mata Kuliah

 Orang komputer harus menguasai Algoritma


 Harus mampu mengembangkan sesuai dengan masalah
yang ada
 Tidak saja harus benar, tetapi juga harus efisien baik dari
waktu maupun ruang memori
 Goal : mahasiswa mampu memilih dan mengembangkan
algoritma yang tepat dengan mempertimbangkan
keefisiensinya (kemangkusannya)
Motivation

Why study this subject?


 Efficient algorithms lead to efficient programs.
 Efficient programs sell better.
 Efficient programs make better use of hardware.
 Programmers who write efficient programs are more
marketable than those who don’t!
Faktor yang mempengaruhi
efisiensi sebuah program
Factors influencing program efficiency
 Problem being solved
 Programming language
 Compiler
 Computer hardware
 Programmer ability
 Programmer effectiveness
 Algorithm
Apakah Algoritma itu??
Definisi Algoritma

 Urutan langkah-langkah dalam menyelesaikan masalah


secara sistematis
 Langkah-langkah yang mentransformasikan dari input
menjadi output

 Tiga hal dalam mendefinisikan algoritma


 Masalah : Persoalan yang akan diselesaikan
 Input : Contoh data atau keadaaan yang jadi masalah
 Output : Hasil akhir dari data atau keadaan sesudah
algoritma diimplementasikan pada input

 Hasil akhir dianggap sebagai peyelesaian masalah


Contoh Mendefinisikan
Algoritma
 Masalah : Pengurutan sekumpulan nilai secara acak

 Input : Serangkaian data berukuran n


 Misal : [4,3,1,2,5,6]  bentuk numerik
[“Dita”, “Alex”, “Eko”, “Chandra”, ”Bintang”, “Fifi”]
 bentuk string

 Output : Serangkaian data berukuran n yang terurut


dengan urutan a1≤a2≤a3≤...≤an−1≤an
 Misal : [1,2,3,4,5,6]
[“Alex”, “Bintang”, “Chandra”, “Dita”, “Eko”, “Fifi”]
Solusi Algoritma

 Dapat menggunakan Algoritma Insertion Sort

 Implementasi dengan bahasa pemrograman Python


Bagaimana menentukan
Algoritma itu baik?
 Benar
 algoritma dapat menyelesaikan masalah dengan tepat, sesuai
dengan definisi masukan / keluaran algoritma yang diberikan.
 Efisien
 algoritma dalam menyelesaikan masalah tidak memberatkan
bagian lain dari aplikasi.
 Sebuah algoritma yang tidak efisien biasanya menggunakan
sumber daya (memori, CPU) yang besar dan waktu komputasi
yang tinggi.
 Mudah diimplementasikan
 sebuah algoritma yang baik harus dapat dimengerti dengan
mudah sehingga implementasi algoritma dapat dilakukan
siapapun dengan pendidikan yang tepat, dalam waktu yang
masuk akal.
Algoritma yang Baik

 Pada prakteknya tiga hal tersebut tidak dapat selalu


tercapai

 Biasanya di syarat kedua dan ketiga yang tidak selalu


didapatkan

 Sebagai programmer wajib mengusahakan ketiganya


Bagaimana membuktikan
Algoritma itu benar?
 Sebuah algoritma dikatakan telah benar jika :
 algoritma tersebut dapat memberikan keluaran yang benar
jika menerima masukan sesuai dengan definisi algoritma
tersebut
 algoritma tersebut terbukti akan selalu dapat diterminasi
(berakhir)

 Pembuktikan kebenaran:
 Induksi Matematika,
 Pembuktian kontradiktif,
 Pembuktian kontrapositif, dan
 Metode Formal

 Masing-masing metode mempunyai kelebihan dan


kekurangannya serta kasus penggunaan yang berbeda-beda
Induksi Matematika
 Merupakan alat pembuktian matematis yang digunakan untuk
membuktikan pernyataan atau proses yang melibatkan
perhitungan bilangan asli yang berulang.
 Contoh : perhitungan deret aritmatika, deret geometris, ataupun
sigma bilangan

 Pembuktian menggunakan induksi matematika dilakukan dengan


dua langkah, yaitu:
 Melakukan pembuktian kasus dasar (base case), yaitu membuktikan
bahwa sebuah pernyataan (fungsi) matematika atau algoritma
bernilai benar jika diaplikasikan pada bilangan pertama yang sah
sesuai dengan spesifikasi fungsi atau algoritma tersebut.
 Melakukan induksi, yaitu membuktikan bahwa kebenaran dari fungsi
P(k+1) jika kebenaran fungsi P(k) diketahui.
Contoh pembuktian dengan
induksi matematika
 Contoh 1. Deret Aritmatika
 Buktikan bahwa deret aritmatika 1+2+3+...+n=n(n+1)/2
adalah benar untuk semua bilangan bulat n≥1

 Contoh 2. Pembuktian Hipotesa


 Buktikan hipotesa bahwa fungsi matematika n^3−n habis
dibagi 6 untuk semua bilangan bulat n≥2.
Pembuktian contoh 1
 Ubah pernyataan matematika tersebut menjadi sebuah
fungsi matematika:
 P(k)=1+2+3+...+n=k(k+1)/2
 Pembuktian kasus dasar
 Karena pernyataan matematika pada soal menyatakan bahwa
pernyataan benar untuk semua bilangan bulat k≥1, maka untuk
pembuktian kasus dasar harus membuktikan bahwa P(1) adalah
benar untuk ruas kiri maupun ruas kanan dari P(k).
P(1)=1=1(1+1)/2
1=1(2)/2
1=2/2
1=1
 karena hasil akhir dari ruas kanan dan ruas kiri adalah sama (1),
maka dapat dikatakan bahwa kasus dasar telah terbukti
Lanj. Pembuktian Contoh 1
 Induksi
 Untuk pembuktian induksi, kita harus membuktikan bahwa
P(k)→P(k+1) bernilai benar.
 Langkah pertama : tuliskan fungsi matematis dari P(k+1) terlebih
dahulu:

 Pembuktian akan dilakukan dengan melakukan penurunan pada ruas


kiri agar menjadi sama dengan ruas kanan:

1)

ruas kiri dari P(k+1) telah sama dengan ruas kanannya, sehingga
dapat dikatakan bahwa tahap induksi telah berhasil dibuktikan benar.
 Dengan pembuktian kasus dasar dan induksi yang bernilai benar,
dapat disimpulkan bahwa P(n) bernilai benar untuk n≥1
Latihan

 Buatlah pembuktian dengan induksi matematis untuk


contoh 2
Bagaimana induksi matematika
dapat membuktikan algoritma?

 Karena dalam algoritma biasanya melakukan perhitungan


bilangan atau data secara berulang
 Contoh : Algoritma menghitung perkalian dua buah
bilangan bulat positif
Lanjutan

 Permasalahan diatas dapat dituliskan :

 Hal ini dapat dibuktikan dengan induksi matematika


Kemangkusan Algoritma
(Efisiensi Algoritma)
 Algoritma yang bagus adalah algoritma yang mangkus
 Kemangkusan algoritma diukur dari :
 Berapa jumlah waktu dan ruang (space) memori yang
dibutuhkan untuk menjalankannya
 Algoritma yang mangkus :
 Algoritma yang meminimumkan kebutuhan waktu dan ruang
 Kebutuhan waktu dan ruang tergantung pada :
 Ukuran masukan (jumlah data) yang diproses
 Biasa disimbolkan dengan n
 Misal : Mengurutkan 1000 buah elemen  n = 1000
Menghitung 6!  n = 6
Mengapa kita memerlukan
Algoritma yang mangkus
Ilustrasi
 Dipunyai :
 Algoritma yang waktu eksekusinya dalam orde eksponensial (2n),
dengan n adalah jumlah masukan yang diproses
 Sebuah komputer yang mampu menjalankan program dengan
masukan berukuran n dalam waktu 10-4 x 2n detik
 Dengan algoritma dan komputer tersebut, maka:
 n=10 dibutuhkan waktu eksekusi 0,1024 detik ~ 1/10 detik
 n=20 dibutuhkan waktu eksekusi 104,8576 detik ~ ...??... menit
 Berapa waktu yang dibutuhkan untuk n = 30?
 Jika dapat menjalankan komputer tanpa gangguan selama 1
tahun, berapa masukan yang dapat diselesaikan dalam 1 tahun
tersebut?
 Apa yang harus dilakukan agar mampu menyelesaikan jumlah
masukan lebih banyak?
Ilustrasi

 Solusi 1
 Membeli komputer baru yang lebih cepat (10-6)  dengan
masukan n maka kecepatannya 10-6 x 2n detik
 Berapa masukan yang dapat dilakukan dengan komputer baru
tersebut?
 Solusi 2
 Mengubah algoritmanya, misalkan menemukan algoritma baru
untuk masalah sama dengan waktu penyelesaian n3
 Sehingga dengan menggunakan komputer 1 dapat
menyelesaikan masalah dalam waktu 10-4 x n3 detik
 Satu hari dapat menyelesaikan lebih dari 900 masukan, berapa
dalam satu tahun?
 Berapa masukan dapat diselesaikan dengan komputer 2 dalam
satu tahun?
Kebutuhan Waktu dan Ruang
 Kebutuhan waktu dihitung dalam satuan detik
 Kebutuhan ruang dihitung dalam satuan byte atau kilobyte
 Bagaimana menghitung kebutuhan waktu?
 Biasanya dengan menghitung durasi waktu yang dibutuhkan algoritma
dalam menyelesaikan masalah tanpa menghitung kebutuhan waktu
untuk menampilkan antar muka program, operasi I/O (baca/tulis)
 Ilustrasi : Menghitung rata-rata dari n buah data dengan prosedur
HitungRerata
 Asumsikan data masukan sudah dibaca
 Jalankan program yang mengandung prosedur itu
 Hitung selisih waktu sebelum pemanggilan prosedur dan sesudah
selesai pemanggilan
 Selisih tersebut merupakan kebutuhan waktu menghitung rerata n
buah data
 Namun, model perhitungan seperti ini kurang dapat diterima, apa
alasannya?
Kebutuhan Waktu dan Ruang

 Alasan 1:
 Arsitektur komputer yang berbeda menghasilkan waktu yang
berbeda pula untuk melaksanakan operasi-operasi dasar
(penambahan, perkalian, pembagian, pengurangan)
 Kebutuhan waktu jika menjalankan pada komputer IBM akan
berbeda dengan saat dieksekusi pada komputer Macintosh
 Komputer dengan arsitektur yang berbeda maka :
 Akan berbeda pula perintah (instruction) dalam bahasa mesin yang
dimilikinya
 Akan berbeda pula kecepatan (speed) operasi piranti kerasnya
 Perbedaan ini menghasilkan ukuran waktu (dan kebutuhan ruang
memori) yang berbeda pula
 Misal : komputer super cepat saat ini mampu melakukan operasi
dasar dalam waktu 10-9 detik, tapi PC biasa memerlukan 10-6
detik
Kebutuhan Waktu dan Ruang

 Alasan 2:
 Kebutuhan waktu sebuah algoritma bergantung pada
compiler bahasa pemrograman yang digunakan
 Compiler yang berbeda akan menerjemahkan program
(dalam bahasa tingkat tinggi) ke dalam kode mesin (object
code-bahasa tingkat rendah) yang berbeda pula
 Kode mesin yang berbeda akan menggunakan ruang memori
dan memerlukan waktu pelaksanaan program yang berbeda
pula
 Model pengukuran waktu/ruang harus independen dari
pertimbangan mesin dan compiler apapun
 Besaran yang dipakai  kompleksitas algoritma
Kompleksitas Algoritma

 Ada dua macam :


 Kompleksitas waktu
 Kompleksitas ruang

 Kompleksitas waktu diekspresikan sebagai jumlah


tahapan komputasi yang dibutuhkan untuk menjalankan
algoritma sebagai fungsi dari ukuran masukan n

 Kompleksitas ruang diekspresikan sebagai jumlah memori


yang digunakan oleh struktur data yang terdapat di
dalam algoritma sebagai fungsi dari ukuran masukan n
Terminologi Kompleksitas
Waktu/Ruang
 Ukuran besar masukan data untuk suatu algoritma : n

 Komplekitas waktu : T(n)  jumlah operasi yang dilakukan

 Kompleksitas ruang : S(n)  jumlah memori yang


dibutuhkan

 Pembahasan lebih lanjut berfokus pada kompleksitas waktu


dengan pertimbangan :
 Kompleksitas ruang terkait erat dengan bentuk struktur data
 Ukuran memori sudah bukan lagi persoalan kritis
Kompleksitas Waktu
 Perhatikan Algoritma menghitung rata-rata berikut ini:

Procedure HitungRerata (input a1,a2, ...an: integer, output r : real)


Deklarasi
i : integer
jumlah : real
Algoritma
jumlah ← 0
i←1
while i ≤ n do
jumlah ← jumlah + ai
i ← i+1
endwhile
r ← jumlah / n
Kompleksitas waktu

 Jenis operasi yang ada dalam Algoritma HitungRerata


 Operasi pengisian nilai
jumlah ← 0 1 kali
i←1 1 kali
jumlah ← jumlah + a1 n kali
i ← i+1 n kali
r ← jumlah / n 1 kali
 Jumlah seluruh operasi pengisian nilai : 3 + 2n
Lanjutan

 Operasi penjumlahan
jumlah + a1 n kali
i+1 n kali
 Jumlah seluruh operasi penjumlahan : 2n
 Operasi pembagian
jumlah / n 1 kali
 Jumlah seluruh operasi pembagian : 1

 Kompleksitas waktu : Total waktu yang diperlukan


3+2n+2n+1 = 4n + 4
Kompleksitas Waktu

 Idealnya untuk menghitung kompleksitas adalah seperti


di atas
 Namun untuk alasan praktis : cukup dihitung jumlah
operasi abstrak yag mendasari suatu algoritma
 Contoh :
 Algoritma pencarian  operasi perbandingan x dengan
elemen larik-lariknya
 Algoritma pengurutan  operasi perbandingan elemen-
elemen larik dan operasi pertukaran elemen-elemen
 Algoritma perkalian dua matriks A x B masing-masing
berukuran n x n ???
Kompleksitas Waktu

 Apa operasi dasar untuk Algoritma HitungRerata?


 Jika berdasarkan operasi dasarnya, berapa T(n) Algoritma
HitungRerata?
Latihan

 Buatlah algoritma untuk mencari elemen terbesar di


dalam sebuah larik (array) yang berukuran n elemen
 Apa operasi dasarnya?
 Berapa kompleksitas waktu berdasarkan operasi dasarnya?
Tiga Jenis Kompleksitas Waktu

 Tmax (n) : Kompleksitas waktu untuk kasus terburuk (worst case)


 Kebutuhan waktu maksimum yang diperlukan sebuah algoritma sebagai
fungsi dari n

 Tmin (n) : Kompleksitas waktu untuk kasus terbaik (best case)


 Kebutuhan waktu minimum yang diperlukan sebuah algoritma sebagai
fungsi dari n

 Tavg (n) : Kompleksitas waktu untuk kasus rata-rata (average case)


 Kebutuhan waktu rata-rata yang diperlukan sebuah algoritma sebagai
fungsi dari n
PR

 Buatlah algoritma pencarian beruntun (sequensial / linear


search)
 Hitunglah kompleksitas waktu terbaik, terburuk dan rata-rata
dari algoritma tersebut!

Anda mungkin juga menyukai