【发布时间】:2014-03-02 06:38:08
【问题描述】:
我遇到了这个问题,我需要有效地删除列表/数组中的最小元素。这将是相当微不足道的解决 - 一个堆就足够了。
但是,现在的问题是,当我删除最小的元素时,会导致数据结构中其他元素的变化,这可能会导致顺序发生变化。一个例子是这样的:
我有一个元素数组:
[1,3,5,7,9,11,12,15,20,33]
当我从数组中删除“1”时,“5”和“12”分别变为“4”和“17”。
[3,4,7,9,11,17,15,20,33]
因此不维护排序。
然而,被移除的元素会有指向所有将被改变的元素的指针,但不知道有多少元素会被改变,改变多少。
所以我的问题是:
在从数据结构中删除最小元素同时保持排序时,存储这些元素以最大化性能的最佳方法是什么?还是我应该不对其进行排序?
我目前的实现只是将它们未排序的存储在一个向量中,因此时间复杂度为 O(N^2),O(N) 用于查找最小元素,以及 N 次删除。
【问题讨论】:
-
有什么方法可以知道哪些元素会被改变或改变多少或改变多少?
-
不知道有多少元素或它们将被更改多少,但第一个元素将具有指向那些将被更改的元素的指针。会把它放在问题中
-
看来你需要的是带有“更改优先级”操作的堆
-
@Quorrin:我不明白你对 Vaughn 堆的建议的反对意见——你显然已经在第一个元素中存储了指向依赖节点的指针,所以你不是已经有同样的问题了吗? (也就是说,无论您使用什么数据结构,这都不是问题吗?)指向堆位置的指针肯定会过时,但指向数组位置的指针也可能会过时。
标签: performance algorithm sorting sortedcollection