如果我有一个变量列表,[a,b,a,c,a,a,d,b,c,d,a] 顺序很重要,我必须将它们重命名为整数,那么最好的算法是什么我可以使用吗?
一个简单的算法将是:
- 创建一个空的哈希表,HT。
- 对于列表中的每个变量,
- 如果它没有被索引,则为其分配一个新的索引并将(变量,索引)放入HT中。
- 如果它被索引,则使用索引。
在上述情况下,解决方案将是 [1, 2, 1, 3, 1, 1, 4, 2, 3, 4, 1]
我关心“n”哈希查找以及随之而来的复杂性。对于非常长的列表(具有更多不同的变量),性能可能非常糟糕。有没有人有更好的算法来处理这个问题?
请注意,虽然该示例使用 ascii 字符,但列表的元素可以是任意字符串,列表的长度可以是任意长(> 100k)等。