我只是有一个简单的问题,为什么排序数组O(log N)的大O符号?它将是一个排序数组。
答案 0 :(得分:4)
Big O表示法通常在算法的上下文中有意义。当你说Big O表示法是O(log n)时,你在考虑什么操作。
如果您的意思是搜索,那么它是O(log n),因为您可以使用二进制搜索。这实质上意味着你看看你的数组的中间元素,如果它大于你正在搜索的元素,你然后搜索较大的一半(以相同的方式),反之亦然(假设你还没有)当然找到了你的元素)。您可以在wikipedia上阅读更详细的说明。
在搜索的每一步(查看中间元素)时,您正在切割必须搜索的数组的大小,因为您现在可以知道搜索元素必须位于中间元素的哪一侧。当然这仅适用于排序数组。对于非排序数组,您可以使用的唯一搜索算法是线性搜索,您可以检查数组中每个平均n / 2次检查的元素。
一般来说,Big O描述了算法的运行时特性,所以你不能只问,排序数组的Big O是什么,它必须是对数组的一些操作。但是,您可以根据某些数据结构占用的空间(内存)来考虑Big O.在这种情况下,排序的数组仍然需要O(n)空间来存储N个元素。
答案 1 :(得分:3)
这个问题有点虚伪。复杂性不适用于数组,但实际上适用于对数组进行排序的算法(我假设您的意思是运行时复杂性而不是内存)。
因此,根据使用的算法,O(X)中用于对数组进行排序的X可能会发生很大变化。
检查这些页面,了解一般复杂性和特殊情况数组排序的启动程序。
Introduction to algorithm complexity