0

リスト/配列の最小要素を効率的に削除する必要があるこの問題に遭遇しました。それを解決するのはかなり簡単です - ヒープで十分です。

ただし、現在の問題は、最小の要素を削除すると、データ構造内の他の要素が変更され、順序が変更される可能性があることです。例はこれです:

私は要素の配列を持っています:

[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 個の削除です。

4

2 に答える 2

0

A.

順序付きリスト L のすべての変更された要素のリスト M がある場合、

  • M を通過し、すべての要素について

  • それがまだMの隣人で注文されている場合は、そのままにしてください。

  • 近隣との順序が悪い場合は、M から除外します。

  • そのような除外された要素はリスト N を作成します

  • オーダーN

  • 順序付けられたリストをマージするためのアルゴリズムを使用します。http://en.wikipedia.org/wiki/Merge_algorithm

B.

新しい要素がほとんどなく、大幅に変更されていないことが確実な場合は、単純にバブル ソートを使用します。

于 2014-03-03T09:41:54.610 に答える