我正在寻找最有效的算法来检查数组中是否有唯一的元素。结果不需要是唯一的元素,只需相应的true或false即可。我知道我可以通过哈希表或诸如此类的东西达到O(n)效率,但我仍然在寻找一种在空间上更有效的结果。
e-数组未排序,包含整数。
发布于 2011-02-21 01:15:30
如果可能值的数量很小且事先已知,则可以使用位数组(在时间上是O(n),在空间上是O(n),并且比哈希表需要更少的空间)。
如果可能值的数量很大,并且您需要它是确定性的,那么您可以使用散列表(如果您有一个好的散列函数并且不需要增加散列表,则为O(n) )或就地对列表进行排序(排序时为O(n*lg(n),搜索第一个唯一元素时为O(n) )
如果可能值的数量很大,则不需要确定该值,如果希望查看某个特定元素是否在集合中,也可以使用Bloom Filter。Bloom Filter比hash map更节省空间,但存在误报的可能性(数据结构认为元素在集合中,而实际上不在集合中)
发布于 2011-02-21 01:06:16
我不确定O(n),但对于O(n^2),你可以将一个元素与其他元素进行异或运算
发布于 2011-02-21 01:11:26
在php中有一个函数array_keys()。
array array_keys ( array $input [, mixed $search_value [, bool $strict = false ]] )如果设置了可选参数$search_value,则函数将只返回查找到的值的键。如果返回的只有on数组键,则该值必须是唯一的。
我想我的答案有点具体(语言),我不知道这个函数的大-O。你必须自己测试它。:)
更新:我找到了描述array_keys()为O(n)的this article。
https://stackoverflow.com/questions/5058483
复制相似问题