【发布时间】:2013-07-29 20:50:06
【问题描述】:
给定单词数组,对字谜进行分组 IP:{焦油,老鼠,香蕉,atr} OP:{[tar,rat,atr],[香蕉]}
使用哈希表解决这个问题的一个方法。考虑每个单词,对其进行排序,如果不存在,则将其作为键添加到哈希表中。键的值将是具有相同键的所有字谜的列表。我想知道时间复杂度,要对数组中的字符进行排序,假设 O(n log n) 存储在哈希表中将是 O(n),总共 O(n*nlogn)。
有没有更好的算法?时间复杂度更低?
【问题讨论】:
-
但是
n是单词的长度,而不是数组中的单词数,所以应该不会太糟糕。无论如何,您可以定义自己的哈希函数,该函数将独立于重新排列。例如,将字母值相加:tar -> 20+1+18=39。但这可能不是一个很好的哈希值。 -
看不出这个问题和dup的关系。请参阅here 以获取与顺序无关的哈希。我编写的测试应用程序转储了哈希值和单词,然后我通过哈希对其进行排序以将字谜组合在一起,这似乎是您前进的方向。