演算法導論貪心演算法活動安排的例子覺得有問題,看下哪裡問題?

最早結束的那個活動,總是最優解的一部分,這個是整個演算法的支撐,但感覺這個是錯的,舉個反例:

在書邊上隨手畫的圖,a1 a2 a3如圖,如果按照上面的理論,最優解就是選擇最早結束的,也就是a1,然後加上a3之後的最優解。但看圖很明顯選擇a2其實更好。

然後書里給了證明,本想著看看證明哪裡錯了,但他媽的怎麼跳躍的:

從劃線部分開始,列出了一系列條件,但怎麼就得出|Ak"|=|Ak|的,結合上面的例子,問題就出在這裡,aj對應著例子里的a2,am對應著a1,把最優解集合里的aj替換成am,就是a2替換成a1,結果就是解的長度變小了,從而不是最優解了。怎麼得出了|Ak"|=|Ak|?

我是哪裡看漏了嗎?


謝邀。

感覺就一句話的事吧:

請好好看一下237頁的那個題目描述。。。作者的最大活動兼容子集的最大指的是:活動的個數,並不是活動長短的總和。。。一個很簡單的例子啦。

如果你非要認為是活動的長短的總和的話,嗯,怎麼說呢,建議用動態規劃吧。


這裡是希望得到儘可能多的活動數量,而不是長度,長度應該用動態規劃


推薦閱讀:

鏈表中的哨兵是怎麼一個作用?
高一學生如何學習演算法?編程?
演算法分析從入門到深入,求書籍推薦?
如何不用循環和條件語句列印1到N(假設N為4,排列數就為256)的全排列?
演算法漸進複雜度,怎麼證明logn!= θ(nlogn)?

TAG:演算法 | 計算機 | 演算法導論書籍 | 演算法設計 | 演算法與數據結構 |