algoritma struktur data€¦ · 9. wirth, niklaus, algorithmic + data structures programs,...
TRANSCRIPT
Algoritma Struktur Data3 sks
By. Sri Rezeki Candra Nursari
MateriMateriPengantar Struktur Data
Abstract Data Type (ADT)
Rekursif : Fibonacci
Sorting (Selection, Insertion, Bubble, Shell, Merge, Quick)
Struktur Data Linier (Linked List, Stack, Queu)
Struktur Data Hirarki (Tree, Graph, Hash Tables)
Search (Sequential, Fibonacci, Interpolation, Binary)
Literatur :1. H.M Deitel, P.J Deitel, Small Java How to Program-sixth
Edition, Pearson Prentice Hall, 20052. Elliot B. Koffman, Paul A.T. Wolfgang, Objects, Abstraction,
Data Structures and Design Using Java, John Wiley & Sons.Inc, 2005
3. Mark Allen Weiss, Data Structures & Algorithm Analysis in Java, Addison-Wesley, 1999
4. Moh.Sjukani, Algoritma & Struktur Data dengan C, C++ dan Java, Mitra Wacana Media, Agustus 2005
5. Andri Kristanto, Struktur Data dengan C, Graha Ilmu, 20036. Bambang Wahyudi, Pengantar Struktur Data dan Algoritma,
Andi, 20047. Ema Utami, Struktur Data, Graha Ilmu, 20078. Yatini B, Indra, Pemrograman Terstruktur, J&J Learning
Yogyakarta, 20019. Wirth, Niklaus, Algorithmic + Data Structures Programs,
Prentice-Hall, 197610. Thompson Susabda Ngoen , Algoritma dan Struktur Data
Bahasa C, Mitra Wacana Media, 2009
ALGORITMA ALGORITMA STRUKTUR STRUKTUR DATADATA -- 33 sks sks
Fungsi Rekursif
• Definisi fungsi rekursif.• Contoh 1 : Faktorial• Contoh 2 : Perkalian• Contoh 3 : Fibonacci• Contoh 4 : Tower of Hanoi
Fungsi Rekursif
• Fungsi biasa dipanggil oleh fungsi lain. Sedangkan fungsi rekursif dipanggil oleh dirinya sendiri.
A B C D A A A A
Rekursif
• Rekursif berarti suatu proses yang memanggil dirinya sendiri.
• Rekursif terdiri dari prosedur atau fungsi. • Perbedaannya adalah bahwa rekursif
bisa memanggil ke dirinya sendiri, tetapi prosedur atau fungsi harus dipanggil lewat pemanggil prosedur atau fungsi.
Rekursif• Pemanggilan prosedur atau fungsi ke
dirinya sendiri bisa berarti proses yang berulang yang tidak dapat diketahui kapan akan berakhir.
• Dalam pemakaian sehari-hari, rekursi merupakan teknik pemrograman yang berdaya guna untuk digunakan pada pekerjaan pemrograman dengan mengeksperisikannya ke dalam suku-suku dari program lain dengan menambahkan langkah-langkah sejenis.
Fungsi Rekursif
• Setara dengan proses looping/ iterasi faktorial, perkalian
• Kadang rekursif lebih baik dari iterasi tower of hanoi
• Terkadang sebaliknya fibonacci• Komponen :
– Way out if – else + return()– Recursive call dengan value baru
Buat 6 kelompok
Contoh 1: Faktorial
1! = 12! = 23! = 64! = 245! = 1206! = 7207! = 5040
Buat dengan menggunakan Class !!!
Algoritma.........?????Pseudocode.......??????
1. Faktorial – Contoh 2ALGORITMA
n! = 1 if n == 0n! = n * ( n – 1 )! if n > 04! = 4 x 3!
3! = 3 x 2!2! = 2 x 1!
1! = 1 x 0!0! = 1
SOURCE CODE
int factorial ( int n ){
int x, y;if ( n == 0 )
return ( 1 );x = n – 1;y = factorial ( x );return ( n * y );
}
Berdasarkan cuplikan source code, 1. Buat dengan menggunakan tanpa Class !!!2. Buat dengan menggunakan Class !!!
2. PerkalianALGORITMA
a * b = a if b == 1a * b = a * ( b – 1 ) + a if b > 16 x 3 = ( 6 x 2 ) + 6
= ( 6 x 1 ) + 6 + 6= 6 + 6 + 6= 18
SOURCE CODE
int mult ( int a, int b ){
int c, d, sum;if ( b == 1 ) return ( a );c = b – 1;d = mult ( a, c );sum = d + a;return ( sum );
}
Berdasarkan cuplikan source code, 1. Buat dengan menggunakan tanpa Class !!!3. Berdasarkan soal no 1 buat step by step2. Buat dengan menggunakan Class !!!
3. Fibonacci
• The Fibonacci series fn≥0 is a famous series defined by:
f0 :≡ 0, f1 :≡ 1, fn≥2 :≡ fn−1 + fn−2
• f2 = f0 + f1 = 0 + 1 = 1• f3 = f1 + f2 = 1 + 1 = 2• f4 = f2 + f3 = 1 + 2 = 3• f5 = f3 + f4 = 2 + 3 = 5• …. Leonardo Fibonacci
1170-1250
3. Fibonacci
Tracing Fibonacci• fibo (2) = ?
F(2)
F(0) F(1)
Tracing Fibonacci• fibo (3) = ?
F(3)
F(1) F(2)
F(0) F(1)
Tracing Fibonacci• fibo (4) = ? F(4)
F(2) F(3)
F(0) F(1) F(1) F(2)
F(0) F(1)
3. FibonacciALGORITMA
fibo( n ) = n if n == 0 or n == 1fibo( n ) = fibo( n – 2 ) + fibo( n – 1 ) if n
>= 2
fibo( 4 ) = fibo( 2 ) + fibo( 3 )= fibo( 0 ) + fibo ( 1 ) + fibo( 3 )= 0 + 1 + fibo( 1 ) + fibo( 2 )= 0 + 1 + 1 + fibo( 0 ) + fibo( 1 )= 0 + 1 + 1 + 0 + 1 = 3
SOURCE CODE
int fibo ( int n ){
int x, y;if ( n <= 1 ) return ( n );x = fibo ( n – 1);y = fibo ( n – 2);return ( x + y );
}
Berdasarkan cuplikan source code, 1. Buat dengan menggunakan tanpa Class !!!2. Berdasarkan contoh no 1 buat step by step3. Buat dengan menggunakan struct !!!4. Berdasarkan contoh no 1 buat step by step
dengan menggunakan struct5. Buat dengan menggunakan Class !!!6. Berdasarkan contoh no 1 buat step by step
dengan menggunakan class
4. Towers of HanoiALGORITMA1. If n == 1, move the single disk from A to C and stop.2. Move the top n – 1 disks from A to B, using C as auxiliary.3. Move the remaining disk from A to C.4. Move the n – 1 disks from B to C, using A as auxiliary.
SOURCE CODEvoid towers( int n, char from, char to, char aux){
if ( n == 1 ) { printf(“\nmove disk 1 from %c to %c”, from, to); return;
}towers( n – 1, from, aux, to );printf(“\nmove disk %d from %c to %c”, n, from, to);towers( n – 1, aux, to, from );
}
Tracing Towers of Hanoi• towers(3, A, B, C) = ?
Hanoi
Jumlah Perpindahan Dengan 3 Menara
Jumlah Keping Jumlah Perpindahan Proses Perpindahan
1 JP1 = 1 JP1 = 1
2 JP2 = 3 JP2 = 2 * JP1 + 1
3 JP3 = 7 JP3 = 2 * JP2 + 1
4 JP4 = 15 JP4 = 2 * JP3 + 1
5 JP5 = 31 JP5 = 2 * JP4 + 1
6 JP6 = 63 JP6 = 2 * JP5 + 1
7 JP7 = 127 JP7 = 2 * JP6 + 1
....
....
....
....
n JPn = ....... JPn = 2 * JPn + 1
Jumlah Perpindahan Dengan 4 Menara
Jumlah Keping Jumlah Perpindahan Proses Perpindahan
1 JP1 = 1 JP1 = 1
2 JP2 = 2 JP2 = 2
3 JP3 = 5 JP3 = 2 * JP2 + 1
4 JP4 = 11 JP4 = 2 * JP3 + 1
5 JP5 = 22 JP5 = 2 * JP4 + 1
6 JP6 = 45 JP6 = 2 * JP5 + 1
7 JP7 = 91 JP7 = 2 * JP6 + 1
....
....
....
....
n JPn = ....... JPn = 2 * JPn + 1
TRACING Towers of Hanoi
Towers(4 keping, A, B, C) =