• dcc.dp@undipa.ac.id
  • Alamat: Jl. Perintis Kemerdekaan III, BTN Hamzy Blok Q No.3, Makassar, Indonesia

Pemrograman Dinamis: Karakteristik, Metode, dan Contohnya

User 5 Comments Juni 05, 2023

Pemrograman Dinamis: Karakteristik, Metode, dan Contohnya

Pemrograman Dinamis: Karakteristik, Metode, dan Contohnya

Pemrograman dinamis adalah teknik solvabilitas yang dapat menyederhanakan proses yang mengandung banyak submasalah. Profesional dalam analisis data, pemrograman dan pengembangan perangkat lunak sering menerapkan proses ini untuk merampingkan pekerjaan mereka karena pemrograman dinamis dapat membantu mengoptimalkan proses pengkodean untuk banyak aplikasi komputer. Jika Anda memasuki peran yang membutuhkan keterampilan pemrograman dan pengkodean, akan bermanfaat untuk memahami bagaimana Anda dapat mengintegrasikan pemrograman dinamis ke dalam proyek Anda.

Pada artikel ini, kami mendefinisikan pemrograman dinamis dan karakteristiknya, mengeksplorasi metode untuk digunakan saat menghitung masalah pengkodean rekursif dengan pemrograman dinamis dan menawarkan contoh.

Apa itu pemrograman dinamis?

Pemrograman dinamis adalah proses untuk memecahkan masalah optimasi. Dalam proyek pengembangan perangkat lunak, pemrograman dinamis menggunakan algoritma yang memecah masalah pengkodean kompleks menjadi submasalah. Programmer kemudian dapat menerapkan solusi yang dioptimalkan untuk seluruh masalah, tergantung pada jenis solusi yang mereka peroleh dari setiap submasalah dalam kode.

Pemrograman dinamis juga mengoptimalkan rekursi biasa, yang membantu menghilangkan kebutuhan untuk menghitung ulang data input nanti.

Karakteristik pemrograman dinamis

Pemrograman dinamis memiliki dua karakteristik penting, yakni :

1.    Submasalah tumpang tindih

Submasalah adalah variasi yang lebih kecil dari masalah asli yang lebih besar. Misalnya, dalam deret Fibonacci, setiap angka dalam deret adalah jumlah dari dua angka sebelumnya (0, 1, 1, 2, 3, 5, 8,...). Jika Anda ingin menghitung nilai Fibonacci ke-n dalam urutan, Anda dapat memecah seluruh masalah menjadi submasalah yang lebih kecil. Submasalah ini kemudian tumpang tindih satu sama lain saat Anda menemukan solusi dengan menyelesaikan submasalah yang sama berulang kali.

Tumpang tindih dalam submasalah terjadi dengan masalah apa pun, yang memungkinkan Anda menerapkan pemrograman dinamis untuk memecah tugas pemrograman yang kompleks menjadi bagian-bagian yang lebih kecil.

2.    Substruktur memiliki sifat optimal

Properti substruktur optimal terwujud ketika Anda dapat mencapai solusi optimal setelah membangun semua solusi lain yang terjadi dari setiap submasalah yang Anda pecahkan. Solusi yang Anda hitung Dari setiap tumpang tindih berlaku untuk masalah keseluruhan agar berfungsi dan mengoptimalkan rekursi. Dalam contoh deret Fibonacci, setiap submasalah berisi solusi yang dapat Anda terapkan pada setiap submasalah berturut-turut untuk menemukan angka berikutnya dalam seri, membuat seluruh masalah menampilkan properti substruktur optimal.

Metode pemrograman dinamis

Saat menerapkan pemrograman dinamis ke proyek Anda, Anda dapat menerapkan dua metode dibawah in:

1.    Metode top-down

Metode top-down memecahkan masalah keseluruhan sebelum Anda memecahnya menjadi submasalah. Proses ini bekerja untuk memecahkan masalah yang lebih besar dengan menemukan solusi untuk submasalah secara rekursif, caching setiap hasil. Proses menghafal ini membantu menghindari penyelesaian masalah berulang kali jika Anda menyebutnya lebih dari sekali. Dengan metode top-down, Anda dapat mengembalikan hasil yang Anda simpan saat Anda menyelesaikan masalah secara keseluruhan, sehingga menyimpan hasil masalah yang telah Anda pecahkan.

2.    Metode bottom-up

Dalam metode bottom-up, atau metode tabulasi, Anda menyelesaikan semua sub-masalah terkait terlebih dahulu daripada menerapkan rekursi. Karena tabulasi bottom-up membutuhkan beberapa penyelesaian, pemrograman dinamis menggunakan tabel n-dimensi, di mana n mewakili nilai nol atau lebih besar. Saat Anda menyelesaikan setiap submasalah dalam tabel, Anda kemudian dapat menggunakan hasilnya untuk menghitung masalah asli.

Contoh pemrograman dinamis

Untuk memahami bagaimana Anda dapat menerapkan kedua metode untuk menggunakan pemrograman dinamis, gunakan contoh berikut untuk menerapkan proses ke deret Fibonacci:

Contoh top-down

Terapkan deret Fibonacci, di mana setiap angka dalam seri mewakili jumlah dari dua angka pertama sebelumnya:

{0, 1, 1, 2, 3, 5, 8,...}

Memahami bahwa jumlah dari dua nilai pertama sebelumnya adalah angka berikutnya dalam seri dapat membantu Anda menyelesaikan seluruh masalah ketika Anda ingin menghitung angka Fibonacci ke-n. Karena Anda mengetahui pola untuk menghitung nilai masa depan dalam seri, Anda dapat menerapkan rumus untuk menentukan solusi optimal tanpa memecah masalah menjadi submasalah yang lebih kecil. Dengan menggunakan rumus yang sesuai saat n > 1, Anda dapat menghitung solusi optimal dengan metode top-down saat mencari nilai ke-n 13:

Fib(n) = Fib(n - 1) + Fib(n - 2) =

Fib(13) = Fib(13 - 1) + Fib(13 - 2) =

Fib(n) = Fib(12) + Fib(11) = 23

Dengan menggunakan pendekatan top-down dan menerapkan hafalan, Anda dapat menyimpan hasil 23 dalam database untuk dimasukkan dan dipanggil string kode untuk tugas tambahan.string kode untuk tugas tambahan.

Contoh bottom-up

Dalam contoh ini, terapkan deret Fibonacci untuk memecah seluruh perhitungan saat Anda ingin menghitung nilai ke-n dalam deret tersebut. Dengan urutan angka yang sama {0, 1, 1, 2, 3, 5, 8,...} , Anda dapat melihat bahwa nilai berikutnya dalam seri menghasilkan 13, karena 5 dan 8 memberikan jumlah 13.

Menggunakan metode bottom-up untuk memecah seluruh masalah Fib(n), terapkan persamaan urutan [Fib(n - 1) + Fib(n - 2), ketika n > 1] untuk setiap submasalah yang ingin Anda temukan solusi optimalnya. Misalkan Anda ingin menghitung nilai ke-n berikutnya ketika n = 23:

Fib(n) = Fib(n - 1) + Fib(n - 2) =

Fib(23) = Fib(23 - 1) + Fib(23 - 2) =

Fib(23) = Fib(22) + Fib(21) = Fib(43)

Hasil Fib(43) kemudian berlaku untuk perhitungan nilai berikutnya dalam seri ketika n = 43:

Fib(n) = Fib(n - 1) + Fib(n - 2) =

Fib(43) = Fib(43 - 1) + Fib(43 - 2) =

Fib(n) = Fib(42) + Fib(41) = Fib(83) maka

Fib(83) = Fib(83 - 1) + Fib(83 - 2) =

Fib(83) = Fib(82) + Fib(81) = Fib(163)

Anda dapat terus menggunakan solusi optimal ini untuk setiap submasalah untuk menghitung nilai berikutnya dalam deret Fibonacci, memberi Anda kemampuan untuk memecah masalah awal Fib (n) = Fib (n - 1) + Fib (n - 2), ketika n > 1.

Contoh bottom-up

Dalam contoh ini, terapkan deret Fibonacci untuk memecah seluruh perhitungan saat Anda ingin menghitung nilai ke-n dalam deret tersebut. Dengan urutan angka yang sama {0, 1, 1, 2, 3, 5, 8,...} , Anda dapat melihat bahwa nilai berikutnya dalam seri menghasilkan 13, karena 5 dan 8 memberikan jumlah 13.

Menggunakan metode bottom-up untuk memecah seluruh masalah Fib(n), terapkan persamaan urutan [Fib(n - 1) + Fib(n - 2), ketika n > 1] untuk setiap submasalah yang ingin Anda temukan solusi optimalnya. Misalkan Anda ingin menghitung nilai ke-n berikutnya ketika n = 23:

Fib(n) = Fib(n - 1) + Fib(n - 2) =

Fib(23) = Fib(23 - 1) + Fib(23 - 2) =

Fib(23) = Fib(22) + Fib(21) = Fib(43)


Hasil Fib(43) kemudian berlaku untuk perhitungan nilai berikutnya dalam seri ketika n = 43:


Fib(n) = Fib(n - 1) + Fib(n - 2) =

Fib(43) = Fib(43 - 1) + Fib(43 - 2) =

Fib(n) = Fib(42) + Fib(41) = Fib(83) maka

Fib(83) = Fib(83 - 1) + Fib(83 - 2) =

Fib(83) = Fib(82) + Fib(81) = Fib(163)


Anda dapat terus menggunakan solusi optimal ini untuk setiap submasalah untuk menghitung nilai berikutnya dalam deret Fibonacci, memberi Anda kemampuan untuk memecah masalah awal Fib (n) = Fib (n - 1) + Fib (n - 2), ketika n > 1.

 

  • Share: