这是O(N)符号需要常量的情况吗?

时间:2014-09-18 18:55:26

标签: java algorithm arraylist linked-list big-o

在这个link 中,作者说,get(index)在Java ArrayList中是O(1),而在LinkedList中是O(n / 2),因为它需要遍历到该条目。 ArrayList中的get操作占用恒定时间是有意义的,因为ArrayList可以访问所有索引。但是,我没有理解LinkedList的O(n / 2)。我被教导的方式是,当你使用大写符号时,你应该在没有常量的情况下编写它,以便更容易向其他人解释;也就是说,O(n)而不是O(2n)。不是O(n)也是最坏情况运行时间的界限吗?这样,使用O(n)对我来说更有意义,因为你要搜索的元素可能就在最后。有谁知道为什么作者包括n / 2?

1 个答案:

答案 0 :(得分:1)

你是对的,O(n / 2)与O(n)完全相同。博客文章作者可能试图传达一些关于LinkedList平均需要如何遍历n / 2元素以获得任何特定(随机选择)索引的信息。但这是对大写符号的滥用。

为了对作者公平,他或她似乎完全清楚O(n)= O(n / 2):

  

为了从特定索引中删除元素... ArrayList执行复制操作,使其接近O(n),而LinkedList需要遍历使其成为O(n / 2)

通过使用"也",海报似乎正在承认这一点。