V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lxmfly123
V2EX  ›  问与答

关于《算法》(第 4 版)中对算法性能的均摊分析的疑问

  •  
  •   lxmfly123 · 2016-07-13 15:24:58 +08:00 · 2092 次点击
    这是一个创建于 2859 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1.4.8.5 中所述:(对于算法 1.1 ,即动态调整数组大小的下压栈)假设 N 是 2 的幂。如果数据结构初始为空, N 次连续的 push() 调用需要访问数组元素 N + 4 +8 + 16 + ... + 2N = 5N - 4 次。而程序计数的结果却如下:

    N: 1 counter: 1

    N: 2 counter: 2

    N: 4 counter: 10

    N: 8 counter: 26

    N: 16 counter: 58

    N: 32 counter: 122

    N: 64 counter: 250

    N: 128 counter: 506

    N: 256 counter: 1018

    算法 1.1 链接 http://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/ResizingArrayStack.java.html

    请指点。

    第 1 条附言  ·  2016-07-13 16:03:34 +08:00

    已解决!

    新建长度为 n 的数组,也是对数组元素访问了 n 次,少数了。

    yemenchun1
        1
    yemenchun1  
       2016-07-13 16:34:33 +08:00
    ![教授上课的截图]( )

    教授为啥算的~3n?

    我算的为什么是 5n-2 = n(n 个新元素) + 2n-1(翻倍时复制旧数组) + 2n-1(翻倍时找新数组的位置)呀?

    什么样算访问一次数组?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1249 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:11 · PVG 02:11 · LAX 11:11 · JFK 14:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.