我一直被困在這個問題上。有人可以幫我解決這個問題嗎?排序不同的行
我們給出了長度爲l1,l2,...,ln的n個排序後的行。線條全部按高度排序。我們希望將所有行合併到一個排序行中。我們可以一次合併兩條線,這需要花費兩條線的人數成比例的時間。
設計一種算法,我們可以選擇最佳順序來合併所有行,儘可能少的時間。
我一直被困在這個問題上。有人可以幫我解決這個問題嗎?排序不同的行
我們給出了長度爲l1,l2,...,ln的n個排序後的行。線條全部按高度排序。我們希望將所有行合併到一個排序行中。我們可以一次合併兩條線,這需要花費兩條線的人數成比例的時間。
設計一種算法,我們可以選擇最佳順序來合併所有行,儘可能少的時間。
考慮貪心算法:
while line number > 1:
take the shortest two lines li, lj
merge them
這是最佳的解決方案?您將看到以下事實屬實:
您可以使用最小優先級隊列實現此算法。
initialize min-priority queue q
insert all line lengths in q
ans = 0
while q > 1:
a = q.pop()
b = q.pop()
ans += a+b
q.push(a+b)
return ans
的MST是如何與這個這不是明擺着給我。你能詳細說明一下嗎? –
你是否每次迭代只合並'l1'和'l2',或者你可以選擇任何一對?合併後他們可以重新排列行嗎? – svs
@AsadSaeeduddin我在想我們可以用線條作爲頂點,並將兩行中的人數合併爲這兩個頂點之間的距離。 – CsIsFun