首頁  >  文章  >  web前端  >  在 Java 中使用 Fisher-Yates 演算法對陣列進行洗牌

在 Java 中使用 Fisher-Yates 演算法對陣列進行洗牌

Barbara Streisand
Barbara Streisand原創
2024-09-26 06:46:42616瀏覽

Shuffling Arrays with the Fisher-Yates Algorithm in Java

介紹

在電腦科學領域,對數組或元素列表進行洗牌是一種常見的操作,可用於各種應用程序,從隨機化遊戲結果到分發牌組中的紙牌。為此目的最有效的演算法之一是 Fisher-Yates Shuffle,也稱為 Knuth Shuffle。該演算法確保數組的每個排列都有相同的可能性,這使其成為創建無偏隨機洗牌的理想選擇。

在本文中,我們將探討 Fisher-Yates Shuffle 演算法的 Java 實作。提供的程式碼有效地對整數數組進行了適當的洗牌,展示了該演算法的優雅性和有效性。

Fisher-Yates 洗牌演算法

Fisher-Yates Shuffle 演算法的運作方式是從末尾到開頭迭代數組,將每個元素與數組中較早出現的隨機選擇的元素(包括當前位置)交換。此過程可確保數組的所有排列都是同等機率的。

Java程式碼實現

這是 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn