Arrays.copyOfRange()的运行时

时间:2015-03-12 01:16:19

标签: java arrays binary-search

Java的Arrays.copyOfRange(array,startIndex,endIndex)函数的大O运行时是什么?

例如,使用copyOfRange在数组函数上编写简单的二进制搜索而不是传入起始和结束索引时,在空间和时间复杂度方面是否等效或效率更低?

2 个答案:

答案 0 :(得分:2)

Arrays.copyRangeOf()使用System.arraycopy()使用本机代码(例如,可以使用memcpy - 取决于JIT实现)。

使用System.arraycopy()复制背后的“魔力”是进行一次调用以复制内存块,而不是进行n个不同的调用。

这意味着与您自己选择实施的任何其他解决方案相比,使用Arrays.copyOfRange()肯定会更有效。

此外,我没有看到二进制搜索如何在这里提供帮助:数组具有直接访问权限 - 现在我们确切地知道src,dst以及我们应该复制多少项目。

从big-O的角度来看,复杂性将是O(n*k),其中n是要复制的项目数,k是每个项目的大小(以位为单位)。空间复杂性是一样的。

答案 1 :(得分:0)

Arrays.copyOfRange需要线性时间 - 具有低常数因子,但仍然是线性时间。操纵开始和结束指数将不可避免地渐渐加快,O(log n)而不是O(n)。