在電腦科學領域,對元素數組或列表進行洗牌是一種常見的操作,可用於各種應用程序,從隨機化遊戲結果到分發牌組中的紙牌。為此目的最有效的演算法之一是 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 方法來打亂該陣列。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3