Upload
nyiiteng89
View
1.442
Download
5
Embed Size (px)
Citation preview
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
Maret 2009
2A. 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
S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM
3jawaban 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
S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM
4solusi 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
S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM
5yang 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.
S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM
6D. 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
terdapat di dalamnya untuk dibandingkan kembali dengan deretan kata yang ada
S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM
7di 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 Karakter1 MADING 62 SILABUS 73 ATRAKSI 74 SAMBIL 65 JAM 36 LEPAS 47 KOMBINASI 98 ADSI 49 RETAK 510 BALI 411 ITU 312 GEREJA 613 RUSAK 514 RUPA 415 GEOGRAFI 8Tabel 1. Database Kata
S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM
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 Karakter1 MADING 62 SILABUS 73 ATRAKSI 74 SAMBIL 65 JAM 36 LEPAS 47 KOMBINASI 98 ADSI 49 RETAK 510 BALI 411 ITU 312 GEREJA 613 RUSAL 514 RUPA 415 GEOGRAFI 8S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM
Kata yang berjumlah 6 karakter
9o 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
S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM
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
kotak.
S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM
111G E R E 2J A A 3 S A M B I L
Gambar 13. Kotak Permainan Setelah Diisi Kata “SAMBIL”
o Langkah-langkah di atas diulang sampai program selesai menemukan solusi
atau sampai solusi tidak mungkin ditemukan. Jika solusi tidak ditemukan
maka, program akan meminta user untuk memasukkan kata-kata baru ke dalam
database kata kemudian program akan melakukan pencarian solusi ulang.
F. Program TTS
Program untuk permainan ini dapat dilihat di bawah ini://Pseudocode //Kamus Datakata array of String; Integer kolom, baris; Papan array of integer of integer; //algoritma Procedure tampilkanpapan(); //tidak diidefinisikan Prosedure membuatkotak(); //tidak didefinisikan Prosedure membuatdatabase(); //membuat array dari masukan kata Prosedure caridata(integer); //mencari kata berukuran masukan di data base, dengan iteratif Prosedure kirimdata(); //mengirim data ke papan Prosedure dapatkanukuran(integer indeks) //mendapatkan ukuran dari deretan kotak Procedure inputmasukan() Begin String kata; Integer I = 0; While(kata.equal(“selesaiiiiii”) Begin Input(kata); Datakata[i] = kata; I++;
S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM
12End; Prosedure backtrack(integer indeks) Kamus Boolean solusi; Begin While (indeks>0) && (!gerak) Begin Dapatkanukuran(papan,indeks); Caridata(ukuran) If (caridata==null) Begin Backtrack(indeks--);
G. Diagram Pohon
Agar lebih jelas bagaimana jalan dari permainan ini, akan ditunjukkan
pada diagram pohon. Dalam diagram pohon tersebut akan nampak initial state,
goal state, dan succeror node-nya. Node yang diberi tanda ( ) merupakan node
yang dipangkas. Berikut diagram algoritma Backtracking pada permainan TTS: 1 2 14
13 12
3 4
5
6
8
10
7 11
9
Gambar 14. Initial State
G E R E J A S A M A D I N G S A M B I L L E E A O R U P A B G I T U A U R R S S S A E A B F A T R A K S I A D S I A L K O M B I N A S I
Gambar 15. Goal State
S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM
13
S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM
INITIAL STATE
14
S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM
GOAL STATE
15H. Kesimpulan
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.
Dalam permainan teka-teki silang ini, algoritma Backtracking sudah bisa
memberikan jawaban yang pasti sehingga algoritma Backtracking ini bisa dimple-
mentasikan. Selain itu algoritma Backtrack juga merupakan algoritma yang
sederhana namun cukup praktis dibandingkan dengan algoritma brute force. Hal
ini disebabkan karena pada prinsipnya, kita tidak perlu memeriksa semua ke-
mungkinan solusi yang ada. Pencarian hanya mengarah pada solusi yang diper-
timbangkan saja.
Meski demikian, algoritma backtracking masih memiliki kelemahan, 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.
I. Daftar Rujukan
Kusumadewi, Sri. 2003. Artificial Intelligence (Teknik dan Aplikasinya).
Yogyakarta: Graha Ilmu.
Suyanto. 2007. Artificial Intelligence (Searching, Reasoning, Pianning, dan
Learning). Bandung: Informatika.
W. Lily. 2008. Masalah dan Metode Pemecahan Masalah. Depok: Gunadarma.
Ciptarjo, Imam. 2008. Struktur Data. Bandung: LPKIA.
S1 PENDIDIKAN TEKNIK INFORMATIKA – ELEKTRO UM