PENERAPAN ALGORITMA BACKTRACKING (RUNUT-BALIK) DALAM PERMAINAN TEKA-TEKI SILANG (TTS)
Oleh:
Dila Umnia Soraya
UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK JURUSAN ELEKTRO
PRODI S1 PENDIDIKAN TAKNIK INFORMATIKA
2 A. Permainan Teka Teki Silang (TTS)
Permainan teka-teki silang merupakan salah satu permainan asah otak yang diminati banyak orang. Teka Teki Silang atau disingkat TTS adalah suatu permainan di mana kita harus mengisi ruang-ruang kosong (berbentuk kotak putih) dengan huruf-huruf yang membentuk sebuah kata berdasarkan petunjuk yang diberikan. Petunjuknya biasa dibagi ke dalam kategori 'Mendatar' dan 'Me- nurun' tergantung posisi kata-kata yang harus diisi (Wikipedia).
Dalam permainan teka-teki silang terdapat papan permainan utama. Papan permainan sendiri terdiri atas kotak-kotak berwarna hitam dan putih.Sebagai mana telah dijelaskan bahwa kotak-kotak putih yang membentuk deretan blok, baik mendatar maupun menurun merupakan tempat pemain mengisi jawaban. Setiap deretan kotak akan mempunyai nomor dan soal yang diberikan. Permainan akan dinyatakan selesai jika, pemain mampu mengisi semua deretan kotak-kotak putih mendatar dan menurun tersebut.
1 2 14
13 12
3 4
5
6
8
10
7 11
9
Gambar 1. Papan Permainan TTS
Permainan ini memang cukup mudah untuk dimainkan, namun sayangnya untuk dapat membuat soal yang valid merupakan hal yang sulit. Untuk itu dalam makalah ini akan dijelaskan penyelesaian masalah tersebut dengan bantuan program komputer. Pembuat soal cukup memasukkan database berupa kata-kata jawaban berikut soalnya dan membuat deretan-deretan kotak putih tempat jawaban di papan permainan. Salah satu cara untuk menyelesaikan permasalahan tersebut adalah dengan menggunakan algoritma backtracking. Algoitma runut- balik (backtracking) akan mampu memberikan hasil apakah deretan-deretan kotak
3 jawaban yang telah dibuat sudah cocok dengan deretan jawaban kata yang
disediakan.
B. Algoritma Backtracking
Algoritma bactracking pertama kali diperkenalkan oleh D.H. Lehmer pada tahun 1950. Algoritma ini cukup praktis untuk digunakan dalam beberapa penyelesaian masalah dan juga untuk memberikan kecerdasaan buatan dalam game. Beberapa game populer semisal Sudoku, Labirin, Catur, tic tac toe juga bisa diimplementasikan dengan menggunakan algoritma backtracking.
Algoritma runut-balik (backtracking) merupakan algoritma yang diguna- kan untuk mencari solusi persoalan secara lebih praktis dari pada menggunakan algoritma brute force. Algoritma ini akan mencari solusi berdasarkan ruang solusi yang ada secara sistematis namun tidak semua ruang solusi akan diperiksa, hanya pencarian yang mengarah kepada solusi yang akan diproses (Rinaldi Munir, Diktat Srategi Algoitmik, Teknik Informatika ITB, 2005).
Kelemahan dari algoritma backtracking, yaitu hanya bisa diaplikasikan terbatas pada tipe permasalahan yang memiliki solusi yang dapat dicari secara sistematis dan bertahap. Terdapat masalah-masalah yang tidak bisa diselesaikan dengan menggunakan backtracking, misalnya menemukan suatu nilai yang diminta pada tabel yang tidak terurut. Namun ketika algoritma ini dapat diaplikasikan, backtracking dapat bekerja jauh lebih cepat dari brute force karena jumlah kandidat solusi yang dapat dibuang dengan backtracking cukup besar.
Algoritma backtracking merupakan algoritma pencarian yang berbasis pada DFS (Depth-First Search) atau pencarian mendalam dengan tujuan mencari solusi permasalahan secara lebih praktis. Mekanisme penyelesaian dengan meng- gunakan backtracking berprinsip pada metode rekursif. Untuk menyelesaikan keseluruhan masalah, dibutuhkan sebuah solusi untuk permasalahan pertama, kemudian permasalahan-permasalahan lainnya akan dicoba untuk diselesaikan secara rekursif berdasarkan solusi pertama tersebut. Jika kemungkinan solusi yang sedang dicoba gagal, atau jika tujuan program adalah untuk menemukan seluruh solusi yang mungkin, maka dilakukan backtrack untuk menguji kemungkinan
4 solusi selanjutnya. Proses backtrack akan selesai ketika tidak ada lagi solusi
yang mungkin untuk menyelesaikan permasalahan paling awal.
Dalam diktat Strategi Algoritmik Teknik Informatika ITB oleh Rinaldi Munir, dijelaskan bahwa algoritma backtracking memiliki properti umum yaitu:
• Solusi persoalan
Solusi dinyatakan sebagai vektor dengan n-tuple:
X = (x1, x2, …, xn), xi ∈ Si Mungkin saja S1 = S2 = … = Sn. Contoh: Si = {0, 1}, xi = 0 atau 1
• Fungsi pembangkit nilai xk Dinyatakan sebagai T(k).
T(k) membangkitkan nilai untuk xk, yang merupakan komponen vektor solusi.
• Fungsi pembatas (pada beberapa persoalan fungsi ini dinamakan fungsi krite- ria)
Dinyatakan sebagai B(x1, x2, …, xk), B bernilai true jika (x1, x2, …, xk) mengarah ke solusi. Jika true, maka pembangkitan nilai untuk xk+1 dilanjutkan, tetapi jika false, maka (x1, x2,…, xk) dibuang dan tidak dipertimbangkan lagi dalam pencarian solusi.
Solusi persoalan adalah kemungkinan solusi yang didapatkan dari per- masalahan yang diberikan, sedangkan fungsi pembatas merupakan fungsi yang akan menentukan langkah selanjutnya berupa penerusan pencarian solusi ataupun melakukan backtrack. Algoritma backtracking merupakan metode paling efisien untuk parsing dan banyak masalah optimasi kombinatorial lainnya. Backtracking juga digunakan oleh bahasa pemrograman logika seperti Prolog, Icon, dan Planner.
C. Prinsip Pencarian Solusi pada Algoritma Backtracking
Untuk menerapkan algoritma runut-balik pada pencarian solusi, hanya akan ditinjau pencarian solusi pada pohon ruang status yang dibangun secara dinamis:
1. Solusi dicari dengan membentuk lintasan dari akar ke daun dengan aturan pembentukan pohon yang dipakai mengikuti metode DFS. Simpul-simpul
5 yang sudah dilahirkan dinamakan simpul hidup. Simpul hidup yang sedang
diperluas dinamakan simpul-E (Expand-node).
2. Jika lintasan yang sedang dibentuk tidak mengarah ke solusi, maka simpul- E menjadi simpul mati (dead node) dengan fungsi pembatas (bounding function).
3. Jika pembentukan lintasan berakhir dengan simpul mati, maka proses pen- carian diteruskan dengan membangkitkan simpul anak yang lain. Bila tidak ada lagi simpul anak yang dapat dibangkitkan, maka pencarian solusi dilanjutkan dengan melakukan runut-balik ke simpul hidup terdekat.
4. pencarian dihentikan bila kita telah menemukan solusi (solusi ditemukan) atau tidak ada lagi simpul hidup untuk runut-balik (solusi tidak ditemukan).
Salah satu fungsi yang dimiliki oleh algoritma backtracking dan menjadi ciri khasnya adalah fungsi pemangkasan (pruning). Jika tahap-tahap pencarian solusi suatu masalah direpresentasikan dalam bentuk pohon solusi, proses pemangkasan akan dilakukan terhadap simpul-simpul yang tidak mengarah kepada solusi. Jika suatu simpul telah dipangkas, simpul-simpul yang menjadi anak dan turunan dari simpul tersebut otomatis tidak akan diproses, karena memangkas sebuah simpul sama halnya membuang seluruh lintasan yang berada di bawah simpul tersebut.
Gambar 2. Ilustrasi Proses Pemangkasan (Pruning)
Berdasarkan gambar tersebut, simpul yang dipangkas adalah simpul d dan f.
Akibat pemangkasan tersebut, simpul k yang merupakan anak simpul d, serta simpul l dan m yang merupakan anak simpul f tidak akan diproses.
6 D. Penerapan Algoritma Backtracking dalam Permainan TTS
Dalam penyelesaian kasus pembuatan soal TTS ini dapat diterapkan algoritma brute force. Algoritma brute force adalah sebuah pendekatan yang lempang (straight forward) untuk memecahkan suatu masalah, biasanya didasar- kan pada pernyataan masalah (problem statement) dan definisi konsep yang dilibatkan (Rinaldi Munir, Diktat Srategi Algoitmik, Teknik Informatika ITB, 2005). Pada pencarian solusi dengan brute force, program akan membuat seluruh kemungkinan solusi, baru kemudian menguji satu persatu apakah solusi yang telah dibuat dapat memenuhi spesifikasi solusi akhir yang dicari.
Namun sayangnya hal ini tidak efisien karena semua kemungkinan akan dicoba. Sebagai contoh: Jika terdapat n buah kata dalam database kata dan terdapat m jumlah deretan kotak yang harus diisi maka jumlah proses untuk setiap deretan kata, harus dicoba sebanyak n! dari keseluruhan katadidalam data base, sehingga jumlah proses yang diperlukan adalah m x n ! dan kompleksitas algoritmanya menjadi 0 (mn!). Untuk itulah diperlukan algoritma lain yang lebih efisien, dalam hal ini salah satunya adalah algoritma Backtracking.
Algoritma backtracking dalam permainan ini akan digunakan untuk mengisi kotak-kotak permainan yang sebelumnya telah dibuat. Kotak-kotak ini bisa direpresentasikan dengan struktur data matriks sehingga setiap kotak akan memiliki indeks. Indeks ini akan digunakan untuk melakukan pencarian kata yang cocok. Pada pengisian kata ke dalam kotak-kotak, pertama-tama program akan menentukan deretan kotak awal yang ingin diisi. Program akan menghitung jumlah kotak pada deretan kotak tersebut kemudian akan mencari kata di dalam database (yang terdiri atas kumpulan kata/jawaban) yang memiliki jumlah karakter sama dengan jumlah kotak tersebut.
Dalam pencarian data kata-kata mungkin akan terdapat beberapa kata yang cocok untuk dimasukkan kedalam satu deretan kotak, untuk itu program akan memilih kata yang berada lebih awal dalam database kata. Langkah selanjutnya, program akan mengidentifikasi indeks pada deretan kotak yang terhubung dengan deretan kotak lainnya. Program akan mencatat dimana letak hubungan antar deretan kotak tersebut kemudian mencatat indeks dan mengambil karakter yang
7 di dalam database kata. Jika kata yang dimasukkan berikutnya cocok maka
pencarian akan dilanjutkan, namun jika tidak terdapat kata yang cocok maka program akan mematikan kemungkinan jawaban berdasarkan pencarian tersebut dan program akan melakukan backtrack.
Backtrack dilakukan dengan cara program akan menghapus kata yang terakhir dimasukkan ke dalam deretan kotak, kemudian program akan mengganti kata tersebut dengan kata lain yang juga bisa diisikan ke dalam deretan kotak tersebut dan kemudian program akan melakukan pencarian ulang. Langkah- langkah diatas akan terus dilakukan secara rekursif, sampai program menemukan solusi dari permasalahan (seluruh kotak terisi) atau program tidak menemukan solusi (tidak ada kemungkinan jawaban yang valid).
E. Implementasi Backtracking pada Permainan TTS
Seperti yang telah dijelaskan sebelumnya, untuk menjalankan program ini yaitu harus mempersiapkan database kata sebagai jawaban dari pertanyaan TTS.
Berikut contoh database kata yang disediakan untuk permainan TTS:
No. Kata Jumlah Karakter
1 MADING 6
2 SILABUS 7
3 ATRAKSI 7
4 SAMBIL 6
5 JAM 3
6 LEPAS 4
7 KOMBINASI 9
8 ADSI 4
9 RETAK 5
10 BALI 4
11 ITU 3
12 GEREJA 6
13 RUSAK 5
14 RUPA 4
15 GEOGRAFI 8
Tabel 1. Database Kata
8
1 2 14
13 12
3 4
5
6
8
10
7 11
9
Gambar 3. Kondisi Awal Kotak Permainan
Adapun langkah-langkah pencarian solusi dengan algoritma backtracking pada permainan TTS, yaitu:
o Program akan menghitung jumlah kotak pada deretan pertama.
1 2
3
Gambar 4. Deretan Kotak Pertama
o Program akan mencari di database, kata yang berjumlah 6 karakter, yaitu terdapat kata “MADING”, “SAMBIL”, dan “GEREJA”
No. Kata Jumlah Karakter
1 MADING 6
2 SILABUS 7
3 ATRAKSI 7
4 SAMBIL 6
5 JAM 3
6 LEPAS 4
7 KOMBINASI 9
8 ADSI 4
9 RETAK 5
10 BALI 4
11 ITU 3
12 GEREJA 6
13 RUSAL 5
14 RUPA 4
15 GEOGRAFI 8
Kata yang berjumlah 6
karakter
9 o Program akan memilih kata sesuai dengan urutan yang ada dalam database dan
memasukkannya ke dalam deretan kotak. Kata pertama yang dimasukkan adalah kata “MADING”.
1M A D I 2N G
3
Gambar 5. Kotak Permainan Setelah Diisi Kata “MADING”
o Program akan melakukan pencarian berikutnya terhadap deretan kotak kedua.
o Program tidak dapat menemukan kata yang memungkinkan (berjumlah 3 ka- rakter dan dimulai dengan huruf awalan ‘N’), sehingga program akan mela- kukan backtrack dan menghapus kata yang sebelumnya diisikan.
1 2
3
Gambar 6. Kotak Permainan Setelah Backtracking
o Langkah selanjutnya program akan memilih kata yang lain untuk deretan pertama yang memenuhi syarat, dalam hal ini adalah kata “SAMBIL”.
1S A M B 2I L
3
Gambar 7. Kotak Permainan Setelah Diisi Kata “SAMBIL”
o Program melakukan pencarian berikutnya di dalam database. Program menemukan kata “ITU” dan kembali dimasukkan kedalam kotak permainan.
1S A M B 2I L
T
3 U
Gambar 8. Kotak Permainan Setelah Diisi Kata “ITU”
o Pencarian berikutnya dilakukan pada kotak deretan ketiga, namun program tidak menemukan kata yang cocok (berjumlah 6 karakter, huruf ketiga adalah
10
“U”) sehingga program akan melakukan backtrack lagi dan menghapus kata yang sebelumnya diisikan.
1S A M B 2I L
3
Gambar 9. Kotak Permainan Setelah Backtrack
o Karena tidak ada kata lain yang dapat diisikan kembali maka program akan melakukan backtrack lagi.
1 2
3
Gambar 10. Kotak Permainan Setelah Backtrack
o Kemudian mengganti isi deretan kotak pertama dengan kata “GEREJA” (kata yang cocok untuk deretan kotak pertama).
1G E R E 2J A
3
Gambar 11. Kotak Permainan Setelah Diisi Kata “GEREJA”
o Program akan mencari kembali kata yang cocok. Dalam hal ini program akan mendapatkan kata “JAM”.
1G E R E 2J A
A
3 M
Gambar 12. Kotak Permainan Setelah Diisi Kata “JAM”
o Langkah selanjutnya program akan melakukan pencarian pada deretan kotak ketiga yang berjumlah 6 kotak. Program akan mencari di dalam database kata yang berjumlah 6 karakter, dimana karakter ketiga adalah “M”, dan kembali memasukkannya kedalam deretan kotak yang tersedia. Dari sini program menemukan kata “SAMBIL”, kemudian memasukkan kata tersebut ke dalam