Anda di halaman 1dari 6

9/27/2022

Pendahuluan

• Salah satu pilar utama dari ilmu komputer


adalah mempelajari algoritma dan kaitannya
dengan struktur data.
Desain Algoritma
• Oleh karenanya, kita perlu mengetahui cara
Proses komputasi terbaik dalam mempelajari teknik-teknik
perancangan algoritma yang baik.

1 2

Pendahuluan Merancang Algoritma


• Ada banyak algoritma untuk menyelesaikan suatu permasalahan.
• Masing-masing algoritma memiliki karakteristik yang berbeda yang • Pendekatan merancang algoritma yang paling
akan menentukan bagaimana masing-masing akan beroperasi secara sederhana adalah pendekatan incremental
efisien. (iteratif).
• Ketika kita menganalisa algoritma, pertama kita harus menunjukkan
• Algoritma MAX1 menggunakan iteratif
bahwa algoritma dapat menyelesaikan suatu masalah dengan baik.
(incremental approach):
• Analisa algoritma adalah menentukan jumlah waktu yang
– Cari maksimum dari x1
diperlukan algoritma tsb ketika dieksekusi.
– Cari maksimum dari x1, x2
• Waktu disini bukan jumlah detik atau ukuran jam lainnya melainkan
lebih pada suatu pendekatan dari jumlah operasi yang algortima
– Cari maksimum dari x1, x2, x3
berikan. – Dan seterusnya.
• Jadi jumlah operasi dikaitkan dengan waktu eksekusi.
Prodi Teknik Informatika FT UNIB 4

3 4

Iterasi, Induksi, dan Rekursi 2.1 Iterasi


• Kekuatan komputer berasal dari kemampuannya untuk
mengeksekusi tugas yang sama atau versi-versi berbeda pada • Beberapa jenis iterasi yang sering digunakan
tugas yang sama. dalam pemrograman :
• Proses iterasi, induksi, dan rekursif banyak dijumpai dalam
berbagai program komputasi.
– For
• Teknik Iterasi: – While
• cara sederhana untuk menyelesaikan sebarisan operasi secara – Repeat
berulang (misal : for-statement pada Pascal)
• Pemrograman Rekursif: – Case
• adalah pemrograman yang bersifat memanggil dirinya sendiri
secara langsung maupun tak langsung –…
• Pembuktian dengan Induksi:
• suatu teknik penting untuk menunjukkan suatu statemen itu • Contoh: Selection Sort
benar

5 6

1
9/27/2022

Selection Sort
Sorting (suatu algoritma sorting yang iteratif)
• Misalkan sebuah daftar integer <3, 1, 4, 1, 5, 9, 2, 6, 5 > • Misalkan diberikan sebuah array A = [x1, x2, x3 …, xn]
• Setelah di-sorted • Sorting A secara nondecreasing sehingga ada luaran array
terurut B = [y1, y2, y3, …, yn]
– < 1, 1, 2, 3, 4, 5, 5, 6, 9>
• Dalam proses pengurutan (sorting) terjadi perulangan (iterasi)
• Dalam sorting, tidak hanya mengurutkan nilai-nilainya proses dalam menemukan (select) elemen terkecil sebelum
sehingga yang lebih kecil atau sama telah tersusun menjadi bagian array yang sudah terurut.
mengikuti nilai berikutnya, tetapi juga harus
mempertahankan jumlah kemunculan dari masing-
masing nilai
• Cara mengurutkan bisa membandingkan dua nilai 1 i n
𝑎 ≤ 𝑏 𝑎𝑡𝑎𝑢 𝑙𝑒𝑥𝑖𝑐𝑜𝑔𝑟𝑎𝑝ℎ𝑖𝑐 𝑜𝑟𝑑𝑒𝑟

7 8

Iterative Selection Sort Iteratif pada Selection Sort


Procedure • Perhatikan: Misalkan Array A = [40, 30, 20, 10] • Pada iterasi ke-2, pada baris ke-3
SelectionSort(var
A:intarray; n: integer); • Apa yang terjadi jika n= 0? sampai ke-5 untuk j=3, test baris ke-4
i 1 2 3 4
Var i, j , (jika array tidak ada elemen ) • A[3] < A[2] set small = 3 pada baris
A 40 30 20 10 ke-5
small, – Body for-loop (baris 1) tidak
• Pada iterasi terakhir, baris ke-3 sampai
temp: dieksekusi
5 dengan j= 4, test baris ke-4
integer; • Apa yang terjadi jika array Di-mulai outer loop • Karena A[4] < A[3], set small = 4 pada
Begin hanya memiliki satu elemen? • i= 1, baris – 2, set small = 1 baris ke-5
2. small := i;1. for Kenapa? • Sekarang seluruh inner loop sampai
3. for j := i+1i :=
to1nto
don- – Body for-loop juga tidak • baris – 3 sampai 5 bentuk inner pada baris ke-6.
1 do begin •
4. if A[j] < A[small] then dieksekusi loop Set temp=10 yang mana adalah
(* set small to the index of the first A[small], kemudian A[4] ke A[1], atau
5. small := j;
occurrence of the smallest element
– Karena dengan sendirinya array • set j = 2, 3, dan 4
(*when we *)reach here, small is the index telah terurut. 40 , pada baris ke-7 dan A[1] ke 10
remaining • Test j = 2, maka baris 4
pada baris ke-8
of the first smallest element in A[i …n]; we • Pada kasus n = 0 dan 1 terjadi dieksekusi Iterasi I dari outer loop selesai:
now exchange A[small] with A[i] *)
batas kondisi penting, yaitu • Karena A[2]= 30 < A[small] = 40
6. temp := A[small]; i 1 2 3 4
batas yang penting untuk • Maka set small = 2, baris ke-5.
7. A[i] := A[i];
mengecek kinerja dari A 30 30 20 40
8. A[i] := temp; sembarang algoritma atau
9. end program. Iterasi selanjutnya sebagai latihan…!
10. end.

9 10

Pembuktian Induktif
Pembuktian sifat-sifat Programs
(inductive Proofs) small := i
2. small := i;
• Buktikan dengan induksi matematika dari
n 3. for j := i+1 to n do
4. if A[j] < A[small]
𝑆𝑛 = Σ 2i = 2n +1 − 1 then j:= i+1
i=0 5. small := j;
Bukti:
• Basis: i = 0 → 𝑆𝑜 = ∑0i=02i = 21 − 1 ↔ 1 = 1 𝑏𝑒𝑛𝑎𝑟 S(k)
• Loop Invariants
• Induksi: andaikan Sn benar, akan dibuktikan bahwa berlaku untuk S(n+1)
• Pada flowcahrt
• Persamaan menjadi𝑆 𝑛 + 1 = ∑n+1 i =1 2 = 2
i n+2
−1 – Pertama, inisilasiasi small ke- i , baris (2)
• Catatan: misalkan Sm=∑mi =02 i = 2 m+1 − 1 j > n? Yes
– Pada permulaan for-loop pada baris (3),
• 𝑗𝑖𝑘𝑎 𝑚 = 𝑛 + 1, 𝑚𝑎𝑘𝑎 ∑ni =0 2 = 2 n +1 +1 − 1 = 2n +2 − 1
+1 i inisialisasi j ke i +1 N
– Kemudian apakah j > n?
• ∑ n+1
i =0 2 i = ∑ ni =02 i + 2 n+1 – Jika No, eksekusi body loop, yang terdiri Loo
dari baris (4) dan (5) p
• ∑in+1
=0 2 = 2
i n+1
− 1 + 2 n+1 (q.e.d) – Pada akhir body, perlu menambah j body
untuk kembali ke test. Baris
j:=j+1(4)
dan
(5)

11 12

2
9/27/2022

Apakah Analysis Algoritma itu? Analisis “Running Time” dari suatu Program
• Analisis dari suatu algoritma adalah proses menentukan
waktu yang efiein yang dibutuhkan oleh suatu algoritma tsb • Psudocode yang digunakan dalam kuliah ini
dalam menyelesaikan sejumlah masalah yang diberikan berbasis pada Bahasa Pemrograman Pascal, C,
Analisis Algoritma bertujuan memeriksa efisiensi
atau C++
algoritma dari dua segi : waktu eksekusi dan
penggunaan memori 1. Running time of Simple Statements
Prinsip pertama,
 Efisiensi waktu seberapa cepat algoritma dieksekusi
Pada Pascal assignments: read, write, or goto statement
 Efisiensi memori berapa banyak memori yang dibutuhkan untuk
memerlukan O(1) waktu, yakni sejumlah waktu konstan,
menjalankan algoritma

Untuk melakukan analisa efisiensi waktu algoritma harus


diestimasi dulu waktu eksekusi algoritma

13 14

Analisa running time of simple


The Running Time of For-Loops
statements
Algoritma Analisa keterangan • Perlu batas atas running time dari for –loop,
1. for i := 1 to n-1 do begin 1.
2. Baris 6 – 8 membentuk sebuah
yaitu jumlah waktu yang dibutuhkan oleh
2. small := 1; O(1)
3. for j := i+1 to n do 3. blok, karena selau dieksekusi iterasi dalam bodi loop
4. secara berurutan. Karena
4. if A[j] < A[small] then
5. small:= j; 5.O(1) masing-masing assignment (1) readln(n);
6. temp := A[small]; 6.O(1) memerlukan O(1) waktu, maka (2) for i := 1 to n do
7. A[small] := A[i]; 7.O(1) blok baris 6 – 8 perlu waktu (3) for j := 1 to n do (4)
8. A[i] := temp A[i,j] :=
9. end
8.O(1) O(1) waktu.
0;
(5) for i := 1 to n do
Kenapa baris-5 tidak menjadi satu blok dengan baris 6 – 8 ? (6)
A[i,i ] := 1;

15 16

time = nLoop x tLoop


Algorithm sequential search (A[0..n-1], K)
// searches for a given value in a given array by sequential search time = estimasi waktu eksekusi algoritma untuk
// input: an array A[0..n-1] and a search key K
// output: returns the index of the first element of A that matches
input tertentu
K or -1 if there are no matching elements,
Hitung jumlah assignment masing masing baris ?

i0 1x // input nLoop = berapa kali loop dieksekusi


while i < n and A[i]  K do 2x //
perbandingan

ii+1 1x //
tLoop = waktu yang diperlukan untuk
input mengeksekusi loop 1 kali.
if i < n return i 2x // Biasanya ditentukan 1 satuan
perbandingan dan input hasil
waktu tanpa dispesifikasikan
else return -1 Jelaskan algoritma di1x atas
// input
berapa nilainya

17 18

3
9/27/2022

Asumsikan array A terdiri atas n elemen. Langkah-langkah umum untuk menganalisa


efisiensi waktu algoritma nonrekursif

Best case : k ditemukan di elemen 1. Tentukan parameter yang mengindikasikan ukuran input

pertama array A. time = 1 x 1 satuan waktu 2. Identifikasi basic operation algoritma


3. Tentukan apakah untuk ukuran input yang sama
Average case : k ditemukan di elemen banyaknya eksekusi basic operation bisa berbeda
tengah array A. time = n/2 x 1 satuan waktu 4. Tentukan rumus sigma yang menunjukkan berapa kali
basic operation dieksekusi
Worst case : k ditemukan di elemen 5. Selesaikan rumus sigma untuk menghitung banyaknya
paling akhir array A. time = n x 1 satuan eksekusi basic operation
waktu

19 20

Step 1 = Tentukan parameter yang


mengindikasikan ukuran input
Step 2 = Identifikasi basic operation algoritma
 Sesuatu pada input yang jika nilainya bertambah akan menyebabkan  Waktu yang diperlukan untuk mengeksekusi loop 1 kali
banyaknya eksekusi loop bertambah  Dapat diwakili oleh sebuah operasi pada loop paling
 Contoh, algoritma untuk menghitung Xn menggunakan cara Xn = X * X dalam.
*X*
… * X sebanyak n kali. Parameter ukuran inputnya adalah nilai n, karena  Operasi yang dipilih adalah operasi yang selalu
jika n makin besar, maka banyaknya eksekusi loop bertambah dilakukan ketika loop dieksekusi
 Bagaimana dengan nilai X?
 Untuk algoritma sequential search, basic operationnya
 Untuk algoritma sequential search, parameter ukuran inputnya adalah dapat digunakan i < n
banyaknya elemen array (n)
 i < n dieksekusi 1 kali setiap loop dieksekusi
 Mengapa nilai elemen array tidak?

21 22

Step 4 = Tentukan rumus sigma yang menunjukkan


berapa kali basic operation dieksekusi
Step 3 = Tentukan apakah untuk ukuran input yang sama
banyaknya eksekusi basic operation bisa berbeda
C(n) = banyaknya eksekusi basic operation untuk input
 Pada sequential search, parameter untuk ukuran input adalah ukuran n
n atau banyaknya elemen array
Untuk sequential search best casenya
 Untuk n tertentu, apakah banyaknya eksekusi basic operation 1
bisa berbeda? C(n) = 1
 Jika elemen pertama array input A bernilai k, maka banyaknya
i=1
eksekusi basic operation untuk n tertentu C(n)= 1
 Jika k ditemukan di elemen terakhir, maka C(n)= n
Best case terjadi jika elemen pertama A bernilai K
 Perlu diadakan analisa best case, worst case dan average
case

23 24

4
9/27/2022

Step 4 = Tentukan rumus sigma yang menunjukkan Step 4 = Tentukan rumus sigma yang menunjukkan
berapa kali basic operation dieksekusi berapa kali basic operation dieksekusi

Untuk sequential search worst casenya Average case pada sequential search
n

Asumsikan
C(n) = 1
i=1  Data K memang ada di A
Worst case terjadi jika elemen A yang bernilai K  Probabilitas K terletak di elemen tertentu A
merupakan elemen terakhir atau tidak ada elemen A terdistribusi merata.
yang bernilai K  Probabilitas K terletak di elemen ke i = 1/n

25 26

Step 4 = Tentukan rumus sigma yang menunjukkan Step 4 = Tentukan rumus sigma yang menunjukkan
berapa kali basic operation dieksekusi berapa kali basic operation dieksekusi

Posisi K Banyaknya Probabilitas Kontribusi pada Average case pada sequential search
ditemukan eksekusi basic terjadi C(n)
operation
n
1 1 1/n 1 * 1/n
1
2 2 1/n 2 * 1/n C(n) = 
i i * n
… … … … =1
… … … …
n n n N * 1/n

Bentuk umum : i * 1 / n

27 28

Step 5 = Selesaikan rumus sigma yang menunjukkan Step 5 = Selesaikan rumus sigma yang menunjukkan
berapa kali basic operation dieksekusi berapa kali basic operation dieksekusi

Best case untuk sequential search Worst case untuk sequential search
1 n

C (n) =  1 C (n) =  1
i=1 i=1

C(n) = 1 C(n) = n
• Best case pada sequential search C (n) = 1  Worst case pada sequential search C(n) = n
• Untuk input berukuran n, basic operation dilakukan  Untuk input berukuran n, basic operation dilakukan
1 kali n kali

29 30

5
9/27/2022

Step 5 = Selesaikan rumus sigma yang menunjukkan Step 5 = Selesaikan rumus sigma yang menunjukkan
berapa kali basic operation dieksekusi berapa kali basic operation dieksekusi

Average case pada sequential search Pada sequential search, average casenya

C (n) =
(n +1)
n

C(n) =  1 2
i i * n
1n
=1
• Untuk n = 10, C(n) = 5,5
C(n) =
n i
i =1
• Apakah itu berarti K berada pada elemen 5 atau 6
• Apa artinya?
C(n) = 1 * 1 n(1+n n)2= 1 (1+ n)

31 32

Estimasi waktu running algoritma sequential search Soal 1


Algorithm uniqueElement(A[0..n-1])
T(n) = Cop* C(n) //memeriksa apakah setiap elemen A unik
//input : array A[0..n-1]
T(n) = Waktu yang diperlukan untuk mengeksekusi
//output : mengembalikan true jika setiap elemen A unik dan false jika
algoritma dengan input berukuran n terdapat beberapa elemen yang nilainya sama
Cop = Waktu untuk mengeksekusi basic operation 1 for i ← 0 to n – 2 do
kali. Biasanya ditentukan 1 satuan waktu for j ← i + 1 to n - 1 do
If A[i] = A[j] return false
Hitung T(n) untuk sequential search pada best case, Return true
worst case dan average case!
Estimasi running time algoritma uniqueElement! (Anany levitin halaman
63)

33 34

Tugas

 Buat algoritma untuk menghitung Xn secara iteratif


menggunakan cara Xn = X * X * X * … * X sebanyak n kali.
 Estimasi running time algoritma yang anda buat

35

Anda mungkin juga menyukai