【发布时间】:2014-03-15 15:54:35
【问题描述】:
我想知道我关于以下几点的时间复杂度以及推理是否正确。
- 在动态数组末尾的插入是 O(1) 和其他任何地方 O(n)(因为可能需要复制和移动元素)(类似于 std::vector)
- 搜索单个链接列表是 O(n),因为它是线性的。
- 在单个链接列表中的插入和删除可以是 O(1) 或 在)。如果节点的地址可用,则为 O(1) 它的 O(n),因为需要进行线性搜索。
我会很感激对此的反馈
【问题讨论】:
-
1.如果没有足够的空间容纳新元素,则在末尾插入可能是 O(n),并且必须将部分或全部元素复制到新的更大的存储块中。
-
您应该准确定义 n 是什么。是容器的总大小还是所讨论的元素之前/之后的元素?另外:对于单个链表,必须知道前导的地址才能插入/删除,因为那是指针必须更改的地方。 (你总是知道你要插入的节点的地址)
标签: c++ data-structures big-o time-complexity