最大覆蓋問題的大步貪心啟發式演算法

2022-09-23 01:42:11 字數 743 閱讀 6147

**

我這是低創翻譯。

改進的貪心演算法,較優解。

給出 \(n\)​ 個集合,第 \(i\)​ 個集合 \(cnt_i\)​ 個互不相同的元素。要求從其中選取 \(k\)​ 個集合使得其中不同元素個數最多,求這個值。

樣例:

3 個集合:

選 2 個集合,最優方案為:

有 6 個不同元素

已經被證明是個 np-hard 問題。

暴力很簡單就不說了。

每次取當前沒被取過的集合裡還沒出現的元素最多的集合,並把此集合中新出現的集合標記為出現過。

樣例:

3 個集合:

第 1 步:

選擇 ,將 標記為選過

第 2 步:

選擇 最終方案為 ,答案為 5,不是最優解。

可以通過隨機化選集合使得答案可能更大。

選定乙個步數 \(p\),每次列舉 \(p\)​​​ 個集合並計算它們的不同元素個數,選取最大的一組集合並將其元素標記為選過。顯然跟上面那個貪心差不多。

時間複雜度 \(o(\frac)\)​。

原理:犧牲時間換更優解。

可以發現當 \(p=1\)​ 時,就是普通貪心;當 \(p=k\)​ 時,就是暴力。

**將其與其它幾種貪心對比,總體來看在 \(p\) 較小的時候還沒隨機化優。

這玩意兒比較簡單,實用性不高,了解即可。

感覺跟 beam search 差不多。

沒啥技術含量。

貪心 區域覆蓋問題

time limit 1000ms memory limit 65536k 有疑問?點這裡 用i來表示x座標軸上座標為 i 1,i 的長度為1的區間,並給出n 1 m 200 個不同的整數,表示n個這樣的區間。現在要求畫m條線段覆蓋住所有的區間,條件是 每條線段可以任意長,但是要求所畫線段的長度之和...

貪心 區間覆蓋問題

區間覆蓋問題 time limit 1000ms memory limit 65536kb submit statistic discuss problem description 設x1 x2 xn 是實直線上的n 個點。用固定長度的閉區間覆蓋這n 個點,至少需要多少個這樣的固定長度閉區間?對於給...

貪心法 區間覆蓋問題

區間覆蓋問題。數軸上有n個閉區間 a i,bi 選擇盡量少的區間覆蓋一條指定線段 s t 先進行預處理,將不包含 s t 的區間都去掉,然後再按左區間從小到大排序。如果最小區間的左區間大於 s 的話,則無解。選取包含 s的右區間最大的區間,該區間的右區間仍然小於下乙個區間的左區間,則無解。按照這樣的...