繁体   English   中英

在更改随机元素的同时保持排序

[英]Maintaining sort while changing random elements

我遇到了这个问题,我需要有效地删除列表/数组中的最小元素。 那将是相当微不足道的解决-堆就足够了。

但是,现在的问题是,当我删除最小的元素时,它将导致数据结构中其他元素的更改,这可能导致顺序更改。 一个例子是这样的:

我有一系列元素:

[1,3,5,7,9,11,12,15,20,33]

当我从数组“ 5”和“ 12”中删除“ 1”时,分别更改为“ 4”和“ 17”。

[3,4,7,9,11,17,15,20,33]

因此,不维持订购。

但是,被删除的元素将具有指向将要更改的所有元素的指针,但是尚不知道将更改多少元素以及更改多少。

所以我的问题是:

当从数据结构中删除最小的元素并保持排序时,存储这些元素以最大化性能的最佳方法是什么? 还是我应该不做任何排序?

我当前的实现方式是将它们不排序地存储在向量中,因此时间复杂度为O(N ^ 2),O(N)(用于查找最小元素)和N个移除。

一种。

如果您拥有有序列表L中所有已更改元素的列表M,

  • 经历M,并且针对每个元素

  • 如果仍然与M的邻居一起订购,那就活着吧。

  • 如果与邻居不符,则将其从M中排除。

  • 这样的排除元素将创建一个列表N

  • N号

  • 使用某种算法来合并有序列表。 http://en.wikipedia.org/wiki/Merge_algorithm

B.

如果您确定新元素很少并且没有强烈更改,只需使用冒泡排序即可。

我仍然会去堆,并得到数组的支持

如果每次弹出后只有几个元素发生更改,请执行弹出操作后,对任何值减小的项目执行上/下堆放大。 它仍将是O(nlog k)值的顺序,其中k是数组的大小,n是已减小大小的元素的数量。

如果很多项目的大小发生变化,则可以将其视为未排序的数组,而仅从该数组创建堆的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM