貪心演算法也挺好 Greedy is Good

2021-06-20 06:51:50 字數 882 閱讀 3061

英文原文:

john smith遇到麻煩了。他是topcoder的成員,一次他學會掌握了動態規劃的「威力」並開始解決乙個又乙個問題。但是今天他忠誠的電腦表現的非常不友好。同往常的早晨一樣,john10點起來,喝了杯咖啡,早飯之前便開始解決問題。事情似乎從一開始就有點不對勁,但是基於他豐富的經驗,他瞬間寫了乙個演算法。厭倦了每天早晨一次又一次的分配矩陣,電腦抱怨到:"分段錯誤"。儘管空著肚子,john還是想出乙個聰明的主意,增加乙個for迴圈來處理他所喜愛的矩陣,但是電腦哭訴到:"時間超時"。

john沒有發狂,相反卻做了乙個全新的決定。程式設計已經夠多了,他決定休個假作為自已努力工作的獎勵。

john體力充沛,他想要充分利用生命中的每一分鐘。但不幸的是,有那麼多事情要做,他不能把時間全部用來享受。因此,一吃過早飯他就設計了乙個"娛樂計畫",計畫中描述了他將要進行活動的時間表:

他現在希望能夠充分利用他所會的。如此精細的計畫需要足夠多的精力,但是他的心思早就跑到休假上去了。這就是john smith的問題,他需要我們的幫助。

我們能幫助他渡過乙個愉快的假期嗎?也許可以!但是首先我們來做個假設。因為john是乙個一細不苟的程式設計師,一但他認定了某事就會一直按計畫進行下去。因此,每乙個單獨的活動可能被選擇也可能不被選擇。因為兩個選擇都依賴於第乙個活動,我們可以依據第二個活動做另外兩個選擇。簡單分析的,我們會有2^n種選擇,在我們的安全中結果是1024。然後我們可以檢查每乙個單獨的活動是否是在時間允許的範圍內。在這些可選集中,找到乙個包括最大活動的結果是很容易的。因為有很多可選項,john需要尋求電腦的幫助。但是如果有50個活動會是什麼情況呢?即使是世界是最快的計算機來處理這個問題也要用數年的時間。因此這個方案明顯是不可行的。

經典貪心演算法 貪心演算法概述

貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...

演算法 貪心演算法

把乙個複雜問題分解為一系列較為簡單的區域性最優選擇,每乙個選擇都是對當前解的乙個擴充套件,知道獲得問題的完整解。在解決問題的策略上目光短淺,只根據當前已有的資訊做出選擇,而且一旦做出了選擇,不管將來有什麼結果這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域...

演算法 貪心演算法

集合覆蓋問題 旅行商問題等都屬於np完全問題,在數學領域上並沒有快速得到最優解的方案,非常適合用貪婪演算法。判斷方法 1.元素較少時,一般執行速度很快,但隨著元素數量增多,速度會變得非常慢 2.涉及到需要計算比較 所有的組合 情況的通常是np完全問題 3.無法分割成小問題,必須考慮各種可能的情況。這...