哈夫曼樹
一般的,a弦赖、b项栏、c、d蹬竖、e沼沈、f、g七個(gè)字符在一份數(shù)據(jù)中出現(xiàn)的次數(shù)為1币厕、2列另、3、4旦装、5页衙、6、7阴绢。
step1:將7個(gè)字符中店乐,出現(xiàn)此次最少的字符a和b取出,構(gòu)造一根子樹x呻袭,它們的次數(shù)分別成為左右節(jié)點(diǎn)眨八,它們的次數(shù)和組成根節(jié)點(diǎn)。
step2:將step1的到樹放入原數(shù)據(jù)中(x左电,c廉侧,d,e券腔,f伏穆,g),將此時(shí)數(shù)據(jù)中出現(xiàn)次數(shù)最少的兩個(gè)取出(x和c)纷纫,構(gòu)造一根新的子樹y枕扫,它們的次數(shù)分別成為左右節(jié)點(diǎn),它們的次數(shù)和組成根節(jié)點(diǎn)辱魁。
...
重復(fù)step2烟瞧,直到只剩下一個(gè)根節(jié)點(diǎn)的樹诗鸭,即為哈夫曼樹。
哈夫曼編碼
將哈夫曼樹所有子樹的左子樹路徑標(biāo)0.参滴,右子樹路徑標(biāo)1强岸,依次求出各個(gè)字符的編碼。
裝箱問題的求解
離散數(shù)學(xué)的最優(yōu)組合砾赔,一般通過動(dòng)態(tài)規(guī)劃實(shí)現(xiàn)蝌箍。
無法求得最優(yōu)解,一般是近似解(貪心(婪)算法)暴心。
例如沙袋問題:如何用盡可能少的箱子裝下大小不一的沙袋妓盲。
將沙袋排序,最大沙袋先入专普,然后從隊(duì)列尾部取最小的沙袋入悯衬,如果箱子未裝滿繼續(xù)隊(duì)尾,否則下一個(gè)隊(duì)首和隊(duì)尾檀夹。