Python'da rastgele çalışmalardan nasıl karıştırılır?
Soruyorum çünkü çok hızlı çalışıyor. Karıştırmaya çalıştığımda 10 ^ 6 öğesi için 1 dakika çalışıyor, ancak Python shuffle bunu 8 saniyede yapıyor mu?
Python'da rastgele çalışmalardan nasıl karıştırılır?
Soruyorum çünkü çok hızlı çalışıyor. Karıştırmaya çalıştığımda 10 ^ 6 öğesi için 1 dakika çalışıyor, ancak Python shuffle bunu 8 saniyede yapıyor mu?
Yanıtlar:
Python en random.shuffle
, O (n) sürede çalışan ve mükemmel bir karıştırma olduğu kanıtlanan Fisher-Yates shuffle'ı kullanır (iyi bir rasgele sayı üreteci olduğu varsayılarak).
Diziyi sondan ilk girişe kadar yineleyerek, her girdiyi altındaki rastgele bir dizindeki bir girişle değiştirir.
Fisher-Yates karıştırma işleminin temel işlemi, bir şapkadan veya kart destesinden kartlar arasından rastgele kartlar toplamaya benzer. Spesifik algoritmanın sağladığı, bunu sayısal olarak verimli ve titiz bir şekilde yapmanın, düzgün bir şekilde yapıldığında tarafsız bir sonucu garanti etmenin bir yoludur ...
Modern ... çözümü, "yinelenen" sayıları her yinelemede son vurulmamış sayı ile değiştirerek listenin sonuna taşımaktır. Bu O (n göre, O (n) için algoritmanın zaman karmaşıklığını azaltır 2 saf uygulanması için). Bu değişiklik aşağıdaki algoritmayı verir (sıfır tabanlı bir dizi için).
To shuffle an array a of n elements (indices 0..n-1): for i from n − 1 downto 1 do j ← random integer with 0 ≤ j ≤ i exchange a[j] and a[i]