Saya belum melakukan analisis untuk mengkonfirmasi seberapa seragam (atau tidak) ini akan, dan itu bisa disesuaikan menjadi shuffle yang benar, tetapi bisakah Anda memilih, dari susunan awal dari i
indeks th = i + 1
, (k + RandNum50() + RandNum50() - 1) mod (100 - k)
indeks, dengan penghapusan, untuk k
= 0,99?
Ini "mendorong" puncak RandNum50() + RandNum50()
distribusi ke depan secara seragam.
Saya cukup yakin ini tidak tepat seperti yang saya nyatakan karena 0 index (1) tidak dapat diperoleh dari pilihan pertama dan saya tidak dapat dengan cepat melihat alternatif 1..50 + 1..50 penyesuaian yang menghasilkan 0 ..99.
Memperbarui
Untuk memperbaiki masalah yang saya catat, saya secara efektif digunakan RandNum100
seperti yang disebutkan dalam komentar pertanyaan untuk menginisialisasi k
offset pertama secara acak .
Ini menghasilkan distribusi dengan gelombang yang signifikan di bagian depan.
Alih-alih maju dengan 1 saya menggunakan yang lain RandNum50
untuk meningkatkan itu terlebih dahulu k
. Ini menghasilkan hasil yang cukup acak bagi saya, tetapi masih tidak "benar-benar" acak, seperti yang dapat dengan mudah dilihat jika Anda mengubah K menjadi 2.
Menguji kode VB.NET di mana saya melayani bahkan K. Catatan itu adalah O (K), 6K + 2 sebenarnya.