37|貪心算法:如何用貪心算法實現(xiàn)Huffman壓縮編碼?

37|貪心算法:如何用貪心算法實現(xiàn)Huffman壓縮編碼?
貪心、分治、回溯象对、動態(tài)規(guī)劃這4個算法思想书妻,原理解釋起來都很簡單,但是要真正掌握且靈活應 用兰伤,并不是件容易的事情
貪心算法有很多經典的應用,比如霍夫曼 編碼(Huffman Coding)、Prim和Kruskal最小生成樹算法戚长、還有Dijkstra單源最短路徑算法。最小 生成樹算法和最短路徑算法我們后面會講到怠苔,所以我們今天講下霍夫曼編碼同廉,看看它是如何利用貪 心算法來實現(xiàn)對數(shù)據(jù)壓縮編碼,有效節(jié)省數(shù)據(jù)存儲空間的嘀略。

如何理解“貪心算法”?

我總結一下貪心算 法解決問題的步驟恤溶,我們一起來看看。 第一步帜羊,當我們看到這類問題的時候咒程,首先要聯(lián)想到貪心算法:針對一組數(shù)據(jù),我們定義了限制值 和期望值讼育,希望從中選出幾個數(shù)據(jù)帐姻,在滿足限制值的情況下,期望值最大奶段。 類比到剛剛的例子饥瓷,限制值就是重量不能超過100kg,期望值就是物品的總價值痹籍。這組數(shù)據(jù)就是5種 豆子呢铆。我們從中選出一部分,滿足重量不超過100kg蹲缠,并且總價值最大棺克。 第二步悠垛,我們嘗試看下這個問題是否可以用貪心算法解決:每次選擇當前情況下,在對限制值同等 貢獻量的情況下娜谊,對期望值貢獻最大的數(shù)據(jù)确买。 類比到剛剛的例子,我們每次都從剩下的豆子里面纱皆,選擇單價最高的湾趾,也就是重量相同的情況下, 對價值貢獻最大的豆子派草。 第三步搀缠,我們舉幾個例子看下貪心算法產生的結果是否是最優(yōu)的。大部分情況下澳眷,舉幾個例子驗證 一下就可以了胡嘿。嚴格地證明貪心算法的正確性,是非常復雜的钳踊,需要涉及比較多的數(shù)學推理衷敌。而 且,從實踐的?度來說拓瞪,大部分能用貪心算法解決的問題缴罗,貪心算法的正確性都是顯而易?的,也 不需要嚴格的數(shù)學推導證明祭埂。
實際上面氓,用貪心算法解決問題的思路,并不總能給出最優(yōu)解蛆橡。

3.區(qū)間覆蓋
假設我們有n個區(qū)間舌界,區(qū)間的起始端點和結束端點分別是[l1, r1],[l2, r2]泰演,[l3, r3]呻拌,......,[ln, rn]睦焕。 我們從這n個區(qū)間中選出一部分區(qū)間藐握,這部分區(qū)間滿足兩兩不相交(端點相交的情況不算相交), 最多能選出多少個區(qū)間呢?


image.png

這個問題的處理思路稍微不是那么好懂垃喊,不過猾普,我建議你最好能弄懂,因為這個處理思想在很多貪心算法問題中都有用到本谜,比如任務調度初家、教師排課等等問題。

這個問題的解決思路是這樣的:我們假設這 n 個區(qū)間中最左端點是 lmin,最右端點是 rmax笤成。這個問題就相當于评架,我們選擇幾個不相交的區(qū)間眷茁,從左到右將 [lmin, rmax] 覆蓋上炕泳。我們按照起始端點從小到大的順序對這 n 個區(qū)間排序。

我們每次選擇的時候上祈,左端點跟前面的已經覆蓋的區(qū)間不重合的培遵,右端點又盡量小的,這樣可以讓剩下的未覆蓋區(qū)間盡可能的大登刺,就可以放置更多的區(qū)間籽腕。這實際上就是一種貪心的選擇方法。


image.png

貪心算法:N位數(shù)刪除K個數(shù)字纸俭,使剩下的數(shù)字串最小

題目:一個n位的數(shù)皇耗,去掉其中的k位,問怎樣去掉使得留下來的那個(n-k)位的數(shù)最凶岷堋郎楼?
分析:(刪數(shù)問題,可用貪心算法求解)窒悔,方法就是從簡單入手呜袁,慢慢復雜。從n=1開始推導就會發(fā)現(xiàn)規(guī)律简珠,
現(xiàn)在假設有一個數(shù)阶界,124682385,
假如k = 1聋庵,則結果為12462385,k = 2膘融,結果為1242385……
可以知道:最優(yōu)解是刪除出現(xiàn)的第一個左邊>右邊的數(shù),因為刪除之后高位減小祭玉,很容易想...那全局最優(yōu)解也就是這個了氧映,因為刪除S個數(shù)字就相當于執(zhí)行了S次刪除一個數(shù),因為留下的數(shù)總是當前最優(yōu)解...

def solution(num, k):
    s = str(num)
    flag = True
    while k:
        for i in range(len(s)-1):
            #每次刪除第一個比下一個數(shù)字大的數(shù)
            if s[i] > s[i+1]:
                s = s.replace(s[i],'',1)
                flag = False
                break
 
        #如果所有數(shù)字遞增攘宙,則刪除最后幾個數(shù)字直接返回
        if flag:
            s = s[:len(s)-k]
        k -= 1
    return int(s)
  1. 假設有 n 個人等待被服務屯耸,但是服務窗口只有一個,每個人需要被服務的時間長度是不同的蹭劈,如何安排被服務的先后順序疗绣,才能讓這 n 個人總的等待時間最短?
    一直時間最短的先服務(堆)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末铺韧,一起剝皮案震驚了整個濱河市多矮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖塔逃,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讯壶,死亡現(xiàn)場離奇詭異,居然都是意外死亡湾盗,警方通過查閱死者的電腦和手機伏蚊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來格粪,“玉大人躏吊,你說我怎么就攤上這事≌饰” “怎么了比伏?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疆导。 經常有香客問我赁项,道長,這世上最難降的妖魔是什么澈段? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任悠菜,我火速辦了婚禮,結果婚禮上均蜜,老公的妹妹穿的比我還像新娘李剖。我一直安慰自己,他們只是感情好囤耳,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布篙顺。 她就那樣靜靜地躺著,像睡著了一般充择。 火紅的嫁衣襯著肌膚如雪德玫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天椎麦,我揣著相機與錄音宰僧,去河邊找鬼。 笑死观挎,一個胖子當著我的面吹牛琴儿,可吹牛的內容都是我干的。 我是一名探鬼主播嘁捷,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼造成,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雄嚣?” 一聲冷哼從身側響起晒屎,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤喘蟆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鼓鲁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕴轨,經...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年骇吭,在試婚紗的時候發(fā)現(xiàn)自己被綠了橙弱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡绵跷,死狀恐怖膘螟,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情碾局,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布奴艾,位于F島的核電站净当,受9級特大地震影響,放射性物質發(fā)生泄漏蕴潦。R本人自食惡果不足惜像啼,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潭苞。 院中可真熱鬧忽冻,春花似錦、人聲如沸此疹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝗碎。三九已至湖笨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹦骑,已是汗流浹背慈省。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眠菇,地道東北人边败。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像捎废,于是被迫代替她去往敵國和親笑窜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355