• Tidak ada hasil yang ditemukan

Analisis Perbandingan Algoritma Fisher Yates Shuffle dan Naive Shuffle

N/A
N/A
Protected

Academic year: 2021

Membagikan "Analisis Perbandingan Algoritma Fisher Yates Shuffle dan Naive Shuffle"

Copied!
10
0
0

Teks penuh

(1)

1

Analisis Perbandingan Algoritma

Fisher Yates Shuffle dan Naive Shuffle

Ahmad Farisi 1406595930

Magister Ilmu Komputer Universitas Indonesia Email : [email protected]

1. Latar Belakang

Shuffle atau dikenal dengan pengacakan merupakan teknik yang digunakan untuk

mengacak urutan dari sekelompok angka, teks, atau data. Proses pengacakan saat ini banyak digunakan dalam pengembangan perangkat lunak. Salah satu bidang yang sering menggunakan proses pengacakan adalah game. Banyak sekali implementasi pengacakan yang dilakukan dalam game. Beberapa game puzzle tentunya melakukan proses pengacakan pada awal mula game tersebut dimulai. Selanjutnya game perjudian yang terkenal di negara-negara yang menghalalkan perjudian tentunya juga membutuhkan proses pengacakan. Jika tidak ada proses pengacakan, maka game tersebut tidak akan

fair sehingga mudah ditebak dan menyebabkan berkurangnya peminat game tersebut.

Proses pengacakan yang dilakukan terhadap urutan angka, teks, atau data akan menghasilkan permutasi acak. Apabila proses pengacakan dilakukan secara berulang-ulang sampai n kali, maka permutasi acak yang dihasilkan adalah sejumlah panjang data! (panjang data faktorial). Misalnya sebuah urutan ABC diacak sampai n kali, maka permutasi yang dihasilkan adalah 3! yang artinya 6. Masing-masing permutasi akan menghasilkan jumlah yang berbeda-beda, sebagai contoh ABC berjumlah k, ACB berjumlah l, BAC berjumlah m, BCA berjumlah n, CAB berjumlah o, dan CBA berjumlah p.

Apabila ilustrasi di atas digunakan pada game kartu atau pocker, maka tentunya dalam n kali pengacakan kartu, jumlah kemunculan urutan tertentu diharapkan tidak dapat diprediksi dengan mudah yang artinya permutasi yang dihasilkan pada proses pengacakan seimbang. Apabila terdapat satu urutan kartu tertentu yang sering keluar, maka game kartu tersebut akan mudah dimenangkan. Sehingga diperlukan metode yang tidak berat sebelah, atau dengan kata lain dibutuhkan metode yang menghasilkan nilai atau urutan yang hampir sama untuk setiap kemungkinan kombinasi kartu yang keluar pada n kali pengacakan.

Dalam perkembangannya, terdapat beberapa metode atau algoritma yang dapat digunakan untuk melakukan proses pengacakan, seperti naive shuffle dan fisher yates shuffle. Dalam beberapa forum pengembang perangkat lunak yang terkenal dan populer saat ini seperti stackoverflow, codinghorror, dan stackexchange, banyak sekali pembahasan yang dilakukan untuk mencari metode pengacakan yang seimbang.

(2)

2 Penelitian ini membandingkan dua algoritma yang sering digunakan dalam proses pengacakan. Kedua algoritma tersebut adalah naive shuffle dan fisher yates shuffle. Kedua algoritma ini sama-sama dapat melakukan pengacakan dengan cara in place. Permutasi yang dihasilkan dari pengacakan dengan Algoritma Fisher Yates memiliki nilai probabilitas yang sama atau dapat dikatakan seimbang1. Sedangkan beberapa permutasi yang dihasilkan algoritma Naive Shuffle muncul lebih banyak dan sebagian lagi sedikit.

Oleh karena itu, dalam penelitian ini dilakukan eksperimen untuk mencari tahu dan membandingkan keseimbangan permutasi yang dihasilkan dalam proses pengacakan menggunakan algoritma Fisher Yates Shuffle dan Naive Shuffle.

2. Permasalahan

Permasalahan yang menjadi fokus dalam penelitian ini adalah apakah algoritma Fisher Yates Shuffle atau Naive Shuffle yang memiliki keseimbangan permutasi yang lebih baik dalam n kali pengacakan yang dilakukan.

3. Tujuan

Perbandingan yang dilakukan dalam proses pengacakan menggunakan algoritma Fisher Yates Shuffle dan Naive Shuffle ini ditujukan untuk mencari tahu algoritma mana yang memiliki keseimbangan permutasi yang lebih baik, atau dengan kata lain algoritma mana yang memberikan jumlah permutasi yang sama atau hampir sama untuk n kali pengacakan yang dilakukan. Untuk mencapai tujuan tersebut, dilakukan eksperimen menggunakan kedua algoritma tersebut.

4. Tinjauan Pustaka

4.1. Algoritma Naive Shuffle

Naive Shuffle merupakan metode pengacakan yang umum dilakukan dan juga bertujuan untuk menghasilkan permutasi yang seimbang.

Langkah-langkah pengacakan menggunakan algoritma Naive Shuffle adalah sebagai berikut.

1. Siapkan masukan (dalam bentuk angka ataupun karakter) sebanyak N.

2. Ambil sebuah nomor acak k di antara satu sampai i (panjang karakter -1) jumlah angka yang belum dianggap teracak (dicoret).

3. Hitung dari bawah, coret angka k yang belum dicoret dan tuliskan angka tersebut di lain tempat.

4. Ulangi langkah 2 dan 3 hingga semua angka tercoret.

1

(3)

3 5. Urutan angka yang ditulis di lain tempat tadi (langkah 3) adalah permutasi

acak dari angka awal.

Pseudo code nya adalah sebagai berikut.

function algoNaiveShuffle (A) for iA.length-1 down to 1 do

s= random number from 0 to A.length-1 swap(A[i],A[s])

endfor

4.2. Algoritma Fisher Yates Shuffle

Algoritma Fisher Yates Shuffle diambil dari nama penemunya, yaitu Ronald Fisher dan Frank Yates. Algoritma ini ditemukan pada tahun 1938 pada bukunya

Statistical Tables for Biological, Agricultural, and Medical Research. Algoritma

ini digunakan untuk mengubah urutan masukan yang diberikan secara acak. Permutasi yang dihasilkan oleh algoritma ini muncul dengan probabilitas yang sama.

Langkah-langkah pengacakan menggunakan algoritma Fisher Yates Shuffle adalah sebagai berikut.

1. Siapkan masukan (dalam bentuk angka ataupun karakter) sebanyak N.

2. Ambil sebuah nomor acak k di antara satu sampai i jumlah angka yang belum dianggap teracak (dicoret).

3. Hitung dari bawah, coret angka k yang belum dicoret dan tuliskan angka tersebut di lain tempat.

4. Ulangi langkah 2 dan 3 hingga semua angka tercoret.

5. Urutan angka yang ditulis di lain tempat tadi (langkah 3) adalah permutasi acak dari angka awal.

Pseudo code nya adalah sebagai berikut.

function algoFisherYate (A) for iA.length-1 down to 1 do

s= random number from 0 to i swap(A[i],A[s])

endfor

Sebagai contoh, apabila ada angka dengan urutan 1 2 3 4 5 6 7 8. Maka proses pengacakannya dengan algoritma Fisher Yates Shuffle adalah sebagai berikut.

(4)

4 Tabel 1. Contoh Pengacakan dengan Algoritma Fisher Yates

Step Range Roll Scratch Result

1 2 3 4 5 6 7 8 1 1-8 4 1 2 3 8 5 6 7 4 2 1-7 6 1 2 3 8 5 7 6 4 3 1-6 2 1 7 3 8 5 2 6 4 4 1-5 2 1 5 3 8 7 2 6 4 5 1-4 1 8 5 3 1 7 2 6 4 6 1-3 3 8 5 3 1 7 2 6 4 7 1-2 2 8 5 3 1 7 2 6 4 8 5 3 1 7 2 6 4

Permutasi yang dihasilkan pada contoh di atas adalah 8 5 3 1 7 2 6 4. Contoh ini adalah proses pengacakan 1 kali. Dalam penelitian ini, akan dilakukan eksperimen dengan proses pengacakan lebih dari 1 kali.

4.3. Penelitian Terkait

Penelitian tentang A Simulated Enhancement of Fisher-Yates Algorithm for

Shuffling Virtual Card Games using Domain-Specific Data Structures

(OluAde-Ibijola, 2012) melakukan implementasi terhadap game virtual card menggunakan algoritma Fisher Yates Shuffle.

Penelitian ini menerapkan algoritma Fisher Yates Shuffle untuk melakukan pengacakan terhadap 54 kartu. Artinya, kemungkinan permutasi dari 54 kartu tersebut adalah 54! atau sekitar 2,3 x 1071 urutan yang mungkin. Namun karena

game virtual card yang diimplementasikan adalah Whot Cards, maka dari 54

kartu, hanya 12 urutan kartu saja yang dibutuhkan, sehingga permutasinya dapat diurutkan dengan kemungkinan 12! urutan atau 479.001.600 urutan yang mungkin.

Yang dimaksud dengan domain-specific data structures dalam penelitian ini adalah struktur data generic list. Peneliti menggunakan struktur data generic list dengan IDE Visual Basic.Net. Generic merupakan object collection pada VB.Net yang sudah typed-safe yang terdiri dari object collection Array, List, Dictionary, Sorted Dictionary, Queue, dan Stack. Dalam penelitian ini object collection yang digunakan adalah List.

Berikut ini adalah contoh screen shot hasil pengacakan yang dilakukan peneliti terhadap 54 kartu dalam permainan whot!. Contoh berikut ini adalah contoh 6 buah permutasi yang dihasilkan setelah 6 kali pengacakan.

(5)

5 Gambar 1. Simulasi 6 permutasi yang berbeda dari Whot! Cards

5. Pembahasan

Untuk melihat permutasi yang dihasilkan oleh algoritma Fisher Yates Shuffle dan Naive Shuffle, maka dilakukan percobaan dengan keterangan berikut ini.

a. Data yang diacak : huruf/alfabet ABC b. Jumlah permutasi : 3! = 6

c. Jumlah pengacakan : 100.000 Kali d. Jumlah percobaan : 30 kali / algoritma

Dari keterangan di atas, maka dilakukan percobaan terhadap alfabet ABC dengan pengacakan sebanyak 100.000 kali untuk satu kali percobaan, dan percobaan dilakukan 30 kali untuk masing-masing algoritma.

Berikut ini adalah tabel yang memperlihatkan jumlah permutasi pada setiap pengacakan yang dilakukan sebanyak 30 kali dengan Fisher Yates Shuffle.

(6)

6 Percobaan 1 2 3 4 5 6 7 8 9 10 ABC 16705 16441 16846 16582 16688 16640 16767 16631 16690 16469 ACB 16793 16804 16802 16507 16773 16453 16644 16511 16778 16765 BAC 16645 16652 16587 16587 16718 16759 16696 16518 16486 16560 BCA 16497 16697 16545 16695 16669 16498 16566 16659 16713 16752 CAB 16826 16738 16500 16698 16746 16867 16834 16945 16728 16711 CBA 16534 16668 16720 16931 16406 16783 16493 16736 16605 16743 Total 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000

Tabel 3. Percobaan 11 sampai 20 Algoritma Fisher Yates Shuffle

Percobaan 11 12 13 14 15 16 17 18 19 20 ABC 16569 16941 16586 16792 16907 16723 16743 16505 16774 16715 ACB 16517 16753 16565 16739 16627 16495 16661 16777 16674 16639 BAC 16745 16273 16578 16670 16552 16760 16893 16611 16713 16734 BCA 16698 16532 16718 16670 16625 16693 16546 16717 16564 16429 CAB 16653 16843 16718 16507 16533 16652 16690 16842 16634 16753 CBA 16818 16658 16835 16622 16756 16677 16467 16548 16641 16730 Total 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000

Tabel 4. Percobaan 21 sampai 30 Algoritma Fisher Yates Shuffle

Percobaan 21 22 23 24 25 26 27 28 29 30 ABC 16551 16597 16766 16732 16559 16668 16772 16734 16762 16955 ACB 16603 16616 16635 16469 16567 16605 16699 16495 16577 16706 BAC 16815 16551 16825 16911 16644 16462 16705 16713 16422 16496 BCA 16633 16711 16507 16621 16666 16553 16586 16389 16800 16662 CAB 16431 16838 16566 16882 16899 16739 16740 16784 16756 16489 CBA 16967 16687 16701 16385 16665 16973 16498 16885 16683 16692 Total 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000

Dari 30 kali percobaan di atas, hasil kemunculan permutasi dirata-ratakan sebagai berikut.

Tabel 5. Rata-Rata kemunculan permutasi pada 30 kali percobaan Fisher Yates

Percobaan Rata-Rata Standar Deviasi

ABC 16.693,67 129,6622 ACB 16.641,63 110,426 BAC 16.642,70 141,5788 BCA 16.620,37 98,67973 CAB 16.718,07 133,1574 CBA 16.683,57 151,98 Total 100000

Rata-rata kemunculan tersebut kemudian digambarkan ke dalam grafik berikut ini bersama dengan nilai standar deviasinya untuk lebih murah melihat keseimbangan permutasinya.

(7)

7 Gambar 2. Rata-rata kemunculan permutasi pada 30 kali percobaan dengan Fisher Yates Dari percobaan di atas, didapatkan rata-rata kemunculan (AVG ) untuk setiap permutasi pada 30 kali percobaan dengan 100.000 kali pengacakan yang tidak jauh berbeda antara satu permutasi dengan permutasi lainnya.

16.620,37 < AVG < 16.718,07 Selisih antara rata-rata terbesar dan terkecil hanya senilai 97,7.

Berikut ini adalah tabel yang memperlihatkan jumlah permutasi pada setiap pengacakan yang dilakukan sebanyak 30 kali dengan Naive Shuffle.

Tabel 5. Percobaan 1 sampai 10 Algoritma Naive Shuffle

Percobaan 1 2 3 4 5 6 7 8 9 10 ABC 16629 16662 16653 16745 16428 16556 16789 16726 16560 16595 ACB 16601 16547 16608 16505 16691 16811 16828 16519 16666 16521 BAC 16716 16687 16697 16544 16733 16970 16539 16713 16759 16796 BCA 16724 16857 16471 16655 16681 16580 16666 16819 16570 16667 CAB 16723 16772 16745 16680 16709 16540 16594 16719 16631 16850 CBA 16607 16475 16826 16871 16758 16543 16584 16504 16814 16571 Total 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000

Tabel 6. Percobaan 11 sampai 20 Algoritma Naive Shuffle

Percobaan 11 12 13 14 15 16 17 18 19 20 ABC 16599 16638 16608 16577 16657 16560 16789 16655 16560 16595 ACB 16567 16871 16820 16572 16610 16666 16828 16680 16666 16521 16.560,00 16.580,00 16.600,00 16.620,00 16.640,00 16.660,00 16.680,00 16.700,00 16.720,00 16.740,00

ABC ACB BAC BCA CAB CBA

Fisher Yates

(8)

8 Percobaan 11 12 13 14 15 16 17 18 19 20 BAC 16812 16632 16622 16726 16716 16759 16539 16871 16759 16796 BCA 16825 16644 16696 16659 16623 16570 16666 16745 16570 16667 CAB 16670 16579 16544 16592 16543 16631 16594 16505 16631 16850 CBA 16527 16636 16710 16874 16851 16814 16584 16544 16814 16571 Total 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000

Tabel 7. Percobaan 21 sampai 30 Algoritma Naive Shuffle

Percobaan 21 22 23 24 25 26 27 28 29 30 ABC 16428 16667 16825 16871 16759 16796 16733 16571 16527 16789 ACB 16691 16850 16670 16745 16570 16667 16681 16595 16599 16828 BAC 16733 16571 16527 16505 16631 16850 16709 16521 16567 16539 BCA 16681 16595 16599 16544 16814 16571 16758 16796 16812 16666 CAB 16709 16521 16567 16655 16560 16595 16428 16667 16825 16594 CBA 16758 16796 16812 16680 16666 16521 16691 16850 16670 16584 Total 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000

Dari 30 kali percobaan di atas, hasil kemunculan permutasi dirata-ratakan sebagai berikut.

Tabel 8. Rata-Rata kemunculan permutasi pada 30 kali percobaan Naive Shuffle

Percobaan Rata-Rata Standar Deviasi

ABC 16.651,57 111,7512 ACB 16.666,47 111,2818 BAC 16.684,63 119,5773 BCA 16.673,03 96,88937 CAB 16.640,77 103,2719 CBA 16.683,53 127,1794 Total 100000

Rata-rata kemunculan tersebut kemudian digambarkan ke dalam grafik berikut ini bersama dengan nilai standar deviasinya untuk lebih murah melihat keseimbangan permutasinya.

(9)

9 Gambar 3. Rata-rata kemunculan permutasi pada 30 kali percobaan Naive Shuffle Dari percobaan di atas, didapatkan rata-rata kemunculan (AVG ) untuk setiap permutasi pada 30 kali percobaan dengan 100.000 kali pengacakan yang tidak jauh berbeda antara satu permutasi dengan permutasi lainnya.

16.651,57 < AVG < 16.684,63 Selisih antara rata-rata terbesar dan terkecil hanya senilai 33,06.

6. Kesimpulan

Dari percobaan yang telah dilakukan pada bab pembahasan, algoritma Fisher Yates Shuffle memiliki selisih AVG yang lebih besar dari pada algoritma Naive Shuffle. Keduanya sama-sama memiliki tingkat keseimbangan yang tidak berbeda jauh karena hanya selisih rata-rata 64,64 saja. Namun dalam percobaan ini, untuk 100.000 data, dapat disimpulkan bahwa algoritma Naive Shuffle sedikit lebih baik dari pada Fisher Yates Shuffle.

Adapun standar deviasi yang dihasilkan pada setiap permutasi dalam 30 kali percobaan menunjukkan keragaman data sampel yang sangat tinggi. Atau dengan kata lain perbedaan nilai sampel dari masing-masing permutasi terhadap rata-ratanya dalam 30 kali percobaan masih sangat tinggi.

Tingginya nilai standar deviasi menunjukkan keseimbangan permutasi yang dihasilkan juga tinggi mengingat dalam 30 kali percobaan, kemunculan masing-masing permutasi seimbang dengan rata-rata angka 16.620 sampai 16.718. Artinya tidak ada permutasi

16.610,00 16.620,00 16.630,00 16.640,00 16.650,00 16.660,00 16.670,00 16.680,00 16.690,00

ABC ACB BAC BCA CAB CBA

Naive Shuffle

(10)

10 yang mendominasi atau sering muncul. Apabila nilai standar deviasinya rendah, artinya terdapat permutasi yang cukup sering muncul pada urutan permutasi tertentu.

Dari berbagai forum dikatakan bahwa Naive Shuffle tidak lebih baik daripada Fisher Yates Shuffle2, untuk itu perlu dilakukan percobaan kembali dengan jumlah data yang lebih besar sehingga dapat lebih jelas, algoritma mana yang menghasilkan permutasi yang seimbang untuk n kali pengacakan, mengingat hasil akhir yang tidak jauh berbeda untuk 100.000 data yang dilakukan dalam penelitian ini.

7. Referensi

OluAde-Ibijola, A. (2012). A Simulated Enhancement of Fisher-Yates Algorithm for Shuffling in Virtual Card Games using Domain-specific Data Structures.

International Journal of Computer Applications, 54(11), 24–28. http://doi.org/10.5120/8612-2469 http://blog.codinghorror.com/the-danger-of-naivete/ http://en.algoritmy.net/article/43676/Fisher-Yates-shuffle 2 http://blog.codinghorror.com/the-danger-of-naivete/

Referensi

Dokumen terkait

Tujuan Penelitian Penelitian ini bertujuan untuk menerapkan metode Fisher Yates Shuffle pada pembelajaran IPA kelas IV tentang mitigasi bencana erupsi gunung api dalam game 3D..

4.5.Tampilan Halaman Acak Soal Dengan Fisher-Yates Pada tampilan halaman ini menjelaskan tentang berapa total jumlah soal yang akan diacak menggunakan algoritma

Berdasarkan hasil pengujian algoritma Fisher-Yates yang diterapkan pada permainan acak gambar didapatkan kesimpulan bahwa algoritma ini dapat berjalan dengan baik di dalam aplikasi

menyatakan bahwa Skripsi yang berjudul “Rancang Bangun Aplikasi Pembelajaran Fotografi Dasar berbasis Mobile menggunakan Metode Gamifikasi dan Fisher-Yates Shuffle”

Metode fisher yates shuffle sangat berpengaruh terhadap posisi potongan gambar, dengan adanya metode ini pada aplikasi numbers in english akan meminimalisir pemain

Aplikasi tryout ujian nasional android ini setelah dilakukan dengan menggunakan pengujian black box dan algoritma fisher-yates shuffle yang telah berhasil di terapkan.. Di

Pembuatan aplikasi game edukasi untuk pembelajaran transportasi bahasa inggris bagi anak sekolah dasar dengan metode fisher yates shuffle dan metode finite state machine FSM Hafis

2023 | page 1283 Aplikasi Mobile Media Pembelajaran Untuk Siswa TK RA Teknologi Menggunakan Metode Fisher Yates Shuffle Rikko Kurnia Fitra1, Susi Erlinda2, T.Sy Eiva Fadha³,