あなたの提案された問題はまだ貪欲な方法で解決することができます。元のインターバルスケジューリングの問題を知っているので、質問文で述べた内容に基づいて解決策を作成します。
手順1:開始時刻に基づいて間隔をソートします。
ステップ2: 2タプルヒープを使用してデータ構造を維持する「スポーン」プールを維持します。
のは、我々はNが... I[N-1]
を間隔I[0]
をソート持っていると仮定しましょう、ステップ2で、より正確には、各I
はstart
とstop
属性を持っているので、I[i].start <= I[i+1].start
。 2タプルのヒープがあり、各タプルは(T, M)
を表します。 Tはヒープを離れる時間、または等価的には間隔の停止時間を意味します。 Mは、この間隔が選択された場合の最大電流カバレッジを表す。ヒープの順序はTによって維持されることに注意してください。変数ANS
が維持され、現在の最大カバレッジを維持します。したがって、このアルゴリズムは次のように実行します:ここに
ANS <- 0
HEAP <- [empty]
for each sorted intervals `I[i]`:
while HEAP.empty() == false && HEAP.first_element.T < I[i].start
TMP = HEAP.first_element
HEAP.pop_first_element
if TMP.M > ANS
ANS = TMP.M
HEAP.insert((I[i].stop, ANS + I[i].stop - I[i].start))
ルック:http://stackoverflow.com/questions/24026073/algorithm-to-find-maximum-coverage-of-non-overlapping-sequences-ie-the -weig – pkacprzak
cool。だから、これは、重みが間隔の持続時間に等しい "重み付けされた間隔sched"に相当するはずですか? – DanSoren