【问题标题】:Time complexity for Insertion and deletion of elements from an ordered list从有序列表中插入和删除元素的时间复杂度
【发布时间】:2012-04-19 06:01:30
【问题描述】:

这两个操作的时间复杂度是否等于 O(log n)? 记住:列表是有序的,总是有序的,而不是双重链接的。

【问题讨论】:

    标签: algorithm data-structures complexity-theory


    【解决方案1】:

    有序链表中的插入和删除都是O(n) - 因为您首先需要找到要删除/添加的内容 [在删除中找到相关的节点,并在插入 - 找到它的正确位置] - 这是O(n) - 即使列表是有序的,因为你需要在从头部迭代时到达这个地方。

    一种允许快速插入、删除和查找的高效特殊类型列表称为skip list,它使用更多节点在非相邻节点之间快速迭代

    【讨论】:

    • 哇。 O(log n) 的查找时间意味着每次删除和插入操作都是在 O(log n)+O(n) 中进行的。对吗?
    • @Mariano:我不明白这个问题。链表上的所有搜索/插入/删除操作都是O(n),这是您要问的吗?
    • 不,不,这很清楚。我要求确认跳过列表的插入/删除时间。
    • 哦,跳过列表允许 O(logn) 插入、删除和搜索!
    • 正如我在 William Pugh 关于跳过列表的论文中所读到的那样:“二叉树可用于表示字典等抽象数据。当元素以随机顺序插入时,它们工作得很好。”在这一点上,我需要一个插入 always 的结构,即列表中的单个元素,而且我永远无法预测有关该元素的某些内容,因此插入实际上是随机的。在这种情况下,我可以在跳过列表的位置使用二叉树吗?
    猜你喜欢
    • 2014-05-01
    • 2011-09-03
    • 2020-01-28
    • 1970-01-01
    • 2022-01-22
    • 2018-10-29
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多