【问题标题】:Getting all permutations of a word where letters may have variants获取字母可能有变体的单词的所有排列
【发布时间】:2011-10-14 15:43:59
【问题描述】:

我正在寻找以下问题的伪代码算法。

我想得到一个单词的所有排列。 在字母表中,每个字母都可能有变体。例如在法语中,字母 e 也可以是 é è ê ë。 与其他字母相同... aàâä 等。

现在对于任何给定的单词,我想列出所有字母的所有变体的所有可能排列。

输入是一个单词和一个所有字母及其变体(如果有的话)。

【问题讨论】:

  • 我不知道你想要什么,我可以看到你用它来生成一个替代搜索列表。但如果这个词很长,可以想象它可能包含大量的排列。最好存储单词的规范化版本,并将搜索词规范化为字符的基本变体。
  • 好吧,我想要反过来。用户可以输入标准化版本的单词,我需要检查是否存在有效的变体。
  • 我仍然会通过标准化版本来做到这一点。无论您在何处存储此类内容,都可以根据规范化版本存储变体。这会让事情变得容易一些。希望您使用的任何语言都有某种转码库来自动生成规范化版本,也许是 iconv

标签: algorithm permutation


【解决方案1】:

这是一些基本的伪代码:

  1. Generate a list Perm[1...n] of all permutations without considering variants.
  2. For i = 1 to n do
  3.  For j = 1 to |Perm[i]| do
  4.   For k = 1 to #variants(Perm[i][j])
  5.    print Perm[i][1...j-1] (variant #k) Perm[i][j+1...|Perm[i]|]

换句话说,在不考虑变体的情况下生成排列(这个问题已经在 SO 上处理过多次,请查找“生成排列”)。然后,对于每个排列,查看每个字母,对于每个排列,打印单词,并将字母替换为其变体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多