Word Unscrambler复杂性类

时间:2015-07-17 16:47:45

标签: algorithm time-complexity

我在复杂性类和相关概念领域没有那么好的经验。但是,输出一个给定的扰乱单词是否是真正的英语单词的任务是P还是NP问题? (如果这甚至有意义的话)我所见过的所有程序都接受输入并生成单词的所有排列,然后将所有排列与字典中的每个单词进行比较。如果有另一种算法采用不同的,更有效的方法会怎么样?这会改变问题的阶级复杂性吗?对不起,如果我错误地使用了终结法

3 个答案:

答案 0 :(得分:4)

您不需要生成所有排列。只计算每个字母出现在单词中的次数并比较计数, 或者对每个单词的字母进行排序然后比较它们。这些操作都是多项式的,所以在P

答案 1 :(得分:1)

使用 k 生成单词的排列必然具有指数复杂性,因为存在 k!排列,并且算法需要全部创建它们。但是,通过使用称为hash table的数据结构,查找部分可以更高效,这允许在接近恒定的时间内执行查找。

答案 2 :(得分:1)

英语单词的数量是有界限的,因此很明显任何英语单词的可能长度是有界的,所以从技术上讲,你的问题可以在恒定时间内解决(尽管常数会很大)。如果你把你的问题重新解释为,你会得到一个字母表中任意长度的字典,然后你想要确定答案的查询字,那么事情会变得更有趣。然后@fbg给出的答案可能是你最好的方式;对每个字母出现次数的元组进行散列(比如按字母顺序排列),对于字典中的每个单词,然后如果给出一个加扰的单词并执行相同的散列,则可以非常快速地判断您的查询加扰字可以“解密”以提供解决方案,否则您的字典中不存在任何解决方案。