JavaScript

JavaScript Diziyi Rastgele Karıştırma

Dizideki öğeleri rasgele düzenleyen (rastgele yeniden sıralayan) bir fonksiyon yazalım.

Yazacağımız fonksiyon ile birden fazla çalışma farklı şekilde elemanların sıralanmasını sağlar.

Yazacağımız karıştırma kodu aşağıdaki gibi olacaktır.

Kodun çalışmasını biraz açıklayalım.

Bu işlem kısmen de olsa işe yaramaktadır, çünkü Math.random () – 0.5 pozitif veya negatif olabilen rastgele bir sayıdır, bu nedenle sıralama işlevi elemanları rastgele yeniden sıralar.

Ancak, sıralama işlevi bu şekilde kullanılmadığı için, tüm permütasyonlar aynı olasılıkta değildir.

Yukarıdaki algoritma yerine aşağıdaki şu algoritmayı kullanmak çok daha iyi sonuç vermektedir.

Örneğin, Fisher-Yates karışık çalma adlı harika bir algoritma var. Buradaki düşünce diziyi ters sırayla yürümek ve her öğeyi kendisinden önce rastgele bir tane ile değiştirmek:

yada daha basit(anlaşılır) şekilde yapmak için şunu kullanabilirsiniz.

 

Yukarıdaki her iki yöntemi kullanmak için aşağıdaki gibi bir kodu yazmak yeterli olacaktır.

Şimdi iyi görünüyor: tüm permütasyonlar aynı olasılıkta gözüküyor.

Ayrıca, performans açısından Fisher-Yates algoritması çok daha iyidir.

Yorum bırak