【发布时间】:2011-11-29 05:54:45
【问题描述】:
有人知道array_unique() 的Big O 吗?
我没有查看源代码,但我想它会循环遍历每个值并检查它是否在数组中,即O(n^2),这样是否正确?
谢谢
【问题讨论】:
-
This answer 分步总结,但我不太倾向于将您的问题标记为该问题的重复,因为它提出的问题完全不同:)
标签: php big-o array-unique
有人知道array_unique() 的Big O 吗?
我没有查看源代码,但我想它会循环遍历每个值并检查它是否在数组中,即O(n^2),这样是否正确?
谢谢
【问题讨论】:
标签: php big-o array-unique
它是O(nlogn),因为它使用排序而不是您的O(n^2) 扫描。
请注意,密钥是保留的。 array_unique() 首先对作为字符串处理的值进行排序,然后将保留每个值遇到的第一个键,并忽略所有后续键。这并不意味着将保留未排序数组中第一个相关值的键。
引自http://php.net/manual/en/function.array-unique.php
编辑:记得用谷歌搜索,查看手册,检查现有问题,然后提问。
【讨论】:
array_unique 是否使用排序,并用谷歌搜索array_unique sort 作为其关键字。然后第一个结果就是我想要的 :-) 因为它对数组进行排序然后进行线性扫描,所以时间复杂度将是 O(nlogn),这是排序成本。