PENYELESAIAN PERMAINAN SUDOKU DENGAN ALGORITMA BRUTEFORCE,BACKTRACKING,dan BACKTRACKING DENGAN OPTIMASI

dokumen-dokumen yang mirip
PENERAPAN ALGORITMA RUNUT-BALIK (BACKTRACKING) DALAM PENYELESAIAN PERMAINAN SUDOKU

Penerapan Algoritma Runut-Balik (Backtracking) pada Permainan Nurikabe

PENGUNAAN DUA VERSI ALGORITMA BACKTRACK DALAM MENCARI SOLUSI PERMAINAN SUDOKU

Aplikasi Algoritma Runut Balik dalam Pembangkitan Elemen Awal Permainan Sudoku

PENERAPAN ALGORITMA BACKTRACKING PADA PERMAINAN WORD SEARCH PUZZLE

PENERAPAN ALGORITMA RUNUT BALIK DALAM PERMAINAN TEKA-TEKI SILANG

PENCARIAN SOLUSI DENGAN ALGORITMA BACKTRACKING UNTUK MENYELESAIKAN PUZZLE KAKURO

Penerapan Algoritma DFS pada Permainan Sudoku dengan Backtracking

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT

Perbandingan Algoritma Brute Force dan Backtracking dalam Permainan Word Search Puzzle

Penerapan Algoritma Backtracking untuk Menyelesaikan Permainan Hashiwokakero

SOLUSI ALGORITMA BACKTRACKING DALAM PERMAINAN KSATRIA MENYEBRANG KASTIL

Pencarian Solusi Permainan Fig-Jig Menggunakan Algoritma Runut-Balik

ANTIMAGIC PUZZLE. Alwi Afiansyah Ramdan

Pembentukan Pohon Pencarian Solusi dalam Persoalan N-Ratu (The N-Queens Problem)

Penggunaan Algoritma Runut-balik Pada Pencarian Solusi dalam Persoalan Magic Square

ALGORITMA RUNUT-BALIK UNTUK MENGGANTIKAN ALGORITMA BRUTE FORCE DALAM PERSOALAN N-RATU

Penerapan Algoritma Backtracking pada Pewarnaan Graf

ALGORITMA RUNUT-BALIK (BACKTRACKING ALGORITHM) PADA MASALAH KNIGHT S TOUR

BAB I PENDAHULUAN. adalah perkembangan dalam bidang permainan. banyak permainan teka-teki yang menjadi populer di kalangan masyarakat.

Oleh Lukman Hariadi

Algoritma Runut-balik (Backtracking) Bahan Kuliah IF2251 Strategi Algoritmik Oleh: Rinaldi Munir

PENGGUNAAN ALGORITMA BACKTRACKING DALAM PENCARIAN KOEFISIEN ROOK POLYNOMIAL

PENERAPAN ALGORITMA RUNUT-BALIK DALAM PENCARIAN SOLUSI TEKA-TEKI BATTLESHIP

Penerapan Algoritma Runut-Balik untuk Menyelesaikan Permainan Pencarian Kata

Penerapan Algoritma Brute-Force serta Backtracking dalam Penyelesaian Cryptarithmetic

@UKDW. Lampiran B - 1 BAB 1 PENDAHULUAN

Strategi Algoritma Penyelesaian Puzzle Hanjie

Penerapan Algoritma Brute Force di Permainan Nonogram

Algoritma Runut-balik (Backtracking) Bagian 1

Implementasi Algoritma Runut Balik dalam Pengenalan Citra Wajah pada Basis Data

I. PENDAHULUAN II. DASAR TEORI. Contoh lainnya: Solusi: 0= V,1= I,2= O,3= R, 4= N,5= L,7= A,8= F,9= E.

ANALISIS PENERAPAN ALGORITMA RUNUT-BALIK DALAM PENCARIAN SOLUSI PERSOALAN LOMPATAN KUDA

Analisis Beberapa Algoritma dalam Menyelesaikan Pencarian Jalan Terpendek

Perbandingan Algoritma Brute Force dan Breadth First Search dalam Permainan Onet

Penggunaan Algoritma Backtrack dan Aturan Warnsdorff Untuk Menyelesaikan Knight s Tour Problem

Penerapan Algoritma DFS dan BFS untuk Permainan Wordsearch Puzzle

Penyelesaian Permasalahan Nonogram dengan Algoritma Runut Balik

Pemanfaatan Algoritma Runut-Balik dalam Menyelesaikan Puzzle NeurOn dalam Permainan Logical Cell

UNTUK PEMECAHAN MASALAH PADA PERMAINAN HASHIWOKAKERO

BAB 1 PENDAHULUAN. 1.1 Latar Belakang

ALGORITMA RUNUT BALIK DALAM PENYELESAIAN PERMAINAN WORD DIAGRAM

PENGGUNAAN ALGORITMA BACKTRACKING DALAM PENYELESAIAN PERMAINAN SUDOKU

Penerapan Algoritma Runut-balik pada Permainan Math Maze

PENCARIAN SOLUSI TTS ANGKA DENGAN ALGORITMA RUNUT BALIK BESERTA PENGEMBANGANNYA

Penerapan Algoritma Runut-Balik dan Graf dalam Pemecahan Knight s Tour

Penerapan Algoritma Runut-Balik pada Magic Square

Aplikasi Algoritma Runut-balik pada Penyelesaian Teka Teki Mengisi Angka

PENGGUNAAN EXHAUSTIVE SEARCH SEBAGAI SOLUSI PERMAINAN SCRAMBLE

Analisis Penerapan Algoritma Backtracking Pada Pencarian Jalan Keluar di Dalam Labirin

Algoritma Runut-balik (Backtracking)

Implementasi Algoritma Backtracking untuk Memecahkan Puzzle The Tile Trial pada Permainan Final Fantasy XIII-2

Penyelesaian Permainan 3 missionaries and 3 cannibals Dengan Algoritma Runut-Balik

Memecahkan Puzzle Hidato dengan Algoritma Branch and Bound

Perbandingan Algoritma Depth-First Search dan Algoritma Hunt-and-Kill dalam Pembuatan Labirin

Penerapan Algoritma Backtrack pada Knight s Tour

Penerapan Algoritma Greedy dalam Pencarian Rantai Penjumlahan Terpendek

Penggunaan Algoritma Backtracking Untuk Menentukan Keisomorfikan Graf

Aplikasi Algoritma Brute Force dan Backtracking pada Permainan Slitherlink

Pencarian Solusi Permainan Flow Free Menggunakan Brute Force dan Pruning

Penerapan Algoritma Runut-Balik untuk Menyelesaikan Zebra Puzzle

Penggabungan Algoritma Brute Force dan Backtracking dalam Travelling Thief Problem

PENERAPAN ALGORITMA BFS PADA CHINESE SLIDE BLOCK PUZZLE (KLOTSKI)

Penerapan Algoritma Greedy dan Backtrackng Dalam Penyelesaian Masalah Rubik s Cube

BAB I PENDAHULUAN. 1.1 Latar Belakang Masalah

PERMAINAN KNIGHT S TOUR DENGAN ALGORITMA BACKTRACKING DAN ATURAN WARNSDORFF

Penggunaan Algoritma Backtracking pada Permainan Mummy Maze

PERBANDINGAN KOMPLEKSITAS ALGORITMA PENCARIAN BINER DAN ALGORITMA PENCARIAN BERUNTUN

Permasalahan Clique dalam Graf

Penerapan Algoritma Backtracking pada Knight s Tour Problem

IMPLEMENTASI ALGORITMA GREEDY PADA PERMAINAN OTHELLO

Pembuatan Musik Tanpa Pola Dengan Menggunakan Algoritma Runut Balik

Implementasi Algoritma DFS pada Pewarnaan Gambar Sederhana Menggunakan Bucket tool

Penerapan Algoritma BFS dan DFS dalam Mencari Solusi Permainan Rolling Block

Pemanfaatan Algoritma BFS pada Graf Tak Berbobot untuk Mencari Jalur Terpendek

PEMBANGKIT TEKA-TEKI SILANG DENGAN ALGORITMA BACKTRACKING SERTA APLIKASI PERMAINANNYA YANG BERBASIS WEB

Solusi Terbaik Permainan Rocket Mania Deluxe dengan Pendekatan Algoritma BFS dan Algoritma Greedy

Perbandinganan Penggunaan Algoritma Greedy dan Modifikasi Algoritma Brute Force pada Permainan Collapse XXL

Pencarian Solusi Permainan Pipe Puzzle Menggunakan Algoritma Backtrack

Penerapan DFS dan BFS dalam Pencarian Solusi Game Japanese River IQ Test

BAB 1 PENDAHULUAN UKDW

Penerapan Algoritma DFS dalam Menyelesaikan Permainan Buttons & Scissors

Penggunaan Strategi Algoritma Backtracking pada Pencarian Solusi Puzzle Pentomino

Pencarian Pohon Solusi Permainan Alchemy Menggunakan Algoritma BFS dan DFS

Penggunaan Algoritma Greedy untuk Mencari Solusi Optimal dalam Permainan Brick Breaker

SOLUSI PERMAINAN CHEMICALS DENGAN ALGORITMA RUNUT BALIK

Pembentukan pohon pencarian solusi dan perbandingan masingmasing algoritma pembentuknya dalam simulasi N-Puzzle

Penerapan Algoritma Backtracking pada Pencarian Solusi Fill-in Crossnumber

IMPLEMENTASI BACKTRACKING ALGORITHM UNTUK PENYELESAIAN PERMAINAN SU DOKU POLA 9X9

Implementasi Algoritma BFS dan DFS dalam Penyelesaian Token Flip Puzzle

Pendeteksian Deadlock dengan Algoritma Runut-balik

Implementasi Intuitif Penyelesaian Labirin dengan Algoritma Depth-First Search

Implementasi Algoritma Runut Balik pada Permainan Texas Hold em Poker

Penerapan Algoritma Flood Fill untuk Mengurangi Ruang Pencarian pada Pencarian Solusi Puzzle Pentomino

Pemanfaatan Pohon dalam Realisasi Algoritma Backtracking untuk Memecahkan N-Queens Problem

Penerapan Algoritma Backtracking pada Game The Lonely Knight

Penerapan strategi BFS untuk menyelesaikan permainan Unblock Me beserta perbandingannya dengan DFS dan Branch and Bound

PENYELESAIAN TEKA-TEKI PENYUSUNAN ANGKA MENGGUNAKAN ALGORITMA RUNUT BALIK

BAB 2 LANDASAN TEORI

Aplikasi Algoritma Branch and Bound dalam Pencarian Solusi Optimum Job Assignment Problem

Transkripsi:

PENYELESAIAN PERMAINAN SUDOKU DENGAN ALGORITMA BRUTEFORCE,BACKTRACKING,dan BACKTRACKING DENGAN OPTIMASI Rama Adhitia-NIM:13505040 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung Jl.Ganesha No.10 if15040@students.if.itb.ac.id ABSTRAK Isi Makalah ini membahas tentang algoritmaalgoritma yang dapat digunakan untuk menyelesaikan permainan sudoku, salah satu permainan logika yang sangat populer dewasa ini.terdapat tiga buah macam metode penyelesaianyang akan dibahas dalam makalah ini, yaitu penyelesaian menggunakan algoritma Bruteforce,penyelesaian menggunakan algoritma Backtracking,dan penyelesaian menggunakan algoritma Backtracking dengan optimasi. Ketiga penyelesaian akan dijelaskan dengan membedah detail algoritmanya. Algoritma Bruteforce ialah algoritma yang membangkitkan seluruh kemungkinan penempatan angka pada papan sudoku,kemudian dari seluruh kemungkinan penempatan angka itu akan dicari himpunan-himpunan penempatan angka mana yang akan memenuhi constraint permainan sudoku.algoritma Backtracking sebenarnya mempunyai kompleksitas asimptotik yang sama dengan algoritma Bruteforce,hanya saja algoritma ini mencari secara sistematis solusi persoalan diantara semua kemungkina solusi yang ada,sehingga pada kebanyakan kasus waktu pencarian solusi permainan sudoku dapat dapat dihemat secara signifikan. Pada Algoritma Backtracking dengan optimasi terdapat beberapa modifikasi kecil pada cara untuk membangkitkan komponen berikut dari vektor solusi dan pada cara runut baliknya.sebagai akibatnya pada sebagian besar kasus,algoritma ini dapat mencari solusi permainan sudoku dengan waktu lebih cepat lagi jika dibandingkan dengan algoritma Backtracking biasa. Kata kunci: Sudoku,Bruteforce,Backtracking,Backtracking dengan optimasi,optimasi, 1. PENDAHULUAN Sudoku merupakan salah satu permainan logika yang sangat populer. Permainan sudoku dapat digolongkan ke dalam tipe Latin Square, dengan tambahan constraint pada isi dari setiap region yang terpisah.[1]leonhard Euler terkadang dianggap sebagai sumber dari permainan puzzle ini didasarkan pada hasil kerjanya yaitu Latin Square Puzzle modern ditemukan oleh seseorang berkebangsaan Amerika Serikat,Howard Garns,pada tahun 1979 dan diterbitkan pada majalah Dell dengan sebutan Number Place.Permainan ini berkembang menjadi permainan populer di Jepang ketika dipromosikan oleh Nikoli dan diberi nama Sudoku.Kepopuleran permainan Sudoku ini meledak secara luar biasa di dunia pada tahun 2005 Gambar 1.Salah satu contoh permainan sudoku Objektif permainan sudoku sebenarnya sangat sederhana,yaitu mengisi suatu matriks yang berukuran 9x9 sehingga pada setiap kolom,setiap baris,dan setiap dari kotak yang berukuran 3x3 mengandung digit angka dari 1 sampai 9,dan pada setiap baris,kolom,dan kotak yang berukuran 3x3 tersebut tidak terdapat dua atau lebih kemunculan angka yang sama.daya tarik dari permainan sudoku ini ialah aturan permaina yang sederhana,tetapi penalaran yang dibutuhkan untuk

menyelesaikan permainan ini dapat saja berubah menjadi kompleks. Karena adanya alasan seperti yang telah disebutkan di atas maka banyak orang yang tidak bisa melanjutkan lagi permainannya menggunakan program-program komputer yang didesain khusus untuk menyelesaikan permainan sudoku. Oleh karena itu timbullah kebutuhan akan adanya algoritma yang efektif dan efisien untuk menyelesaikan permainan sudoku ini. 2.Isi 2.1 Algoritma Bruteforce Algoritma Bruteforce merupakan algoritma yang memecahkan persoalan dengan cara yang straightforward.secara garis besar cara kerja algoritma ini ialah dengan membangkitkan semua permutasi dari komponen vektor solusi,kemudian setelah dibangkitkan maka akan diperiksa himpunan mana yang merupakan solusi dari sebuah persoalan Penerapan algoritma Bruteforce ini dalam permainan sudoku ialah dengan mencoba seluruh kemungkinan isi kotak elemen dari matriks. Misalkan solusi dari suatu permainan sudoku dinyatakan sebagai: X=(x 1,x 2,x 3,.., x 9 81 ); Dari vektor solusi diatas dapat kita simpulkan bahwa dengan menggunakan algoritma Bruteforce kita harus membangkitkan seluruh kemungkinan vektor solusi yang berjumlah 9 81 =1,99x10 77 kemungkinan. Pseudocode dari algoritma Bruteforce ini berupa loop berkalang sebanyak 81 buah, dimana di setiap loop di enumerasi seluruh kemungkinan angka yang dapat dimiliki oleh setiap elemen matriks sudoku x1,x2,x3,x4,x5,x6,x7,x8,x9, : integer for(x1=1 to 9) for(x2=1 to 9) for(x3=1 to 9) for(x4=1 to 9) for(x5=1 to 9) //semua loop kalang den for(x81=1 to 9) if (Solusi(x1,x2,x3,x4,x5,x6,x7,x8,x9)) Gambar 2.Psedocode algoritma Bruteforce Kompleksitas asimptotik dari algoritma Bruteforce diatas,dilihat dari banyaknya operasi perbandingan dilakukan, dapat disimpulkan bernilai O(n n ) yang termasuk kategori non polynomial complexity,sehingga penggunaan algoritma ini sangatlah tidak menguntungkan jika dilihat dari waktu dan banyaknya komputasi yang dilakukan oleh komputer. Dari hasil yang telah kita dapatkan diatas maka,dibutuhkan algoritma lain yang lebih mangkus daripada algoritma Bruteforce diatas untuk menyelesaikan masalah permainan sudoku 2.2 Algoritma Backtracking [2]Algoritma Backtracking merupakan algoritma yang berbasiskan pada algoritma DFS (Depth First Search) untuk mencari solusi persoalan lebih mangkus.kalau dilihat secara lebih teliti,algoritma Backtracking ini sebenarnya merupakan modifikasi algoritma Bruteforce.Modifikasi ini menyebabkan algoritma Backtracking dapat secara sistematis mencari solusi persoalan tanpa harus memeriksa seluruh kemungkian solusi yang ada.hanya pencarian yang mengarah ke solusi saja yang dipertimbangkan oleh algoritma ini,sedangkan pencarian yang tidak mengarah ke sebuah solusi tidak dilanjutkan.hal ini menyebabkan waktu komputasi algoritma Backtracking jauh lebih baik. Algoritma Backtracking membentuk sebuah pohon ruang status selama prosesnya Struktur pohon inilah, yang juga merupakan sebuah graf tak berarah,yang ditraversal dengan prinsip DFS(Depth First Search).Simpul-simpul pada pohon ruang status yang tidak mengarah ke solusi maka akan dimatikan.sedangkan simpul-simpul pohon ruang status yang masih mengarah ke solusi maka akan terus berkembang.pematian simpul pohon ruang status yang tidak mengarah kepada solusi ini sering disebut dengan istilah prunning. 2

Penerapan algoritma Backtracking pada permainan sudoku adalah sebagai berikut : 1. Algoritma dimulai pada elemen matris baris kesatu dan kolom ke satu 2. Periksa seluruh kemungkinan angka yang dapat dimiliki oleh baris tersebut 3. Jika terdapat angka yang valid dengan constraint permainan sudoku maka lanjutkan pemeriksaan ke elemen selanjutnya dari matriks 4. Jika tidak terdapat angka yang valid maka backtrack ke elemen matriks sebelumya 5. Algoritma ini akan berhenti jika sudah ditemukan suatu solusi atau jika tidak terdapat kemungkinan adanya solusi Pseudocode algoritma Backtracking ini dapat dilihat lebih lanjut pada gambar di bawah : Procedure array:matriks) SolveSudoku(input Deklarasi solusi:boolean i,j:integer Algoritma 1.solusi = false; 2.i=1; 3.j=1; 4.while (!solusi && i > 0) 5. 6,array[i][j].SetValue(array[i][j].G etvalue() + 1); 7.while(array[i][j].GetValue()<=9&& 8.!Tempat(i, j)) 9. 10.array[i][j].SetValue(array[i][j].G 11.etValue() + 1); 12. 13.if (array[i][j].getvalue() <= 14.maks) 15. 16. if (i == 9 && j == 9) 17. 18. solusi = true; 19. 20. 21. 22. j = j + 1; 23. if (j > 9) 24. 25. i = i + 1; 26. j = 1; 27. 28. 29. 30. 31. 32. array[i][j].setvalue(0); 33. j--; 34. if (j == 0) 35. 36. j = kolom; 37. i = i - 1; 38. 39. 40. Gambar 3. Psedocode algoritma Backtracking Pada baris 2 dan 3 dari gambar pseucode di atas dapat kita lihat inisialisasi variabel i dan j dengan 1,kemudian pernyelesaian permainan sudoku dimulai pada baris ke-4 dengan looping yang mempunyai kondisi berhenti jika sudah ditemukan suatu solusi atau variabel I bernilai 0 yang artinya tidak dapat ditemukan solusi.kemudian pada baris ke-10 pseudocode dicoba seluruh kemungkinan angka yang dapat dimiliki oleh elemen matriks baris i dan kolom j.pada baris ke-8 pseudocode terdapat fungsi Tempat yang berfungsi sebagai validasi apakah angka yang sedang dicoba tidak melanggar constraint permainan sudoku. Setelah melewati blok kode nomor 7 sampai 12,akan diperiksa lagi apakah angka yang dimiliki oleh elemen matriks baris i dan kolom j tersebut melebihi dari batas atau tidak.jika melebihi batas maka akan dilakukan backtrack ke elemen matriks sebelumnya sebagaimana yang terlihat pada blok kode nomor 30 sampai 37.Jika angka pada elemen matriks baris i kolom j tidak melebihi batas maka algoritma ini akan melanjutkan pencarian solusi ke elemen berikutnya pada matriks. Dapat disimpulkan bahwa dengan mematikan simpul pohon ruang status (prunning) algoritma Backtracking dapat menghemat waktu komputasi secara signifikan,sehingga merupakan salah satu algoritma alternatif yang dapat diterapkan untuk menyelesaikan permainan sudoku dengan bantuan komputer 2.3 Algoritma Backtracking dengan optimasi Sebagaimana dengan algoritma Backtracking yang telah dibahas pada subbab sebelumnya,algoritma Backtracking dengan optimasi ini juga mengandalkan metode prunning dalam cara kerjanya.yang membedakan algoritma ini dengan algoritma Backtracking biasa ialah cara pemilihan elemen 3

matriks selanjutnya dan cara pemilihan elemen matriks sebelumnya yang ingin di-backtrack. Cara pemilihan elemen matriks pada algoritma Backtracking dengan optimasi ini tidaklah secara linier seperti algoritma Backtracking biasa,melainkan dengan mencari elemen matriks yang memiliki probabilitas terkecil.probabilitas dalam konteks ini maksudnya ialah banyaknya kemungkinan angka pada suatu elemen matriks yang dapat memenuhi constraint sudoku dimulai dari angka yang sekarang oleh elemen matriks ini Oleh karena itu pemilihan elemen matriks berikutnya yang ingin dicari solusinya bisa saja bersifat acak tidak bersifat linier Algoritma Backtracking dengan optimasi membutuhkan tipe data baru alokasi memori tambahan untuk melaksanakan kerjanya.detail dari Tipe data baru yang bernama BackTrackWithOpt ini dapat dilihat pada listing pseudocode di bawah ini. class BacktrackWithOpt private int indexx; private int indexy; private int value; private int prob; private int urutan; public BacktrackWithOpt(int x, int y, int val) indexx = x; indexy = y; value = val; urutan = -22; Gambar 4. Deklarasi tipe data BacktrackWithOpt Property indexy berfungsi untuk menyimpan indeks kolom dari elemen matriks berhubungan.properti index berfungsi untuk menyimpan indeks baris dari elemen matriks yang bersangkutan pula.properti value berfungsi untuk menyimpan nilai dari elemen matriks yang bersangkutan.properti prob untuk menyimpan nilai probabilitas elemen matriks yang bersangkutan,dan yang terakhir properti urutan untuk menyimpan data urutan suatu elemen matriks akan dievaluasi Alokasi memori tambahan yang telah disebutkan di atas tadi ialah suatu array yang bertipe BacktrackWithOpt yang mempunyai banyak elemen sejumlah elemen matriks.tiap-tiap elemen dari matriks ini berkorespondensi dengan elemen matriks yang bersesuaian. Penerapan algoritma Backtracking dengan optimasi pada permainan sudoku adalah sebagai berikut : 1. Buat array dengan tipe BacktrackWithOpt yang banyak elemennya sejumlah dengan banyak elemen matriks. 2. Alokasi setiap elemen array ini dengan value,indeks baris,dan indeks kolom dari elemen matriks yang bersesuaian.properti urutan pada masing-masing elemen tabel diset dengan nilai - 22(nilai ini tidak harus bernilai -22,tetapi dapat dipilih nilai lain yang dapat berfungsi sebagai mark). 3. Hitung setiap probabilitas elemen elemen tabel dengan fungsi countprob(nanti akan dijelaskan pada sourcecode). 4. Proses pencarian solusi dimulai dari elemen tabel yang mempunyai nilai probabilitas yang paling kecil. 5. Periksa seluruh kemungkinan angka (value) yang dapat dimiliki oleh elemen tabel tersebut 6. Jika tidak terdapat angka yang valid maka backtrack ke elemen tabel sebelumnya dengan melihat urutan elemen tabel yang diproses sebelumnya,ulangi langkah 5 7. Jika terdapat angka valid maka cari elemen selanjutnya dari tabel yang yang mempunyai nilai probabilitas terkecil,ulangi langkah 5 8. Algoritma ini akan berhenti jika sudah ditemukan suatu solusi atau jika tidak terdapat kemungkinan adanya solusi Pseudocode algoritma Backtracking dengan optimasi ini dapat dilihat lebih lanjut pada gambar di bawah : Procedure SolveSudoku dengan optimasi(input array:matriks,tabel:array) Deklarasi : i,h,c,panjangarr : integer solusi,valid : Boolean Algoritma i=0;j=0;c=0;panjangarr=0; for(c=0 to 8) do for(j=0 to 8) do if(matriks[i][j]=-99)then 4

tabel[panjangarr] = new BackTrack(c,j,0); panjangarr++; for(int x=0 to 8) do if(tabel[x].geturutan =-22) then tabel[x].setprob(countprob(tabel[x].g etindexx,tabel[x].getindexy)) while(tabel[h].getprob()!= minprob()) h++; tabel[h].setprob(999); i++; tabel[h].seturutan(i); while (!solusi && i > 0) if (tabel[h].getvalue() == 0) tabel[h].setvalue(tabel[h].getvalu e() + 1); matriks[tabel[h].getindexx()][tabe l[h].getindexy()]=tabel[h].getvalue() ; if(validate(tabel[h].getvalue(), tabel[h].getindexx(), tabel[h].getindexy())) valid = true; valid = false; while(tabel[h].getvalue()<=side&&!valid) tabel[h].setvalue(tabel[h].getvalu e() + 1); matriks[tabel[h].getindexx()][tabel[h ].getindexy()] = tabel[h].getvalue(); if (validate(tabel[h].getvalue(), tabel[h].getindexx(), tabel[h].getindexy())) valid = true; valid = false; if (tabel[h].getvalue() > side) tabel[h].setvalue(0); matriks[tabel[h].getindexx()][tabe l[h].getindexy()] = 0; matriks[tabel[h].getindexx()][tabe l[h].getindexy()].text = ""; tabel[h].seturutan(-22); i--; h = 0; while ((h < panjangarr) && (tabel[h].geturutan()!= i)) h++; valid = false; if (i == panjangarr) solusi = true; for (int x =0;x<panjangArr;x++) if (tabel[x].geturutan() == -22) tabel[x].setprob(countprob(tabel[x].g etindexx(),tabel[x].getindexy())); h = 0; while(tabel[h].getprob()!=minprob()) h++; tabel[h].setprob(999); i++; 5

tabel[h].seturutan(i); Gambar5. Psedocode algoritma Backtracking dengan optimasi 3.Analisis dan kesimpulan Ketiga algoritma yang telah dibahas di atas mampu menyelesaikan permainan Sudoku dengan baik.tetapi pertanyaan yang akan timbul ialah manakah algoritma yang terbaik.untuk menjawab pertanyaan ini,haruslah diadakan analisis terhadap algoritma-algoritma di atas tersebut Algoritma Bruteforce ini sebagaimana yang telah kita ketahui,menemukan solusi permainan Sudoku ini dengan membangkitkan seluruh kemungkinan vektor solusi.setelah kemungkinan vektor solusi dibangkitkan barulah dicari vektor solusi mana saja yang memenuhi constraint.kelebihan algoritma Bruteforce ini terletak dari cara pikir yang straightforward dan lugu,tidak adanya trik-trik atau metode yang canggih pada algoritma ini menyebabkan biasanya algoritma ini yang langsung terpikir untuk menghadapi masalah permainan Sudoku ini. Tetapi ternyata algoritma ini mempunyai kelemahan yang mencolok,yaitu dari segi komputasi yang dilakukan,dan waktu yang dibutuhkan untuk melakukan komputasi tersebut. Bila kita teliti lebih lanjut pada kasus permainan sudoku ini kita harus membangkitkan calon vektor solusi sebanyak 9 81.Jika kita generalisasi permasalahan untuk permainan sudoku dengan ukuran papan permainan NxN maka harus dibangkitkan N pangkat N kuadrat solusi.oleh karena itu algoritma Backtracking bukan merupakan solusi yang efektif dan efisien untuk menyelesaikan permainan sudoku Skema yang dijalankan oleh runut-balik dengan optimasi secara umum mengutamakan pada pemilihan kotak yang memiliki kemungkinan angka yang sesuai dengan fungsi batas yang berjumlah paling sedikit. Runut-balik dengan optimasi ini memang memiliki lebih banyak kalang dan variabel untuk penyimpanan sementara, namun karena jenis kalang yang dipakai adalah while maka lebih besar kemungkinan program untuk mendapatkan solusi lebih cepat dan lebih dulu keluar dari kalang while dibandingkan skema runutbalik tanpa optimasi. Kelemahan dari skema dengan optimasi terdapat pada penggunaan memori yang lebih besar dibandingkan skema runut-balik tanpa optimasi. Hal ini berakibat lebih lambatnya pencarian solusi pada kotak Sudoku yang berukuran besar seperti 16 x 16 (Hexudoku). Menurut Tahir Arazi dan R Aditya Satria,dua orang yang mengimplementasikan algoritma ini pada program sudoku solver nya, algoritma Backtracking dengan optimasi selalu melakukan traversal dari awal hingga akhir matriks, sehingga untuk ukuran kotak yang lebih besar, akan terjadi perbedaan waktu yang lebih signifikan dibandingkan pendekatan runut-balik tanpa optimasi. Setelah membandingkan ketiga algoritma di atas,makanya algoritma Backtracking dan Backtracking dengan optimasi merupakan solusi yang lebih efisien dibandingkan dengan algorima Bruteforce. REFERENSI [1] www.wikipedia.org. Tanggal akses 18 Mei 2007 [2]Munir,Rinaldi.(2007).Diktat Kuliah IF2251 Strategi Algoritmik.Program Studi Teknik Informatika Algoritma Backtracking merupakan perbaikan dari algoritma Bruteforce.Algoritma ini mempunyai property yang dinamakan fungsi pembatas,fungsi pembatas menentukan apakah (x1,x2,x3,.,xk) mengarah ke suatu solusi jika ya,maka pembangkitan xk+1 dilanjutkan jika tidak maka backtrack ke komponen xk-1.dalam hal permainan sudoku ini xk+1 dianggap sebagai elemen berikut nya pada matriks,dan xk-1 merupakan elemen sebelumnya dalam matrikswalaupun dalam kasus permainan sudoku ini kompleksitas asimptotik dari algoritma Backtracking,fungsi pembatas dapat melakukan pruning yang menyebabkan waktu komputasi berkurang secara signifikan. 6