如果我有一个变量列表,[a,b,a,c,a,a,d,b,c,d,a]其中顺序很重要, 我必须将它们重命名为整数,我可以使用的最佳算法是什么?
一个简单的算法将是:
在上述情况下,解决方案将是[1,2,1,3,1,1,4,2,3,4,1]
我关注'n'哈希查找以及随之而来的复杂性。对于很长的列表(具有更多不同的变量),性能可能非常糟糕。有没有人有更好的算法来处理这个?
请注意,虽然该示例使用ascii字符,但列表的元素可以是任意字符串,列表的长度可以任意长(> 100k)等。
答案 0 :(得分:0)
O(n)
最坏情况哈希查找仅在使用朴素冲突解决方案时发生(并且所有项目都映射到相同的哈希值) - 您实际上使用哈希,因为您希望冲突“罕见”,从而平均受益从O(1)
查询时间开始。
因为您必须检查所有变量的重复项,所以总共不会比O(n)
好。
也许您可以利用其他信息 - 是否排序了变量名称的第一个实例列表?如果是,您只需要存储到目前为止遇到的字典最大变量名称(vmax
),从null
开始,并将列表元素与它们进行比较。如果测试元素vcur
小于或等于vmax
,则您之前已经看过变量名称,否则递增计数器,将vcur
与其关联并将vmax
设置为vcur
。