Dynamic Programming ini akan bekerja dengan mengingat hasil dari suatu progres yang lalu dan juga menggunakannya agar bisa menemukan hasil yang baru.
Artinya, pemrograman dinamis akan memecahkan masalah kompleks, dengan cara memecahkanya menjadi beberapa sub masalah yang sederhana. Kemudian memecahkan masing-masing sebanyak satu kali agar kemudian disimpan dan bisa digunakan di masa depan.
Salah satu contoh dynamic programming pemrograman dinamis adalah urutan fibonacci, berikut ini adalah contohnya:
Fibonacci(N) = 0 (for n=0)
= 0 (for n=1)
= Fibonacci(N-1)+Finacchi(N-2)
4. Greedy
Jenis ini bisa digunakan untuk menyelesaikan masalah optimasi. Dalam algoritma ini, akan menemukan solusi yang lebih optimal secara lokal tanpa harus memperhatikan konsekuensi apapun yang akan terjadi di masa depan. Serta bisa menemukan solusi yang lebih maksimal pada tingkatan global.
Namun, metode ini tidak akan menjamin bahwa kamu bisa mendapatkan solusi yang optimal. Terdapat lima komponen yang terdapat pada algoritma ini, yaitu:
- Kumpulan kandidat yang nantinya akan dicari solusinya.
- Fungsi pemilihan yang nantinya akan membantu memilih kandidat terbaik.
- Fungsi kelayakan yang dapat membantu dalam menentukan kandidat yang bisa digunakan agar bisa menemukan solusi.
- Fungsi objektif yang mampu memberikan nilai pada solusi mungkin ataupun solusi parsial.
- Fungsi solusi yang mampu menginformasikan, tentang waktu dalam menemukan solusi dalam masalah tersebut.
5. Brute Force
Konsep algoritma ini sebenarnya sangat sederhana. Dalam prosesnya, brute force akan melakukan integrasi pada seluruh solusi, yang mungkin untuk mencari satu ataupun lebih dari satu solusi yang mampu menjawab suatu permasalahan.
Contoh pencarian sekuensial yang dilakukan dengan menggunakan brute force adalah sebagai berikut:
Algorithm S_Search (A[0..n], X)
A[n] X
i 0
While A [i] X do
i i + 1
if i < n return i
else return -1
6. Algoritma Backtracking
Backtracking adalah suatu teknik yang mampu memecahkan berbagai masalah secara rekursif. Serta mencobanya agar bisa memperoleh solusi dengan cara menyelesaikan suatu bagian masalah di waktu yang bersamaan. Bila salah satu solusi ternyata gagal, maka kita bisa menghapusnya dan mundur agar bisa menemukan solusi lain.
Artinya, algoritma ini akan memecahkan sub masalah dan bila gagal, maka algoritma ini akan membatalkan langkah terakhir dan mulai lagi agar bisa menemukan solusi atas permasalahan tersebut.