背景
上周评审的时候,做需求的同事有一个点是,把客户的名字提取拼音,然后保存起来,说是为了便于查询,然后组长提出来,是否可以用哈夫曼编码来做这个需求
什么是哈夫曼编码
1951年,哈夫曼和他在MIT信息论的同学需要选择是完成学期报告还是期末考试。导师Robert M. Fano给他们的学期报告的题目是,寻找最有效的二进制编码。由于无法证明哪个已有编码是最有效的,哈夫曼放弃对已有编码的研究,转向新的探索,最终发现了基于有序频率二叉树编码的想法,并很快证明了这个方法是最有效的。
哈夫曼编码,又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。是一种高效的编码方式,在信息存储和传输过程中用于对信息进行压缩。
具体介绍可以看这篇文章:哈夫曼编码
原理
构造哈夫曼编码的原理,是首先拿到给定的文本,然后统计文本中出现的各个字符的出现频率,然后给这个频率,构造一个二叉树,构造完成二叉树之后,就可以得到各个字符的编码,然后使用编码的方式,来把这段文本进行传输。
怎么用
这块我还没敲,回头补上,可以先看这篇文章:
是否适合我们的场景呢?
再来描述一下我们的场景,我们的场景是,我们会在数据库保存一批数据,然后每条数据都会有一个名称属性,一个名称的拼音属性,我们的出发点是认为,存拼音占地方,想要将这个属性缩短,如果使用哈夫曼编码的的话,不可避免要存两个东西,一个是原文中字符和频率的对照,一个是拼音加工后得到的哈夫曼编码,感觉并没有省多少事儿,所以我觉得不太合适。