3.1 ALGORITHMS
Algoritma
Definisi 1.
Algoritma adalah himpunan hingga perintah yang terinci
dalam melakukan perhitungan atau pemecahan masalah.
Contoh 1.
Program komputer adalah suatu algoritma.
Catatan.
Dalam matematika, suatu algoritma merepresentasikan
fungsi. Namun, Alan Turing membuktikan bahwa beberapa
fungsi tidak dapat direpresentasikan suatu algoritma.
Contoh 1
Deskripsikan suatu algoritma untuk mencari bilangan terbesar dalam
barisan hingga bilangan bulat.
Solusi.
Dilakukan langkah berikut:
1. Buat nilai maksimum sementara sama dengan bilangan bulat
pertama dalam barisan.
2. Bandingkan bilangan bulat berikut dalam barisan dengan maksimum
sementara, jika ia lebih besar dari maksimum sementara, maka
maksimum sementara dibuat sama dengan bilangan tersebut.
3. Ulangi langkah sebelumnya jika terdapat bilangan bulat lain dalam
barisan.
4. Berhenti jika tidak ada bilangan bulat lain di barisan.
5. Nilai maksimum sementara adalah bilangan terbesar dalam barisan.
Pseudocode
Pseudocode dari suatu algoritma memberikan
representasi yang jelas dari suatu algoritma dan
juga dapat diubah ke dalam satu atau lebih
bahasa pemrograman.
Algoritma 1. Cari_Maksimum
Sifat Algoritma
• Input. Algoritma memiliki input dari himpunan tertentu.
• Output. Dari setiap himpunan input, algoritma menghasilkan
output yang merupakan solusi dari masalah.
• Definiteness. Setiap langkah dalam algoritma harus didefinisikan
secara rinci.
• Correctness. Algoritma harus menghasilkan nilai output yang
benar.
• Finiteness. Algoritma harus menghasilkan output yang
diinginkan dalam sejumlah berhingga langkah.
• Effectiveness. Setiap langkah dalam algoritma dapat dilakukan
dalam waktu yang berhingga.
• Generality. Prosedur harus dapat diterapkan secara umum,
bukan hanya untuk himpunan input tertentu.
Soal 1
Jelaskan Input, Output, Definiteness,
Correctness, Finiteness, Effectiveness, dan
Generality dari Algoritma 1.
Algoritma Greedy
• Untuk memecahkan masalah optimasi.
• Pendekatan termudah adalah dengan
menentukan pilihan terbaik dalam setiap
langkah; dan tidak mempertimbangkan
keseluruhan langkah.
• Algoritma yang mencari pilihan “terbaik” dalam
setiap langkah disebut algoritma greedy.
• Namun demikian, algoritma greedy tidak selalu
memberikan solusi optimal. Sehingga setelah
suatu algoritma greedy menemukan suatu solusi,
perlu diperiksa apakah solusi tersebut optimal.
Contoh 2
Pandang masalah menukar n rupiah dengan lembar uang 100
ribuan, 50 ribuan, 20 ribuan, 10 ribuan, 5 ribuan, dan seribuan di
mana digunakan sesedikit mungkin lembar uang.
Kita dapat merancang algoritma greedy dengan melakukan
optimasi pada setiap langkah, yaitu, dalam setiap langkah kita
memilih lembar uang dengan nilai terbesar untuk ditukarkan
yang tidak melebihi nilai n.
Sebagai contoh, untuk menukar 287 ribu rupiah, kita memilih
lembar 100 ribu (menyisakan 187 ribu). Kemudian dipilih lembar
100 ribu kedua (menyisakan 87 ribu), disusul oleh lembar 50
ribu (menyisakan 37 ribu), lembar 20 ribu (menyisakan 17 ribu),
lembar 10 ribu (menyisakan 7 ribu), lembar 5 ribu (menyisakan 2
ribu), lembar seribu (menyisakan seribu), dan lembar seribu.
Contoh 2 (Algoritma)
Algoritma 2. Tukar_uang_greedy
Contoh 2 (Bukti solusi optimal)
Lema 1
Misalkan n bilangan bulat positif. Jika n rupiah ditukarkan dengan
lembar uang 100 ribuan, 50 ribuan, 20 ribuan, 10 ribuan, 5 ribuan, dan
seribuan di mana digunakan sesedikit mungkin lembar uang, maka
paling banyak digunakan 1 lembar 50 ribuan, paling banyak 2 lembar
20 ribuan, paling banyak 1 lembar 10 ribuan, paling banyak 1 lembar 5
ribuan, dan paling banyak 4 lembar seribuan.
Selain itu, tidak mungkin terdapat 2 lembar 20 ribuan dan 1 lembar 10
ribuan.
Banyaknya uang yang ditukarkan dalam lembar 50 ribuan, 20 ribuan,
10 ribuan, 5 ribuan, dan seribuan tidak dapat melebihi 99 ribu rupiah.
Bukti.
Dengan kontradiksi
Contoh 2 (Bukti solusi optimal)
Teorema 1
Algoritma greedy (Algoritma 2) menukarkan
uang dengan menggunakan sesedikit mungkin
lembar uang.
Bukti.
Dengan kontradiksi dan menggunakan Lema 1.
3.2 THE GROWTH OF FUNCTIONS
Notasi Big-O
Pertumbuhan fungsi biasanya dijelaskan dengan
menggunakan notasi big-O.
Definisi 2. [Paul Bachmann (1892), dipopulerkan oleh Donald
Knuth]
Misalkan f dan g fungsi dari bilangan bulat/real ke bilangan
real.
f(x) adalah O(g(x)), atau kadangkala ditulis f(x) = O(g(x)), jika
terdapat konstanta C dan k sehingga
|f(x)| C|g(x)|
untuk setiap x > k.
Catatan. f(x) adalah O(g(x)) menyatakan bahwa f(x) tumbuh
lebih lambat dibandingkan suatu hasil kali konstan dari g(x)
pada saat x membesar tanpa batas.
Contoh 3
Tunjukkan bahwa f(x) = x2 + 2x + 1 adalah O(x2).
Solusi.
Untuk x > 1 berlaku
x2 + 2x + 1 x2 + 2x2 + x2
x2 + 2x + 1 4x2
Maka, untuk C = 4 dan k = 1:
f(x) C x2 jika x > k.
Ya.
x3 bertumbuh lebih cepat dari x2, sehingga x3
juga bertumbuh lebih cepat dari f(x).
30n+8 tidak cn =
lebih kecil dari n 31n 30n+8
Value of function
di mana-mana (n>0),
tetapi lebih kecil dari
31n di semua titik 30n+8
n
sebelah kanan n=8. = O(n)
n>k=8
Increasing n
Soal 2
Tunjukkan bahwa n2 bukan O(n).
Big-O untuk polinom
Teorema 2.
Misalkan f(x) = anxn + an-1xn-1 + … + a0 suatu
polinom dengan a0, a1, …, an bilangan real.
Maka f(x) adalah O(xn).
Soal 3.
1. Tentukan Big-O dari 1 + 2 + 3 + … + n
2. Tentukan Big-O dari n!
3. Dengan menggunakan sifat n < 2n, untuk
setiap n bilangan bulat positif, tunjukkan
bahwa log n adalah O(n).
Fungsi “Populer”
Fungsi yang “populer” digunakan sebagai g(n) adalah
1, log n, n, n log n, n2, 2n, n!
Big-O untuk Kombinasi Fungsi
Teorema 3.
• Jika f1(x) adalah O(g1(x)) dan f2(x) adalah O(g2(x)),
maka (f1 + f2)(x) adalah O(max(g1(x), g2(x)))
• Jika f1(x) adalah O(g(x)) dan f2(x) adalah O(g(x)),
maka (f1 + f2)(x) adalah O(g(x)).
Banyaknya perbandingan?
Paling banyak 3 (n – 1) = 3n – 3
Sehingga kompleksitas algoritma adalah (n).
Kompleksitas Perkalian Matriks
Misalkan C = [cij] adalah matriks m × n yang merupakan hasil kali
A = [aij] matriks m × k dengan B = [bij] matriks k × n.
Algoritma 3. Perkalian_matriks
.
Contoh 6.
Ada berapa banyak operasi penjumlahan dan
perkalian bilangan bulat yang digunakan dalam
Algoritma 3 untuk mengalikan dua matriks
berukuran nxn?
Solusi.
Ada n2 entri dalam hasil kali A and B. Untuk
memperoleh setiap entri diperlukan n perkalian dan
n − 1 penjumlahan. Maka digunakan n3 perkalian
dan n2(n − 1) penjumlahan.
Catatan: Akan ada pula operasi perbandingan.
Kompleksitas Perkalian Matriks (2)
Contoh 6 menunjukkan bahwa mengalikan dua matriks n x n
memerlukan O(n3) operasi perkalian dan penjumlahan.
sumber: http://www.worldwidewebsize.com/
Kompleksitas Algoritma
Solvability dan Tractability