【问题标题】:Complexity of ConcurrentSkipListSet to access the first and the last elementsConcurrentSkipListSet 访问第一个和最后一个元素的复杂性
【发布时间】:2015-04-20 23:58:52
【问题描述】:

据我了解,ConcurrentSkipListSet 插入、搜索和删除元素的平均复杂度为 O(log n),最坏情况为 O(n)。如何访问第一个和最后一个元素?它是否低于对数?我看到它保留了一个指向头部的指针。因此,我猜测第一个元素是 O(1)。

【问题讨论】:

  • 从我的测试来看,last() 似乎比 first() 快得多。并且 size() 比 first() 花费更长的时间

标签: java time-complexity skip-lists


【解决方案1】:

是的,关于头部,你是对的。 => O(1)

但是,当访问最后一个时,您不知道它是哪一个,因为它毕竟是一个链表。现在因为它是一个跳过列表,所以你会得到O(log n),而不是在线性时间内处理所有元素。在这里您可以查找 nil next 指针,但由于您不知道要检查哪个指针,它仍在O(log n) 中。

实际测量的时间和渐近近似之间存在差异!

这是一个可能的描述:

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2016-02-22
    • 2012-06-11
    • 1970-01-01
    • 2021-03-14
    • 2015-08-31
    • 2012-11-21
    相关资源
    最近更新 更多