arrays - 为什么这是 O(nlogn)

标签 arrays data-structures big-o time-complexity

我今天有一个实习面试,我无法弄清楚。

total = 0

product(int array[]) {

    if (array.length == 1) {
        return array[0]
    } else {
        product(product right side array  * product left side )
    }
}

最佳答案

这是 O(N log N) 因为每个值被复制的次数是 O(log N)。

想象一下,您有多个级别。在第一级有 N 个项目在一个数组中,在第二级有 N/2 个项目在 2 个数组中,在第三级有 N/4 个项目在 4 个数组中等等,直到你在 N 个数组中有 1 个项目。这需要 log2(n) 级别从上到下。每个值都被复制了 log2(N) 次,这意味着时间复杂度是 O(log(N) * N),因为日志的基数并不重要。

你可能会说其他操作如 *new Array更昂贵,但是这些都是 O(N) 并且随着 N 的增长,只有更高的阶才重要。

关于arrays - 为什么这是 O(nlogn),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25755281/

相关文章:

javascript - 如何将其转换为影响所有值的全局 JavaScript 函数

javascript - 动态添加数组元素到 JSON 对象

arrays - VB6中如何判断数组是否已初始化?

algorithm - 我们真的需要 Dijkstra 算法中顶点的 "visited or not"信息吗?

arrays - 什么时候值得对数组进行排序?

big-o - O(N) 执行时间

arrays - ")syntax error: invalid arithmetic operator (error token is "用数组循环时

data-structures - Trie vs 红黑树 : which is better in space and time?

algorithm - 用递归函数返回

algorithm - T(n-1) 的时间复杂度