0% menganggap dokumen ini bermanfaat (0 suara)
6 tayangan6 halaman

Dynamic Program

Diunggah oleh

syafiqferdinan85
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
6 tayangan6 halaman

Dynamic Program

Diunggah oleh

syafiqferdinan85
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 6

BAB I: PENDAHULUAN

1.1 Latar Belakang

Menjelaskan pentingnya efisiensi dalam pemrograman, terutama dalam menyelesaikan masalah


optimasi dan kombinatorik. Dynamic programming sebagai solusi efektif untuk masalah dengan
submasalah yang berulang.

1.2 Rumusan Masalah

 Apa itu dynamic programming?

 Bagaimana cara menghitung koefisien binomial menggunakan DP?

 Bagaimana algoritma Warshall diterapkan dan dioptimalkan dengan pendekatan DP?

1.3 Tujuan

 Memahami konsep dasar dynamic programming

 Menerapkan DP dalam menghitung koefisien binomial

 Menjelaskan penggunaan DP dalam algoritma Warshall

1.4 Manfaat

 Memberikan pemahaman praktis tentang penerapan DP

 Menunjukkan efisiensi algoritma melalui contoh nyata

 Membantu mahasiswa memahami keterkaitan antar topik algoritma

BAB II: LANDASAN TEORI

2.1 Dynamic Programming

 Pengertian dan sejarah singkat

Pemrograman dinamis (dynamic programming) adalah metode optimasi matematika dan


pendekatan algoritmik yang digunakan untuk memecahkan masalah dengan
memecahkannya menjadi sub-masalah yang lebih kecil dan saling terkait. Teknik ini,
dikembangkan oleh Richard Bellman pada tahun 1950-an, bertujuan untuk menghindari
perhitungan ulang dengan menyimpan solusi sub-masalah yang telah dihitung

 Konsep overlapping subproblems & optimal substructure

 Overlapping Subproblems: Submasalah yang sama dipecahkan berulang kali.


Solusinya adalah dengan menggunakan memoization untuk menyimpan hasil dari
submasalah yang sudah diselesaikan.
 Optimal Substructure: Struktur solusi optimal dari masalah utama bisa diperoleh
dari solusi optimal dari submasalah. Pendekatan ini sering digunakan dalam
algoritma greedy dan Dynamic Programm.

 Pendekatan top-down (memoization) dan bottom-up (tabulation)


 Top-Down (Memoization): Pendekatan ini memecah masalah besar menjadi
submasalah yang lebih kecil secara rekursif dan menyimpan hasilnya untuk
menghindari perhitungan berulang.
 Bottom-Up (Tabulation): Pendekatan ini menyelesaikan submasalah terkecil terlebih
dahulu dan menggunakan hasilnya untuk menyelesaikan submasalah yang lebih
besar hingga mencapai solusi akhir.

 Contoh kasus klasik: Fibonacci, knapsack

 Fibonacci Sequence adalah salah satu contoh paling sederhana dari Dynamic
Programm. Misalkan kita ingin menghitung nilai Fibonacci ke-n, kita bisa
menggunakan pendekatan top-down dengan memoization atau bottom-up dengan
tabulation.
 Knapsack Problem adalah masalah optimasi di mana kita harus memilih item dengan
nilai maksimal tanpa melebihi kapasitas tas.
2.2 Koefisien Binomial

 Pengertian kombinasi dan notasi (nk)

Kombinasi adalah cara memilih sejumlah objek dari suatu kumpulan tanpa memperhatikan
urutan. Artinya, dalam kombinasi, urutan pemilihan tidak penting. Contoh: Memilih 2 orang
dari 3 orang: A, B, dan C.
Pasangan AB dan BA dianggap sama dalam kombinasi (berbeda dengan permutasi yang
menganggap urutan penting).

Kombinasi dari n objek yang dipilih k objek ditulis sebagai: (nk)atauC(n,k) Dibaca: "n pilih k"
(n choose k)

 Rumus faktorial dan segitiga Pascal

 Faktorial (n!) adalah hasil perkalian semua bilangan bulat positif dari 1 sampai n.
Rumus Koefisien Binomial: (n!)/(k!(n-k)!), di mana: n adalah total item dan k adalah
jumlah item yang dipilih. Contoh: 5! = 5 * 4 * 3 * 2 * 1 = 120
 Susunan angka yang membentuk segitiga, dengan setiap angka adalah jumlah dari
dua angka di atasnya. Segitiga Pascal dapat digunakan untuk langsung melihat
koefisien binomial untuk berbagai nilai n dan k. Contoh:
a. Baris ke-2 segitiga Pascal adalah 1, 2, 1, yang sesuai dengan koefisien (x + y)²
= x² + 2xy + y²
b. Baris ke-3 segitiga Pascal adalah 1, 3, 3, 1, yang sesuai dengan koefisien (x +
y)³ = x³ + 3x²y + 3xy² + y³

 Kekurangan pendekatan faktorial biasa

Pendekatan faktorial biasa untuk menghitung koefisien binomial, yaitu menggunakan rumus
n! / (k! * (n-k)!), bisa menjadi kurang efisien dan rentan terhadap kesalahan perhitungan
saat n atau k bernilai besar. Ini karena faktorial (n!) tumbuh sangat cepat, bahkan dengan
nilai n yang relatif kecil, sehingga dapat menyebabkan masalah overflow atau underflow
dalam perhitungan. Selain itu, menghitung faktorial secara langsung dapat memakan waktu
dan sumber daya komputasi, terutama jika diperlukan untuk berbagai nilai n dan k.

 Penghitungan (nk) menggunakan DP


Untuk menghitung nilai kombinasi (nk)\binom{n}{k}(kn) secara efisien, dapat digunakan
pendekatan Dynamic Programming (DP), yaitu dengan menyimpan hasil perhitungan
sebelumnya untuk menghindari pengulangan komputasi. Hal ini memanfaatkan sifat rekursif
dari kombinasi yang disebut juga sebagai segitiga Pascal, yaitu: (nk)=(n−1k−1)+(n−1k)
dengan basis: (n0)=1 dan (nn)=1
Langkah-langkah menghitung (nk) dengan DP:
a. Buat tabel 2 dimensi dp[n+1][k+1] berisi angka nol.
b. Isi elemen dasar (base case):
dp[i][0] = 1 untuk semua i
dp[i][i] = 1 untuk semua i
c. Gunakan rumus rekursif untuk mengisi elemen lainnya:
dp[i][j]=dp[i−1][j−1]+dp[i−1][j]
d. Hasil akhir terdapat pada dp[n][k]

2.3 Algoritma Warshall

 Definisi graf berarah dan transitive closure

 Graf berarah (directed graph) adalah graf di mana setiap sisi memiliki arah yang jelas
dari satu simpul ke simpul lainnya. Dengan kata lain, jika ada sisi dari simpul A ke
simpul B, maka simpul B tidak dapat secara otomatis dijangkau dari simpul A. Graf
berarah dapat digunakan untuk merepresentasikan hubungan yang tidak simetris,
seperti jalan satu arah atau hubungan hierarki.
 Penutupan transitif (transitive closure) dari graf berarah dengan n simpul adalah
matriks boolean n x n, di mana elemen (i, j) bernilai 1 jika ada lintasan dari simpul i
ke simpul j, dan bernilai 0 jika tidak ada lintasan. Dengan kata lain, penutupan
transitif memberikan informasi tentang keterjangkauan antara setiap pasangan
simpul dalam grafik.

 Tujuan algoritma Warshall

Tujuan utama algoritma Warshall, yang juga dikenal sebagai algoritma Floyd-Warshall, adalah
untuk mencari jalur terpendek antara semua pasangan simpul (node) dalam sebuah graf
(graph). Algoritma ini tidak hanya mencari jalur terpendek dari satu titik awal ke semua titik
lain, tetapi juga mencari jalur terpendek dari setiap titik ke semua titik lain dalam graf
tersebut secara bersamaan

 Penjelasan logika dasar:

T[i][j]=T[i][j]∨(T[i][k]∧T[k][j])T[i][j] = T[i][j] \lor (T[i][k] \land T[k][j])T[i][j]=T[i][j]∨(T[i][k]∧T[k][j])

 T[i][j] menyatakan apakah ada jalur dari node i ke node j.


 T[i][k] dan T[k][j] masing-masing menyatakan apakah ada jalur dari i ke k, dan dari k
ke j.
 \land = AND (keduanya harus true).
 \lor = OR (salah satu true sudah cukup).

Jadi, jika sebelumnya tidak ada jalur langsung dari i ke j, tapi ternyata ada jalur dari i ke k dan
dari k ke j, maka kita tahu sekarang ada jalur dari i ke j secara transitif.

 Kaitan algoritma Warshall dengan DP


Floyd-Warshall adalah contoh paradigmatik pemrograman dinamis yang
mengimplementasikan prinsip optimal substructure dan bottom-up computation untuk
menyelesaikan masalah kompleks secara efisien. Algoritma ini menunjukkan bagaimana DP
dapat digunakan untuk optimasi graf dengan memanfaatkan penyimpanan solusi
submasalah

BAB III: METODOLOGI

3.1 Perancangan Algoritma

Perancangan algoritma dilakukan dengan pendekatan Dynamic Programming (DP), yaitu strategi
pemrograman yang menyimpan hasil submasalah agar tidak dihitung ulang. Dua algoritma yang
digunakan yaitu: Binomial Coefficient dan Algoritma Warshall.

a. Pseudocode DP untuk binomial coefficient

Algoritma ini menghitung kombinasi C(n, k) menggunakan tabel 2D. Pendekatan


tabulasi menyimpan setiap hasil kombinasi hingga baris ke-n dan kolom ke-k, sehingga
perhitungan efisien dan tidak rekursif.

b. Pseudocode Warshall dengan pendekatan tabulasi

Algoritma Warshall digunakan untuk menghitung transitive closure dari sebuah graf,
yaitu mencari apakah ada jalur langsung atau tidak langsung antara dua simpul. Matriks awal
diupdate secara iteratif jika ada jalur penghubung antara dua simpul melalui simpul ketiga.

3.2 Implementasi Program

a. Implementasi dalam Python

Kedua algoritma diimplementasikan menggunakan Python. Untuk Binomial Coefficient, fungsi


menggunakan nested loop untuk mengisi tabel kombinasi. Untuk Warshall, digunakan 3 lapis
nested loop untuk memperbarui matriks adjacency.

b. Pengujian dengan Input yang Berbeda

Binomial Coefficient

Input: n = 5, k = 2
Output: 10
Interpretasi: Kombinasi dari 5 elemen diambil 2.

Algoritma Warshall

Input Matriks:
[1, 1, 0]
[0, 1, 1]
[0, 0, 1]
Output setelah Warshall:
[1, 1, 1]
[0, 1, 1]
[0, 0, 1]
Interpretasi: Simpul ke-0 kini terhubung secara tidak langsung ke simpul ke-2.
BAB IV: HASIL DAN PEMBAHASAN

4.1 Hasil Perhitungan Koefisien Binomial

 Tabel hasil dari berbagai nnn dan kkk

 Visualisasi segitiga Pascal hasil DP

4.2 Hasil Eksekusi Algoritma Warshall

 Matriks transitive closure

 Studi kasus konektivitas graf

4.3 Analisis Efisiensi

 Perbandingan waktu dan ruang antara pendekatan biasa vs DP

 Kompleksitas waktu dan ruang

BAB V: PENUTUP

5.1 Kesimpulan

 DP meningkatkan efisiensi dalam masalah berulang

 Koefisien binomial dan transitive closure dapat dihitung dengan efisien menggunakan DP

5.2 Saran

 Perlu eksplorasi penerapan DP pada topik lain (misal AI atau machine learning)

 Implementasi dapat dikembangkan dengan visualisasi GUI

DAFTAR PUSTAKA

https://www.codepolitan.com/blog/apa-itu-dynamic-programmingpengertian-contoh-problem-dan-
solusi/

https://id.wikipedia.org/wiki/Pemrograman_dinamis

https://primakara.ac.id/blog/info-teknologi/algoritma

https://study.com/academy/lesson/binomial-coefficient-formula-examples.html

https://informatika.stei.itb.ac.id

https://ejurnal.stmik-budidarma.ac.id/index.php/jurikom/article/download/76/52

Anda mungkin juga menyukai