Contoh Algoritma
Sebelumnya kita sudah tahu sedikit tentang apa itu algoritma, yaitu prosedur atau langkah-langkah pemecahan masalah. Ya… paling tidak ada gambaran yang nantinya akan membantu kita dalam memahami lebih jauh tentang algoritma tersebut. Seperti saya singgung pada posting terdahulu, kali ini kita akan coba menyelesaikan beberapa ‘masalah’.
Ada 4 masalah yang akan kita cari jalan penyelesaiannya. Kita lihat dulu apa saja masalah-masalahnya :
- Kita punya 2 buah ember yang volumenya 5 liter (5L) dan 3 liter (3L). Diminta untuk mendapatkan air sebanyak 4 liter (4L) menggunakan kedua ember tersebut. Tidak ada alat (ember) lain. Terserah cara mendapatkan air tersebut, mau dipindah-pindah, dibuang dst, yang penting dapat air 4L.
- Ada seorang pemuda (P) membawa seekor kambing (K), seekor srigala (S) dan sekeranjang sayur (Y) tiba di pinggir sungai. Ada sebuah perahu yang akan digunakan untuk menyeberang, tetapi hanya bisa memuat 1 bawaan saja. Tentunya yang bisa mendayung perahu tersebut hanya pemuda. Masalah lainnya adalah kambing tidak dapat ditinggalkan bersama dengan sayur (bisa dimakan 🙂 ), srigala tidak dapat ditinggal bersama dengan kambing (srigala lapar 😀 ). Ayo seberangkan semuanya dengan selamat…
- Tiga buah cakram dengan ukuran yang berbeda tersusun berlapis di sebuah batang besi A. Cakram terbesar berada pada bagian paling bawah dan yang terkecil paling atas. Diminta untuk memindahkan cakram-cakram itu ke batang besi B dengan syarat cakram dipindahkan satu per satu dan cakram terkecil tidak boleh berada di bawah cakram yang lebih besar. Boleh menggunakan batang besi C sebagai alat bantu perpindahan cakram-cakram tersebut. Lihat gambar.
- Tiga pasang suami-istri (berarti ada 6 orang) tiba di pinggir sebuah sungai dan ingin menyeberangi sunagi itu. Ada sebuah perahu yang digunakan untuk menyeberang, tetapi hanya dapat dimuati 2 orang saja. Masalah muncul dengan kenyataan bahwa para suami ternyata pencemburu 🙁 dan tidak mau meninggalkan istri-istri mereka jika ada lelaki lain. Bisa menyeberang atau tidak? 🙂
Ya, dari 4 masalah di atas, sepertinya kita sedang main teka-teki 😀 dan terkesan seperti orang kurang ‘kerjaan’ 🙁 . Terserah pendapat masing-masing, tetapi ini adalah masalah yang harus diselesaikan dan tugas kita untuk mencari penyelesaiannya (problem solver).
Sebelum mulai membuat penyelesaian, baca dan analisa dulu baik-baik masalahnya dan pikirkan apa sebenarnya yang diinginkan dari masalah-masalah itu. Lalu buat algoritma yang tersusun dan terstruktur rapi agar kita dan juga orang lain dapat membaca dan memahaminya dengan cepat. Beri judul algoritma pada bagian atas, beri nomor urut dan jika dianggap perlu memberi keterangan dalam bentuk komentar yang diapit tanda kurung kurawal {}.
Ok, saatnya membuat penyelesaian masalah pertama :
ALGORITMA Air 4 Liter.
- Isi penuh ember 3L
- Tuangkan air dari ember 3L ke ember 5L {ember 3L kosong, ember 5L terisi air 3 liter}
- Isi penuh ember 3L
- Tuangkan air dari ember 3L ke ember 5L sampai penuh {ember 5L penuh, ember 3L masih berisi 1 liter}
- Buang semua air dalam ember 5L
- Tuangkan air dari ember 3L ke ember 5L {ember 3L kosong, ember 5L berisi 1 liter}
- Isi penuh ember 3L
- Tuangkan air dari ember 3L ke ember 5L {ember 3L kosong, ember 5L berisi 4 liter}
Sekarang masalah kedua, kita asumsikan bahwa penyeberangan dilakukan dari sisi A menuju sisi B dengan keadaan awal PKSY (singkatan dari pemuda, kambing, srigala dan sayur) berada di sisi A. Kita harus memperhatikan syarat-syarat yang diinginkan dari masalah tersebut.
ALGORITMA Penyeberangan PKSY
- P dan K menyeberang ke sisi B {S dan Y tetap di sisi A}
- P kembali ke sisi A sendirian {K tetap di sisi B}
- P dan S menyeberang ke sisi B {Y tetap di sisi A}
- P dan K kembali ke sisi A {S tinggal di sisi B}
- P dan Y menyeberang ke sisi B {K tinggal di sisi A}
- P kembali ke sisi A sendirian {S dan Y tetap di sisi B}
- P dan K menyeberang ke sisi B {P, K, S dan Y sudah berada di sisi B}
😀 😀 Repot juga ya, urusan seberang-menyeberang. Tapi berhasil kan…?
Sekarang main cakram yuk… Berdasarkan gambar di atas, kita beri nama dulu untuk ketiga cakram tersebut. CB untuk cakram besar, CS untuk cakram sedang dan CK untuk cakram kecil. lalu kita buat penyelesaian sebagai berikut :
ALGORITMA Pindah Cakram
- Pindahkan CK dari besi A ke besi B
- Pindahkan CS dari besi A ke besi C
- Pindahkan CK dari besi B ke besi C {besi B kosong, CK berada di atas CS pada besi B, sampai di sini masih benar 😉 }
- Pindahkan CB dari besi A ke besi B {CB paling bawah pada besi B}
- Pindahkan CK dari besi C ke besi A {CS masih di besi C}
- Pindahkan CS dari besi C ke besi B {CS berada di atas CB pada besi B, benar lagi 😀 }
- Pindahkan CK dari besi A ke besi B {CK berada di atas CS, CS berada di atas CB, hore… selesai… 😀 😀 }
Masalah keempat, masalah yang berat nih, masih soal seberang-menyeberang sungai, pake acara cemburu-cemburuan lagi 🙁 🙁
Karena ada 3 pasangan, kita buat singkatan saja, pasangan “X”, “Y” dan “Z”. “s” untuk suami dan “i” untuk istri. Jadi pasangan X adalah Xs dan Xi, dst…
Ayo kita buat…… eeiiit… tunggu dulu, masih ingat kan syaratnya, maksimal cuman bisa 2 orang dalam perahu dan suami tidak mau “meninggalkan” istrinya… 😀
Sekarang baru kita mulai…
ALGORITMA Penyeberangan Lagi
{kondisi awal di sisi A : Xs, Xi, Ys, Yi, Zs, Zi}
{kondisi awal di sisi B : -, -, -, -, -, -}
- Xi dan Yi menyeberang ke sisi B
{sisi A : Xs, -, Ys, -, Zs, Zi} {sisi B : -, Xi, -, Yi, -, -}- Yi menyeberang sendiri ke sisi A
{sisi A : Xs, -, Ys, Yi, Zs, Zi} {sisi B : -, Xi, -, -, -, -}- Yi dan Zi menyeberang ke sisi B
{sisi A : Xs, -, Ys, -, Zs, -} {sisi B : -, Xi, -, Yi, -, Zi}- Zi menyeberang sendiri ke sisi A
{sisi A : Xs, -, Ys, -, Zs, Zi} {sisi B : -, Xi, -, Yi, -, -}- Zi dan Zs menyeberang ke sisi B
{sisi A : Xs, -, Ys, -, -, -} {sisi B : -, Xi, -, Yi, Zs, Zi}- Yi menyeberang sendiri ke sisi A
{sisi A : Xs, -, Ys, Yi, -, -} {sisi B : -, Xi, -, -, Zs, zi}- Yi dan Ys menyeberang ke sisi B
{sisi A : Xs, -, -, -, -, -} {sisi B : -, Xi, Ys, Yi, Zs, Zi}- Xi menyeberang sendiri ke sisi A
{sisi A : Xs, Xi, -, -, -, -} {sisi B : -, -, Ys, Yi, Zs, Zi}- Xi dan Xs menyeberang ke sisi B
{sisi A : -, -, -, -, -, -} {sisi B : Xs, Xi, Ys, Yi, Zs, Zi}
Wah, rumit juga ternyata kalau kita mau meneliti dengan terurut dan teratur, tetapi hasilnya juga tentunya akan memuaskan. Makanya, kalau da masalah kita teliti dulu, pikirkan semua kemungkinan yang dapat terjadi, jangan asal selesai… 😉 Kita sangat sering berhadapan dengan berbagai macam masalah, namun kadang-kadang tidak membuat penyelesaian yang benar dan terbaik untuk masalah-masalah itu sehingga hasil yang didapat tidak memuaskan dan tidak maksimal.
Kita lanjutkan lagi pada tulisan berikutnya…
Gabung dalam percakapan