【问题标题】:Big Oh notation for this specific cost function此特定成本函数的 Big Oh 符号
【发布时间】:2014-03-28 08:59:31
【问题描述】:

问题:如果需要更多空间,堆栈(实现一个数组)的成本会加倍它的数组大小,什么是大哦符号。它会动态调整大小,但不会更小。

例如:

N = [size]
1 = [x]
2 = [x,x]
3 = [x,x,x,x]
4 = [x,x,x,x]
5 = [x,x,x,x,x,x,x,x]
6 = [x,x,x,x,x,x,x,x]
7 = [x,x,x,x,x,x,x,x]
8 = [x,x,x,x,x,x,x,x]
9 = [x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x]
10 =[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x]

我是这样理解的:

T(N) = Summation from i = 0, to log_2(N) of (2^i)

相当于(2^(log_2(n))) + 1

我解释为O(2^N),因为lim as n -> infinity of log_2(n) = infinity

所以本质上......这是什么大哦:(2^(log_2(n))) + 1

【问题讨论】:

标签: java arrays dynamic stack dynamic-resizing


【解决方案1】:

我很难弄清楚您对代码的分析。相反,您可以通过以下分析说服自己运行时间确实是 O(N):

为了存储 N 个元素,您将在第 2、4、8、16、32、64、.....2^x 元素之后调整数组的大小,其中 2^x = N。

因此,x = log_2 N

每次调整大小操作都会产生等于数组大小的成本。因此,总的调整大小开销可以表示为:

cost = 2^0 + 2^1 + 2^2 + 2^3 ......2^x
     = (2^x-1)/(2-1)    
     = 2^x - 1 
     = 2^(log_2 N) - 1 
     = N^(log_2 2)-1 
     = N-1 
     = O(N)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多