在電腦科學領域,對數組或元素列表進行洗牌是一種常見的操作,可用於各種應用程序,從隨機化遊戲結果到分發牌組中的紙牌。為此目的最有效的演算法之一是 Fisher-Yates Shuffle,也稱為 Knuth Shuffle。該演算法確保數組的每個排列都有相同的可能性,這使其成為創建無偏隨機洗牌的理想選擇。
在本文中,我們將探討 Fisher-Yates Shuffle 演算法的 Java 實作。提供的程式碼有效地對整數數組進行了適當的洗牌,展示了該演算法的優雅性和有效性。
Fisher-Yates Shuffle 演算法的運作方式是從末尾到開頭迭代數組,將每個元素與數組中較早出現的隨機選擇的元素(包括當前位置)交換。此過程可確保數組的所有排列都是同等機率的。
這是 Fisher-Yates Shuffle 演算法的 Java 實作:
import java.util.*; class FYShuffleAlgorithm { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 6}; shuffle(arr); } public static void shuffle(int[] arr) { Random rand = new Random(); for (int i = arr.length - 1; i > 0; i--) { int randomIndex = rand.nextInt(i + 1); int tmp = arr[i]; arr[i] = arr[randomIndex]; arr[randomIndex] = tmp; } System.out.println(Arrays.toString(arr)); } }
代碼說明
初始化:
main 方法使用值 {1, 2, 3, 4, 5, 6} 初始化一個整數陣列 arr,然後呼叫 shuffle 方法來對這個陣列進行洗牌。
以上是在 Java 中使用 Fisher-Yates 演算法對陣列進行洗牌的詳細內容。更多資訊請關注PHP中文網其他相關文章!