2011-12-25 81 views
0

我想做一個字擾頻器,並想知道是否有任何算法,我應該使用或者如果我應該從頭開始構建它。任何指針都會有幫助!有沒有用於拼寫單詞的任何算法?

+2

與洗牌數組有什麼不同? – SLaks 2011-12-25 19:04:12

+2

你是什麼意思「亂拼字」? – Staven 2011-12-25 19:04:27

+0

雜亂的單詞應該是有意義的還是純粹隨機的? – nikhil 2011-12-25 19:09:22

回答

4

標準算法用於找到元素的序列的隨機置換(或者,在你的情況下,在字中的字母)是Fisher-Yates shuffle,其以線性時間產生元素的序列的真正的隨機置換。該算法是完善的,許多標準庫提供它的實現(例如,C++ std::random_shuffle算法通常使用此算法實現),因此您可能能夠找到預先寫好的實現。如果不是,該算法是非常容易實現的,這裏是它的一些僞代碼:

for each index i = 0 to n - 1, inclusive: 
    choose a random index j in the range i to n - 1, inclusive. 
    swap A[i] and A[j] 

實現這一點,選擇一個隨機指數時,你挑0和n-之間的指數時要小心1包括在內;這會產生不均勻的字母分佈(您可以閱讀更多關於in this earlier question的信息)。

希望這會有所幫助!

+0

我現在就試試這個 – Aspyn 2011-12-25 19:11:56

+0

非常感謝,完美的我所需要的 – Aspyn 2011-12-25 19:17:21

1

請隨Knuth Shuffle(也就是Fisher-Yates Shuffle)。它具有確保每個集合的排列同等可能的理想特徵。 Here's a link到C中的實現(以及其他語言的實現),該實現在任意大小的對象上工作。