很重要的編碼技巧之霍夫曼規則

鄙人的新書,歡迎訂閱!

《elasticsearch7完全開發指南》
https://wenku.baidu.com/view/8ff2ce94591b6bd97f192279168884868762b8e7

《kibana權威指南》
https://wenku.baidu.com/view/24cfee1ce43a580216fc700abb68a98270feac21
  編碼在我們的生活中無處不在,常見的身份證號碼、電話號碼、物品的分類編碼、商品編碼等,有的編碼只要求排他性即可,但有的編碼需要遵循科學的規則。
  霍夫曼編碼的原理很簡單:出現的頻次越高,編碼越短。這樣做的原因是,當初發電文的資源寶貴和昂貴,可以節省資源和成本。現在電話號碼的區號,依然遵循了霍夫曼原則,直轄市的通話量大,區號採用了3位數字,其他普通的地區採用了4爲,如北京:010,濟南:0531。
  鄙人今天要講的是商品的分類編碼。寫這篇文章是由於鄙人遇到了一羣自以爲事的技術大牛(鄙人以爲是技術菜X,其實有工作經驗的人都明白,一個企業有菜X裝大牛,也就離倒閉不遠了)。其實無論在什麼領域,最簡單的方案一定是首選的,能把複雜問題簡單華的纔是人才!什麼是技術,技術就是找到解決複雜問題的簡單方法。常見的算法,分治算法、窮舉算法等都是向我們傳遞解決複雜問題的根本方法是把問題分解、簡而化之。
  鄙人曾工作過的一家電商公司,鄙人是大數據部門,開始是全是碩士,到鄙人離開時全公司找不到一個211本科。說到這裏肯定會有人跳出來說學歷不重要之類的話,學歷真的不重要嗎?事實上大家細心的話就能注意到說學歷不重要的人他本身就沒有學歷!回到正題,商品的分類編碼是有一羣菜x設計的。方案是一級分類、二級分類、三級分類獨立編碼,要找二級分類必須先找到一級分類,要找三級分類必須通過一級分類找到二級分類,然後在通過二級分類才能找到三級分類。邏輯圖如下:
在這裏插入圖片描述
  商品是掛在末級分類下的,要想拿到商品的一級和二級分類,通過其他的映射關係!設計這個邏輯結構的人絕對是個傻叉。分類的本質是什麼?分類的作用只是爲了我們便於管理商品,分類編碼的原則也是顯而易見的,簡單,直接體現分類的上下級關係。鄙人最認可的一種分類編碼方法:
  在這裏插入圖片描述
  這種編碼方法包含了霍夫曼思想和樹數據結構編碼規則。商品掛在末級分類下,也就是一個商品上存儲的分類一定是12位(如果業務允許在一級和二級下掛商品,分類編碼也可能是4位或8位)。這編碼方式的優點:
  1. 直接體現了商品分類的上下級關係,無需額外的映射關係和二次查詢。上圖所示,前4位爲一級分類、前8爲爲二級分類,全12位爲三級分類。
  2. 遵循了霍夫曼思想,一級分類數量是最少的所以用4位編碼足以覆蓋,二級分類的數量遠多於一級分類因此採用了8位,同理三級採用了12位編碼。
  3. 極大的簡化了業務的實現流程。如下圖所示,爲了更好的用戶體驗分類導航條所示的分類是必須要有商品的,否則用戶點擊進去提示無商品就降低了用戶體驗度,如果採用上述第一種編碼方法,實現起來極度複雜,因爲搜索商品得到的是末級分類,要通過複雜的映射關係纔可以拿到一級和二級分類。如果採用第二種霍夫曼編碼思想,分類樹可通過商品直接聚合獲得(solr、elasticsearhc、sphinx均直接支持)。
  在這裏插入圖片描述
  這種編碼思想,不是鄙人的創造,衆多公司都在採用。這麼一個經過實踐證明的科學方法,偏偏有人覺得自己是大牛(越是菜x,越是牛炸天!),獨創傻叉的方法!看下京東的分類編碼方法,正是鄙人推薦的霍夫曼編碼規則:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

  • 母嬰->營養輔食 分類編碼是:1319,1524
  • 母嬰->營養輔食->米粉/菜粉 分類編碼是:1319,1524,1533
  • 母嬰->營養輔食->果泥/果汁 分類編碼是:1319,1524,1534
      能把複雜問題簡單化的人才是人才,把簡單問題複雜化的是蠢材!虛心學習別人,纔可以提高我們自己!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章