Word Unscrambler 复杂度 Class
Word Unscrambler Complexity Class
我在复杂性领域 classes 和相关概念方面经验不足。但是,输出给定的乱序词是否是真正的英语单词的任务是 P 还是 NP 问题? (如果这甚至有意义的话)我见过的所有程序都接受输入并生成单词的所有排列,然后将所有排列与字典中的每个单词进行比较。如果有另一种算法采用不同的、更有效的方法怎么办?这会改变问题的 class 复杂性吗?抱歉,如果我使用的术语不正确
用 k 生成单词的排列必然具有指数复杂度,因为有 k! 个排列,算法需要创建商场。但是,使用称为 hash table 的数据结构可以使查找部分更加高效,它允许在近乎恒定的时间内执行查找。
您不需要生成所有排列。只需计算每个字母在单词中出现的次数并比较计数,
或对每个单词的字母进行排序,然后进行比较。这些操作都是多项式的所以在 P.
英语单词的数量是有界的,所以显然任何英语单词的可能长度都是有界的,所以从技术上讲,你的问题可以在常数时间内解决(尽管常数会很大)。如果您将问题改写为 say,您将获得一个任意长的字母表字典,然后对于您想要确定答案的查询词,那么事情就会变得更加有趣。那么@fbg 给出的答案可能是您最好的选择;为字典中的每个单词散列每个字母出现次数的元组(比如,按某种排序顺序获取字母表),然后如果给你一个乱序的单词并进行相同的散列,你可以很快判断是否你的查询乱码可以"unscrambled"给出解,否则你的字典里没有解
我在复杂性领域 classes 和相关概念方面经验不足。但是,输出给定的乱序词是否是真正的英语单词的任务是 P 还是 NP 问题? (如果这甚至有意义的话)我见过的所有程序都接受输入并生成单词的所有排列,然后将所有排列与字典中的每个单词进行比较。如果有另一种算法采用不同的、更有效的方法怎么办?这会改变问题的 class 复杂性吗?抱歉,如果我使用的术语不正确
用 k 生成单词的排列必然具有指数复杂度,因为有 k! 个排列,算法需要创建商场。但是,使用称为 hash table 的数据结构可以使查找部分更加高效,它允许在近乎恒定的时间内执行查找。
您不需要生成所有排列。只需计算每个字母在单词中出现的次数并比较计数, 或对每个单词的字母进行排序,然后进行比较。这些操作都是多项式的所以在 P.
英语单词的数量是有界的,所以显然任何英语单词的可能长度都是有界的,所以从技术上讲,你的问题可以在常数时间内解决(尽管常数会很大)。如果您将问题改写为 say,您将获得一个任意长的字母表字典,然后对于您想要确定答案的查询词,那么事情就会变得更加有趣。那么@fbg 给出的答案可能是您最好的选择;为字典中的每个单词散列每个字母出现次数的元组(比如,按某种排序顺序获取字母表),然后如果给你一个乱序的单词并进行相同的散列,你可以很快判断是否你的查询乱码可以"unscrambled"给出解,否则你的字典里没有解