面試官:給我手寫一個哈夫曼編碼(java語言實現)

2021-01-08 愚公要移山1

哈弗曼樹往往都會根據哈夫曼編碼結合著來說,因此這篇文章,主要結合著面試問題來說明。

一、基本概念

哈夫曼樹的目的是找出存放一串字符所需的最少的二進位編碼, 原理是通過統計出每種字符出現的頻率!不斷地對其合併。

舉個例子:有一串字符,現在把這些字符進行統計,頻率表 A:60, B:45, C:13 D:69 E:14 F:5 G:3。現在要對這些字符進行編碼,但是前提是使用最少的二進位編碼。這時候怎麼辦呢?這就用到了我們的哈弗曼樹。

我們需要構造一個哈弗曼樹,構造赫夫曼樹的算法是一個貪心算法,貪心的地方在於:總是選取當前頻率(權值)最低的兩個節點來進行合併,構造新節點。

現在我們就來構造一棵哈弗曼樹。

二、構造哈弗曼樹

剛剛我們已經說了,構造哈夫曼樹是每次選取當前頻率最低的兩個節點來進行合併就好了。

1、原始序列

2、選取最小的F和G節點合併

3、選取目前最小的C節點與8合併

4、繼續重複以上步驟進行合併

到此為止,我們的哈弗曼樹就已經構造出來了。接下來我們添加01規則,進行哈夫曼編碼。

三、哈夫曼編碼

哈夫曼編碼的規則是,左邊添加0,右邊添加1。看下圖就明白了。

OK,也就是在每一條邊上添加了01。此時我們來看每一個字符的編碼。

A:10 B:01 C:0011 D:11 E:000 F:00101 G:00100

四、java實現哈夫曼編碼

我們直接給出一個整體的哈夫曼編碼的java實現。

第一步:定義一個節點

第二步:實現哈夫曼編碼

相關焦點

  • 面試官不講碼德,欺負我一個年輕的開發工程師
    面試官不講碼德,欺負我一個年輕的開發工程師,問如果是你怎麼設計RPC?getService(Class<T> tClass);}這是我個人寫的一個實現類,給位大牛可以嘗試實現這裡是採用動態代理。
  • 跟我學java編程—認識java語言的字符類型
    Java語言提供了一種char數據類型,可以滿足存儲單個字符的需要。Java語言中,char佔2個字節的存儲空間,即可以存儲英文字符,也可以存儲單個漢字,一個漢字編碼也佔2個字節的存儲空間。char變量可按如下方式聲明:char code='a';任意單個字符,加單引號。
  • Java面試高頻考點:反射機制使用大全
    作為一個Java開發工程師,在面試的過程中,反射機制也是經常會被問到的一個問題。例如Spring的IOC實現機制,其底層都是依賴於java的反射機制,因此,這是一個非常重要的知識點。對於初學java的同學來說,掌握其使用方法很有必要。
  • 我跟面試官扯了...
    Java的JDK中就自帶了Comparable接口,那麼來看下這個,如何與面試官對答如流。拋下 Arrays.sort() 中排序的算法,一起來揭開這層面紗吧。1、猜一猜猜測以下代碼的執行結果是什麼?你會很快猜到一下內容:q a c 134850你可真是一個小能能,厲害的不要不要的。但是,如果面試官問你:為什麼 int 數組, String 數組等等,這些可以使用 Arrays.sort() 進行排序呢?咱們慢慢揭曉這個答案。
  • 程式設計師面試通關的 101 道真題
    我們都知道編程面試系統並不完美,許多人都在嘗試改變,但在改變之前,你必須遵循規則才能進入系統。我們就把這個問題留給經驗豐富的開發人員來解決吧,作為初級開發人員,你的重點應該是順利通過編程面試,並拿下心儀的工作。很多人都問我編程面試的問題以及如何順利通過編程面試,這就是我寫本文的初衷,希望本文能夠為程式設計師以及他們的職業生涯帶來直接或間接性的幫助。
  • JAVA專業術語面試100問
    前言:面試技巧另外開篇再說,先上面試乾貨吧。Redis、消息隊列、SQL不要走開,關注後更精彩!1、面向對象的特點有哪些?21、java中垃圾收集的方法有哪些?22、如何判斷一個對象是否存活?(或者GC對象的判定方法)?23、Java GC是在什麼時候,對什麼東西,做了什麼事情?24、什麼是類加載器雙親委派模型機制?
  • 上來就是「請自我介紹」,遇到這樣的面試官我就沒什麼興趣了
    當你與面試官面對面坐下的時候,是否遇到過某些面試官上來第一句話就是「先做一個自我介紹吧」?職場新人遇到這樣的提問肯定會非常緊張,以至於不知道怎麼開始介紹自己,而對於職場老油條來說,同樣也會一時不知所措。如果我遇到提這種問題的面試官,我心裡第一印象就是對這個面試官沒什麼興趣了。
  • 掌握六要素,寫出漂亮簡歷,讓面試成功率更大
    不管你是剛剛畢業的大學生,還是之前從事其他行業的人,為了有更多的面試機會,以及更高的成功率,很多人都會在簡歷上下功夫。但是你知道一份好的簡歷,應該關注什麼問題嗎?今天,就和大家聊一聊需要注意的事項。1. 簡歷中儘量多寫點你的實踐經歷,這些經歷在面試官的心裡,都是能夠給你進行加分的。這裡有一點需要注意,字數不能太少,否則顯得簡歷太過簡單,這會讓人覺得你根本沒有認真對待。
  • Java面試高頻考點:手寫Spring IOC實現機制
    Spring IOC的概念以及原理在面試過程中屬於一個被問爛的問題,本篇文章不再過多贅述。我們重點研究一下如何自己實現一個最簡單的Spring IOC。目前注入Bean的方式有兩種,一種是通過編寫XML文件注入,另一種是通過註解注入。
  • 作為應屆生,在大廠工作的這半年多我都學到了什麼?
    大二上學期我想把成績提上去,期末基本每科成績都是80,90分以上,但是還是覺得自己學的東西很虛,可以說還是啥也不會,太概念化。大二下可以說是我思想發生轉變的一個時期,班主任的編程小組要招人,我就去嘗試了面試一下,面試內容很簡單,手寫一個冒泡排序,我當時愣住了,腦子裡飄過一行字「冒泡排序是啥東西?」。
  • MIT現任面試官、哈佛校友爆料,如何簡單通過留學面試
    很多家長都了解在申請美國高校過程中會需要孩子的語言成績和學校成績,豐富的課外活動,但卻往往忽視了一個很重要的環節——面試。面試有很多中方法,有申請初期的,InitialView或Vericant面試,也有申請後期的招生官或校友面試兩種形式來進行面試。
  • 萬字梳理,帶你拿下 Java 面試題!
    並發性的:你可以在其中執行許多語句,而不必一次執行它;面向對象的:基於類和面向對象的程式語言;獨立性的:支持一次編寫,到處運行的獨立程式語言,即編譯後的代碼可以在支持 Java 的所有平臺上運行。在接口中,只允許進行方法的定義,不允許有方法的實現,抽象類中可以進行方法的定義和實現;而類中只允許進行方法的實現,我說的方法的定義是不允許在方法後面出現 {}使用的關鍵字不同:類使用 class 來表示;抽象類使用 abstract class 來表示;接口使用 interface 來表示變量:接口中定義的變量只能是公共的靜態常量,抽象類中的變量是普通變量
  • 面試官問:「你的興趣愛好是什麼?」這樣回答,面試官最滿意
    1 面試官為什麼要問這道題?面試官時間是很寶貴的,在短短一個小時之內,需要對候選人深入的了解,所以問任何問題都是有目的性的,那面試官問:「你的興趣愛好是什麼?」有什麼目的呢?1) 為了緩和氣氛,讓你為放鬆下來面試的時候,面試官和候選人一直在交鋒,如果一直氣氛很嚴肅,怕候選人進展,進而發揮不好,於是中間會穿插一些輕鬆的話題。
  • 阿里巴巴Java方向面試題匯總(含答案)
    面小易說:以上三個問題所涉及的都是Java語言中的一些比較高級的數據結構,從字符串相關到容器再到哈希表和樹等數據結構,因此我們在學習Java語言的時候,也需要更加深入地去對比比較類似的數據結構的使用場景以及其優缺點。四、Tomcat,Apache,JBoss的區別?1、Apache是HTTP伺服器,Tomcat是Web伺服器,JBoss是應用伺服器。
  • 面試官:下水道井蓋為什麼是圓的?網友的神回復讓面試官讚嘆不已
    別忘了,面試官也是想趁這個時候給公司挑選人才。面試官絞盡腦汁,翻閱書本,查找資料,冥思苦想的營造面試題。「你欣賞哪種性格的人?」「你最崇拜的人是誰?」......求職者小心翼翼,步步為營的回答,希望得到面試官的首肯。面試官露出頗有逼格的笑容,說,別急,我這還有題呢。你能不能過關,全看這一招。面試官出的題目是:下水道井蓋為什麼是圓的?
  • 面試官問「你還有什麼問題」?別傻問治療的問題,高情商人們會問
    在面試過程中,每個人都在盡力表現自己,在面試官面前展現自己最完美的一面,他們對一些專業問題有充分的準備,他們的答案可以到達面試官的滿意。當面試官問「你還有什麼問題」時,如何回答才能讓面試官換個角度看自己?大多數人對這個問題有兩種反應,要麼說不,要麼問無關緊要個問題。
  • 面試官:李字減去子,是啥字?小夥五秒答出,機智通過面試
    通過簡歷的篩選,再到獲取面試資格,職場的競爭就是這麼殘酷。正常來說,規模大的公司的面試都很正規,但是小公司就比較隨心所欲。隨著社會的發展,畢業生越來越多,各大學校的優秀學子開始踏入社會這個大環境,開始緊張的投簡歷找適合自己的工作。隨著畢業答辯的落下帷幕,很多大學生都開始自己的求職歷程。每年這個時候,全國都有大批大學生畢業,就業難早就已成為一種社會趨勢了。
  • 學Java反射,看這篇就夠了 | 原力計劃
    我怎麼使用它?這麼多的問題,這是在挑釁啊,既然如此,那麼我想起來宮本的那句:想挑戰的,一個一個來。先解決第一個問題。 解釋:對於大型的軟體,一個大公司的各個小組都有自己的分工,去實現不同的模塊,那麼各個小組之間如何協作就非常關鍵。
  • 面試官:一個口加個二,是什麼字?回答目與旦的人,都被淘汰了
    年輕就是一個揮霍青春的歲月,一切都隨心而動,因為我想,所以就要去體驗,去奮鬥。每個人都經歷過這個激情燃燒的歲月,不計後果的行動,不考慮代價的衝動,都只為自己那心靈深處的想法。小雅,一個外表靚麗,校花級的美女,在面對多姿多彩的大都市生活的誘惑下,也毫不猶豫地加入到了求職應聘的人流中。
  • 面試官:木字多一筆,是啥字?小夥機智作答,面試官紛紛鼓掌
    但實際上,現在的學歷早就不是面試官衡量這個人能力的唯一標準了。面試官會專門設計一些話題來考驗你的綜合素質,以及情商和思維變通能力。小王是一名剛剛畢業的大學生,小王的學歷雖然不是很高,只是一般的本科,但是腦子很機靈,是一個聰明人。在參加一家公司的面試的時候,經過幾輪的專業知識測試和面試,進入最後一關的只有4個人。