热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

鄙人的新书《Elasticsearch权威指南》正式出版发行,欢迎购买!本书由华为、中兴高级技术专家全面审读并撰序,助您挑战百万年薪购书链接:《Elasticsearch权威指南》

鄙人的新书《Elasticsearch权威指南》正式出版发行,欢迎购买!本书由华为、中兴高级技术专家全面审读并撰序,助您挑战百万年薪 购书链接: 《很重要的编码技巧之霍夫曼规则》

《Elasticsearch权威指南》
欢迎关注鄙人公众号,技术干货随时看!
《很重要的编码技巧之霍夫曼规则》

鄙人的新书,欢迎订阅!

《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
      能把复杂问题简单化的人才是人才,把简单问题复杂化的是蠢材!虚心学习别人,才可以提高我们自己!

推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • 一份来自清华的数据分析笔记,请查收!
    之前发过很多数据分析的文章,收到不少好评,但也有一些困惑:入门数据分析该学哪些知识点?该看哪些书?是从Pyth ... [详细]
  • 此版本重点升级了Online代码生成器,支持更多的控件生成,所见即所得,极大的提高开发效率;同时做了数据库兼容专项工作,让Online开发兼容更多数据库:Mysql、SqlServer、Oracle、Postgresql等!!!项目介绍 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 微软发布OneNote for WordPress插件,支持一键从OneNote获取内容发布
    微软今日发布了OneNoteforWordPress插件,该插件支持从OneNote一键获取 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • Elasticsearch1Elasticsearch入门1.1Elasticsearch术语1.1.16.0以前的Elasticsearch术语1.1.26.0以后的Elasti ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有