DISUSUN OLEH :
Nim : 4192550002
2020
def fibonacci(n):
if n <= 2:
hasil = 1
else:
hasil = fibonacci(n - 1) + fibonacci(n - 2)
return hasil
Algoritma fibonacci sederhana seperti di atas dapat dikatakan sebagai algoritma D&C,
karena kita membagikan perhitungan fibonacci ke dua fungsi fibonacci, sampai didapatkan nilai
hasil terkecilnya. Pemanggilan fungsi fibonacci di atas dapat digambarkan seperti berikut:
memo = dict()
def fibonacci_dp(n):
if n in memo.keys():
return memo[n]
elif n <= 2:
hasil = 1
else:
hasil = fibonacci_dp(n - 1) + fibonacci_dp(n - 2)
memo[n] = hasil
return hasil
Dengan menyimpan hasil kalkulasi dari fungsi yang telah ada, maka proses pemanggilan
fungsi akan menjadi seperti berikut:
def fibonacci_dp_bu(n):
memo = dict()
for i in range(1, n + 1):
if i <= 2:
hasil = 1
else:
hasil = memo[i - 1] + memo[i - 2]
memo[i] = hasil
return memo[n]
Untuk melihat efek langsung dari ketiga fungsi tersebut, coba jalankan ketiga fungsi
tersebut untuk n yang sama, dan lihat perbedaan waktu eksekusinya! Sebagai latihan tambahan,
hitung juga kompleksitas dari ketiga fungsi perhitungan fibonacci tersebut.
Mari kita rangkum hal yang telah kita pelajari mengenai Dynamic Programming sejauh ini:
Berikut adalah contoh mencari jalur lintas terpendek menggunakan algoritma dynamic.
Tahap 1 :
S x1 Solusi Optimum
1 F1(s) X1*
2 2 2 1
3 4 4 1
4 3 3 1
Tahap 2 :
S X2 Solusi Optimum
2 3 4 F2(s) X2*
5 9 7 7 7 3 atau 4
6 6 6 4 4 4
7 8 8 8 8 2, 3 atau 4
Tahap 3 :
S X3 Solusi Optimum
5 6 7 F3(s) X3*
8 8 10 11 8 5
9 11 7 11 7 6
Tahap 4 :
S X4 Solusi Optimum
8 9 F4(s) X4*
10 11 11 11 8 atau 9
Maka dapat disimpulkan bahwa jalur terpendek dari 1-10 dengan menggunakan
Algoritma Dynamic adalah 10-8-5-4-1 atau 1-4-5-8-10 dengan cost 11.