很重要的编码技巧之霍夫曼规则

欢迎关注鄙人公众号,技术干货随时看!
很重要的编码技巧之霍夫曼规则_第1张图片

鄙人的新书,欢迎订阅!

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

《kibana权威指南》
https://wenku.baidu.com/view/24cfee1ce43a580216fc700abb68a98270feac21
  编码在我们的生活中无处不在,常见的身份证号码、电话号码、物品的分类编码、商品编码等,有的编码只要求排他性即可,但有的编码需要遵循科学的规则。
  霍夫曼编码的原理很简单:出现的频次越高,编码越短。这样做的原因是,当初发电文的资源宝贵和昂贵,可以节省资源和成本。现在电话号码的区号,依然遵循了霍夫曼原则,直辖市的通话量大,区号采用了3位数字,其他普通的地区采用了4为,如北京:010,济南:0531。
  鄙人今天要讲的是商品的分类编码。写这篇文章是由于鄙人遇到了一群自以为事的技术大牛(鄙人以为是技术菜X,其实有工作经验的人都明白,一个企业有菜X装大牛,也就离倒闭不远了)。其实无论在什么领域,最简单的方案一定是首选的,能把复杂问题简单华的才是人才!什么是技术,技术就是找到解决复杂问题的简单方法。常见的算法,分治算法、穷举算法等都是向我们传递解决复杂问题的根本方法是把问题分解、简而化之。
  鄙人曾工作过的一家电商公司,鄙人是大数据部门,开始是全是硕士,到鄙人离开时全公司找不到一个211本科。说到这里肯定会有人跳出来说学历不重要之类的话,学历真的不重要吗?事实上大家细心的话就能注意到说学历不重要的人他本身就没有学历!回到正题,商品的分类编码是有一群菜x设计的。方案是一级分类、二级分类、三级分类独立编码,要找二级分类必须先找到一级分类,要找三级分类必须通过一级分类找到二级分类,然后在通过二级分类才能找到三级分类。逻辑图如下:
很重要的编码技巧之霍夫曼规则_第2张图片
  商品是挂在末级分类下的,要想拿到商品的一级和二级分类,通过其他的映射关系!设计这个逻辑结构的人绝对是个傻叉。分类的本质是什么?分类的作用只是为了我们便于管理商品,分类编码的原则也是显而易见的,简单,直接体现分类的上下级关系。鄙人最认可的一种分类编码方法:
  很重要的编码技巧之霍夫曼规则_第3张图片
  这种编码方法包含了霍夫曼思想和树数据结构编码规则。商品挂在末级分类下,也就是一个商品上存储的分类一定是12位(如果业务允许在一级和二级下挂商品,分类编码也可能是4位或8位)。这编码方式的优点:
  1. 直接体现了商品分类的上下级关系,无需额外的映射关系和二次查询。上图所示,前4位为一级分类、前8为为二级分类,全12位为三级分类。
  2. 遵循了霍夫曼思想,一级分类数量是最少的所以用4位编码足以覆盖,二级分类的数量远多于一级分类因此采用了8位,同理三级采用了12位编码。
  3. 极大的简化了业务的实现流程。如下图所示,为了更好的用户体验分类导航条所示的分类是必须要有商品的,否则用户点击进去提示无商品就降低了用户体验度,如果采用上述第一种编码方法,实现起来极度复杂,因为搜索商品得到的是末级分类,要通过复杂的映射关系才可以拿到一级和二级分类。如果采用第二种霍夫曼编码思想,分类树可通过商品直接聚合获得(solr、elasticsearhc、sphinx均直接支持)。
  很重要的编码技巧之霍夫曼规则_第4张图片
  这种编码思想,不是鄙人的创造,众多公司都在采用。这么一个经过实践证明的科学方法,偏偏有人觉得自己是大牛(越是菜x,越是牛炸天!),独创傻叉的方法!看下京东的分类编码方法,正是鄙人推荐的霍夫曼编码规则:
很重要的编码技巧之霍夫曼规则_第5张图片
很重要的编码技巧之霍夫曼规则_第6张图片
很重要的编码技巧之霍夫曼规则_第7张图片

  • 母婴->营养辅食 分类编码是:1319,1524
  • 母婴->营养辅食->米粉/菜粉 分类编码是:1319,1524,1533
  • 母婴->营养辅食->果泥/果汁 分类编码是:1319,1524,1534
      能把复杂问题简单化的人才是人才,把简单问题复杂化的是蠢材!虚心学习别人,才可以提高我们自己!

你可能感兴趣的:(大数据,系统架构,技术人生)