【发布时间】:2016-10-10 17:38:18
【问题描述】:
我有一个排序的整数数组(大小为 n),并且想在数组中插入一个新元素,是否可以在 O(log(n)) 中这样做?我需要保持插入并找到 O(log(n))) 的计算复杂度。
现在我唯一的想法是进行二进制搜索以找到所需的插入索引 - 这需要 O(log(n)),但是我必须创建一个新数组并复制整个需要 O(n) 的单元格。
编辑:
它是通过使用AVL Tree 来解决的,这样添加的任何新元素都需要 O(log(n)) 并找到一个元素需要 O(log(n))
【问题讨论】:
-
请提供更多详细信息。我们不是魔术师,可以看到你在做什么,就像我们想成为其中的一员一样。
-
是的,你有最好的算法,但移动所有元素将是 O(n)。这是你能做到的最好的。
-
如果是数组,即一个连续的内存区域,并且元素是排序的整数,然后根据定义在数组的开头插入一个元素需要推送所有其他元素。话虽如此,如果您只需要一个“数组接口”,那么其他数据结构将为您提供所需的东西。例如 C++ std::vector 插入了 lof(n)。