代码之家  ›  专栏  ›  技术社区  ›  Knio

的运行时间是什么`节点.insertBefore`?

  •  1
  • Knio  · 技术社区  · 16 年前

    最简单的实现似乎是 O(n) 孩子的数量 Node

    Linux上的FireFox 3.6.10

    inserted 1000 elements into   1000 elements in  131.44 ms (average over 101 trials,  291.31 ms inc appendChild) while in dom: true
    inserted 1000 elements into  10000 elements in  235.91 ms (average over  11 trials, 1311.36 ms inc appendChild) while in dom: true
    inserted 1000 elements into 100000 elements in 2349.00 ms (average over  2 trials, 14150.50 ms inc appendChild) while in dom: true
    
    inserted 1000 elements into   1000 elements in  13.13 ms (average over 101 trials,   267.00 ms inc appendChild) while in dom: false
    inserted 1000 elements into  10000 elements in  67.45 ms (average over  11 trials,  1517.09 ms inc appendChild) while in dom: false
    inserted 1000 elements into 100000 elements in 617.00 ms (average over   2 trials, 15214.50 ms inc appendChild) while in dom: false
    

    Linux上的Chrome 7:

    inserted  1000 elements into    1000 elements in      0.65 ms (average over   101 trials,     30.34 ms inc appendChild) while in dom: true
    inserted  1000 elements into   10000 elements in      1.55 ms (average over    11 trials,    175.09 ms inc appendChild) while in dom: true
    inserted  1000 elements into  100000 elements in     12.00 ms (average over     2 trials,   2255.00 ms inc appendChild) while in dom: true
    inserted  1000 elements into    1000 elements in      0.49 ms (average over   101 trials,     41.13 ms inc appendChild) while in dom: false
    inserted  1000 elements into   10000 elements in      1.36 ms (average over    11 trials,    301.18 ms inc appendChild) while in dom: false
    inserted  1000 elements into  100000 elements in     12.00 ms (average over     2 trials,   2565.50 ms inc appendChild) while in dom: false
    

    我创建了一个dom节点,用 N insertBefore(newchild, randominitialchild) M 次。

    in dom: false

    结果似乎表明插入是正确的 O(n)

    3 回复  |  直到 16 年前
        1
  •  1
  •   Delan Azabani    16 年前
    a.insertBefore(b)
    

    b 这需要O(n)个时间,因为没有向后的指针,只有下一个节点指针。然后,我们在之前更改节点的下一个指针 b类 到 a .

        2
  •  0
  •   casablanca    16 年前

    insertBefore

        3
  •  0
  •   Guffa    16 年前

    实际将节点添加到树中所需的时间将是最少的。需要时间的是更新和重新计算布局。