对于任意两个序列 a, b,其中 a = [a1,a2,...,an] 且 b = [b1,b2,...,bn] (0a, b具有相同的元素,而不关心它们的顺序。例如,如果 a = [1,1,2,3], b = [2,1,3,1], c = [3,2,1,3] ,则 f(a) = f(b),f(a) ≠ f(b)。
我知道有一种简单的算法,它首先对序列进行排序,然后将其映射到整数。
例如,排序后,我们有a = [1,1,2,3],b = [1,1,2,3],c = [1,2,3,3],假设m = 9 ,使用十进制转换,我们最终将得到 f(a) = f(b) = 1123 ≠ f(c) = 1233。但是使用某种排序算法这将花费 O(nlog(n)) 时间(不要使用非比较排序算法)。
有更好的方法吗?像哈希之类的东西? O(n) 算法?
请注意,我还需要易于反转的函数,这意味着我们可以将整数映射回序列(或更简洁地说是集合)。
更新:请原谅我糟糕的描述。这里 m、n 都可以非常大(100 万或更大)。而且我还希望 f 的上限非常小,最好是 O(m^n)。