0

我正在尝试制作一个单词扰频器,并且想知道是否应该使用任何算法,或者我是否应该从头开始构建它。任何指针都会有所帮助!

4

2 回答 2

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 之间的索引;这会产生不均匀的字母分布(您可以在前面的问题中阅读更多相关信息)。

希望这可以帮助!

于 2011-12-25T19:04:55.727 回答
1

使用Knuth Shuffle(又名 Fisher-Yates Shuffle)。它具有确保集合的每个排列都具有同等可能性的理想特征。 这是一个链接到 C 中的实现(以及其他语言的实现),它适用于任意大小的对象。

于 2011-12-25T19:05:33.533 回答