【问题标题】:Are there any algorithms for scrambling a word? [closed]有什么算法可以打乱单词吗? [关闭]
【发布时间】:2012-01-27 16:43:45
【问题描述】:

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

【问题讨论】:

  • 这与洗牌数组有什么不同?
  • 你所说的“乱字”到底是什么意思?
  • 乱码应该有意义还是纯随机?
  • 纯粹是随机的,抱歉,这和随机排列数组一样,我只是在寻找好的算法,但通过 google 搜索找不到它们

标签: c algorithm word scramble


【解决方案1】:

查找元素序列(或者,在您的情况下是单词中的字母)的随机排列的标准算法是 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 的信息)。

希望这会有所帮助!

【讨论】:

  • 非常感谢,非常适合我的需要
【解决方案2】:

使用 Knuth Shuffle(又名 Fisher-Yates Shuffle)。它具有确保集合的每个排列都具有相同可能性的理想特征。 Here's a link 用于在任意大小的对象上工作的 C 实现(以及其他语言的实现)。

【讨论】:

    猜你喜欢
    • 2015-05-08
    • 1970-01-01
    • 2011-02-12
    • 2012-07-08
    • 2021-07-25
    • 2011-08-21
    • 2019-05-24
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多