表示一个数所需最少位bit
很简单, 如果数为x, 则最少需要 lb(x) = log2(x) 位bit来表示
很明显这个对大多数x得到的是一个小数
则 LOG2(x) = [log2(x)]
其中 [x] 表示不小于x的最大整数
熵
若元素集合:
S = {p1, p2, p3, … , pi}
则对于集合S的熵H表达如下:
H(S) = -( p1lb(p1) + p2lb(p2) + … + pi*lb(pi)
即:
S为某个集合, p1~pn为S集合中的元素, H则表示某个集合S的熵
准确的说, 上述描述并不完整
对于一份数据G = [g1, g2, g3, g4, ...... , gn]
其包含的元素集合(每个元素只出现一次)为: S = set(G) = (s1, s2, ... , si]
P(si) = count(si) / length(G)
其中count(si)表示元素si在G中出现的次数, length(G)表示G的长度n
H(S)中的S其实对应的是数据集G的元素集合S
这里的熵的提出者是香农
熵还有很多其他意思
熵(名词)
物理学:
一个热力学量,表示的是一个系统中无法转换为机械功的热能的量,
通常被解释为该系统的无序度或随机度
H. P. Lovecraft:
无序或缺乏可预测性,逐渐退化为混乱
信息论中的解释:
对在特定的消息或语言中信息传输速度的一种对数度量
熵的作用
对于数据G
其元素集合为S=set(G)
H表示的是 si 所需要的最少的二进制bit位(其实这是错误的, 详见后续)
例如数据G = [A, B, B, C, C, C, D, D, D, D]
H(G)≈1.85
对其向上取整为2, 则我们可以大致认为平均每个值用两个二进制位就可以对G进行编码:
S = set(G) = [ A, B, C, D]
A: 00
B: 01
C: 10
D: 11
则G^e如下
e = [00, 01, 01, 10, 10, 10, 11, 11, 11, 11]
其实如果只是要算最终对数据G需要多少个二进制位来表示, 只需要将H向上取整然后乘以G的长度
熵的局限性
熵只是考虑了一个集合中某个符号出现的概率
但是没有考虑集合中元素的关系
例如集合[1,4,2,3] 与集合[1,2,3,4]
虽然他们的熵H相等, 但实际上[1,2,3,4]还多表示了一个顺序关系
笔者到这里更不动了
因为还要准备考研
7月份才决定考研
这些内容其实是前阵子发在github上的
今天搬运回CSDN发现坑蛮多, 于是补充了一些
但是数据压缩嘛, 内容很多的啦
所以后续几篇我直接搬了, 就不补充了qwq
这里的东西也不继续补充了
等我复习完再回来填坑hhh
__2022/8/14_23:57__