貪心演算法之活動選擇問題 求解現實問題的思路

2021-09-08 10:55:50 字數 1686 閱讀 5092

參考《演算法導論第二版p222頁)

一,如何把現實的問題轉變成數學問題?即數學建模的思路?

1,問題描述:現有一組相互競爭的活動,如何排程能夠找出一組最大的活動(活動數目最多)使得它們相互相容?

2,問題轉化:

首先,按活動的結束時間單調遞增進行排序。那麼,為什麼要按結束時間排序呢?這個問題留到後面解釋。

其次,定義合適的問題子空間,即定義集合s(i,j)。問題子空間描述的是現實生活中的問題,而集合s(i,j)則是數學概念,通過某種方式定義乙個合適的集合將問題子空間的解轉化為集合的解(即求出集合中符合某種條件的所有元素)。

3,那麼問題來了,怎樣才能讓定義的這個集合問題能夠描述現實問題呢?----

a,將s(i,j)中元素表示成與活動a(i)、a(j)相容的活動

b,將活動a(1)、a(2)……a(i)、a(i+1)、……a(j)、a(j+1)……a(n) 按照結束時間單調遞增排序!每個集合元素有乙個特徵:有開始時間和結束時間。

這就是為什麼要按結束時間單調遞增排序的原因,因為只有這樣,才能夠成功的建模,將現實問題轉化成數學問題。

當定義的集合中的元素(活動)滿足了這兩個因素之後,就可以將子問題空間(從a(1)、a(2)……a(i)、a(i+1)、……a(j)、a(j+1)……a(n)活動中選出最大相容活動集合)

轉化成數學上的集合問題(求解集合s(i,j)的元素中滿足開始時間和結束時間不相互衝突的最多的元素個數)

4,如何證明子問題s(i,j)的解是最優的?

剪貼技術 即 反證法。建模出來的集合的性質,它可以將s(i,j)的最優解分成s(i,k)s(k,j)的最優解!

5,如何根據子問題的解構造出原問題的解?

構造虛構的活動 a(0)和a(n+1)。那麼,s(0,n+1)就表示原問題的解!

6,寫出問題的解的數學表示式

數學表示式見 《演算法導論第二版》p244 上。

二,活動選擇的貪心策略及證明此貪心策略的正確性

1,貪心策略:先將活動按結束時間單調遞增進行排序,並且優先選擇結束時間最早的活動。具體操作如下:

a,設已排好序的各個活動構成的集合為s(0,n+1),最大相容活動集合為a,a初始為空

b,在s(0,n+1)中選擇結束時間第一早(最早)的活動,記為a1,a = a u

d,重複上一步直到沒有活動可以選擇,此時得到的a為最大相容活動集合

2,證明此貪心策略的正確性

a,s(i,j)表示成與活動a(i)、a(j)相容的活動,求s(0,n+1)的最大相容活動集合,即為求原實際問題的解。

b,《演算法導論》中定理16.1 (1)證明了活動a(m)是s(i,j)的某個最大相容活動集合的乙個元素,而元素 a(m) 正是根據上述貪心策略選擇出來的。這說明,按照上述貪心策略的選擇,可以選出最大相容活動集合中的元素。

c,再由定理16.1(2),當選擇了a(m)後,求解s(i,j)的最大相容活動集合變成求解s(m,j)的最大相容活動集合,它將問題空間縮小了。而根據 b,求s(m,j)的最大相容活動集合就是從s(m,j)中選擇最早結束的活動!

d,因此,由 b , c 可知:根據上述貪心策略能成功地選取出s(i,j)的乙個最大相容活動集合。

《演算法導論》介紹了很多演算法分析的方法:從某個現實生活中的問題入手,然後將之一步步地轉化成數學問題,再運用一些分析技術(動態規劃、貪心、隨機化、概率分析、分治……)將之表示成偽**,最後就可以用程式語言將這些偽**實現!

貪心演算法之活動選擇問題

因為有的問題,用動態規劃解決起來,比較耗費效能,而用貪心演算法,雖然不能得到最優解,但也能得到次優解,與動態規劃比起來更加簡單節約效能。using system using system.collections.generic using system.linq using system.text ...

貪心演算法 活動選擇問題

活動選擇問題 就是給定一組活動的開始時間和結束時間,然後他們都需要使用到乙個資源,這個資源每次只有乙個活動可以用,要求求出乙個最大的相互相容的活動子集。首先定義了乙個集合sij 其中s就是所有活動的集合,fi是活動ai的完成時間si是活動ai的開始時間。這道題如果是用dp來解的話,就需要找到最優解的...

貪心演算法 活動選擇問題

前言 貪心演算法也是用來解決最優化問題,將乙個問題分成子問題,在現在子問題最優解的時,選擇當前看起來是最優的解,期望通過所做的區域性最優選擇來產生乙個全域性最優解。書中先從活動選擇問題來引入貪心演算法,分別採用動態規劃方法和貪心演算法進行分析。本篇筆記給出活動選擇問題的詳細分析過程,並給出詳細的實現...