Algorithm 单词解读器复杂度类

Algorithm 单词解读器复杂度类,algorithm,time-complexity,Algorithm,Time Complexity,我在复杂性类和相关概念领域的经验不是很丰富。但是,输出一个给定的加扰词是否是真正的英语单词的任务是一个P或NP问题吗?(如果这有意义的话)我看过的所有程序都会输入并生成单词的所有排列,然后将所有排列与字典中的每个单词进行比较。如果有另一种算法采用了不同的、更有效的方法呢?这会改变问题的类复杂性吗?抱歉,如果我错误地使用了术语生成具有k的单词排列必然具有指数复杂性,因为有k!置换,算法需要创建所有置换。但是,使用称为a的数据结构可以使查找部分更有效,它允许在几乎恒定的时间内执行查找。您不需要生成所

我在复杂性类和相关概念领域的经验不是很丰富。但是,输出一个给定的加扰词是否是真正的英语单词的任务是一个P或NP问题吗?(如果这有意义的话)我看过的所有程序都会输入并生成单词的所有排列,然后将所有排列与字典中的每个单词进行比较。如果有另一种算法采用了不同的、更有效的方法呢?这会改变问题的类复杂性吗?抱歉,如果我错误地使用了术语

生成具有k的单词排列必然具有指数复杂性,因为有k!置换,算法需要创建所有置换。但是,使用称为a的数据结构可以使查找部分更有效,它允许在几乎恒定的时间内执行查找。

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

中,英语单词的数量是有界的,因此很明显,任何英语单词的可能长度都是有界的,所以从技术上讲,你的问题是可以在常数时间内解决的(尽管常数会很大)。如果你把你的问题改成这样,你会得到一本字母表上任意长度的字典,然后对于一个你想确定答案的查询词,事情会变得更有趣。那么@fbg给出的答案可能是你最好的选择;对字典中每个单词的每个字母出现次数的元组进行散列(例如,以某种排序顺序对字母表进行排序),然后如果给你一个加扰词并进行相同的散列,你可以很快判断你的查询加扰词是否可以“解译”以给出解决方案,否则,您的字典中不存在解决方案。

那么这个问题属于复杂度类中的哪一类?根据这些信息,您能用O或θ表示算法的运行时复杂度吗?在大O表示法中,我想应该是O(k!)因为这是当k接近无穷大时增长最大的表达式,但是您还需要考虑最初构建哈希表所需的时间,所以它是O(k!+n),其中n是字典中的单词数。这是否是指数的,取决于你是否认为k是常数,对于大多数真实的语言来说,单词的长度是有限度的,但是从理论的角度来看,最好还是把它看作一个变量。(实际上,单词可能太长,以至于k!太大了,特别是在挪威语中,例如sannsynlighetsmaksimeringsetimator是一个有效的单词)…所以,因为k描述了(一部分)的大小你的输入,复杂度包含一个在k中是指数的项,这是在P中的一个决策问题,这个问题也在NP中。*因为没有考虑到这一点,就直接撞到了桌子上*