簡體   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