主要参考:    word2vec 中的数学原理详解                 自己动手写 word2vec

编码的话,根是不记录在编码中的

这一篇主要讲的就是霍夫曼树(最优二叉树)和编码。  参考   快速画出哈夫曼树 / 霍夫曼树 / 最优树   了解其构成。    哈夫曼树及 python 实现

python 代码 构建霍夫曼树 ,获得霍夫曼编码    简单实现:

#节点类
class Node(object):
def __init__(self,name=None,value=None):
self._name=name
self._value=value
self._left=None
self._right=None #哈夫曼树类
class HuffmanTree(object): #根据Huffman树的思想:以叶子节点为基础,反向建立Huffman树
def __init__(self,char_weights):
self.a=[Node(part[0],part[1]) for part in char_weights] #根据输入的字符及其频数生成叶子节点
while len(self.a)!=1:
self.a.sort(key=lambda node:node._value,reverse=True)
c=Node(value=(self.a[-1]._value+self.a[-2]._value))
c._left=self.a.pop(-1)
c._right=self.a.pop(-1)
self.a.append(c)
self.root=self.a[0]
self.b=range(10) #self.b用于保存每个叶子节点的Haffuman编码,range的值只需要不小于树的深度就行
def show(self):
pass #用递归的思想生成编码
def pre(self,tree,length):
node=tree
if (not node):
return
elif node._name:
print node._name + '的编码为:',
for i in range(length):
print self.b[i],
print '\n'
return
self.b[length]=0
self.pre(node._left,length+1)
self.b[length]=1
self.pre(node._right,length+1)
#生成哈夫曼编码
def get_code(self):
self.pre(self.root,0) if __name__=='__main__':
#输入的是字符及其频数
char_weights=[('我',15),('喜欢',8),('观看',6),('巴西',5),('足球',3),('世界杯',1)]
# char_weights = [('a', 4), ('b', 5), ('c', 8), ('d', 9), ('e', 11), ('f', 13)]
tree=HuffmanTree(char_weights)
tree.get_code()

运行结果:

我的编码为:  

世界杯的编码为:     

足球的编码为:     

巴西的编码为:    

观看的编码为:    

喜欢的编码为:    

最新文章

  1. RDCMan
  2. ASP.Net MVC3 图片上传详解(form.js,bootstrap)
  3. 【转】mysql的union、left join、 right join、 inner join和视图学习
  4. 雷克萨斯-RC
  5. geohash基本原理
  6. oracle 字符串
  7. Appcan跨域交互
  8. 处理html5离线应用程序存储的一些问题。
  9. redhat Enterprise Linux Server release 7.2(Maipo) 安装redis-stat
  10. 剑指Offer29 连续子数组最大和
  11. 北大ACM(POJ1001-Exponentiation)
  12. ARM学习笔记5——程序状态寄存器
  13. 同步的HTTP请求
  14. 网络组Network Teaming
  15. Python语法教程-基础语法01
  16. day24_python_1124
  17. 约瑟夫环简介,问题以及java实现
  18. JSP指示元素<%@ %> 与指示类型
  19. 使用U盘安装linux系统
  20. leetcode445

热门文章

  1. SPFA最短路算法
  2. MySQL的IFNULL解决判空问题
  3. 【Luogu1344】追查坏牛奶(最小割)
  4. sql server 小技巧(6) Cannot resolve the collation conflict between "Latin1_General_CI_AI" and "Chinese_PRC_CI_AS" in the equal to operation
  5. github使用记录
  6. Java 动态代理模式浅析
  7. duilib bkimage 属性
  8. Jenkins 01——简介
  9. WebSockets Tutorial(教程一)WebSockets简介
  10. 浅谈 js 对象 toJSON 方法