2011-12-25 82 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中的实现(以及其他语言的实现),该实现在任意大小的对象上工作。