本文继续介绍重要的贪心算法,比如哈夫曼编码、最小生成树等算法。
最优前缀码及哈夫曼编码
二元前缀码
二元前缀码:用0-1字符串作为代码表示字符,要求任何字符的代码都不能作为其它字符代码的前缀。
非前缀码的例子:
a: 001, b: 00, c: 010, d: 01
解码的歧义,例如字符串0100001
-
解码1:01,00,001 d,b,a
-
解码2:010,00,01 c,b,d
本文继续介绍重要的贪心算法,比如哈夫曼编码、最小生成树等算法。
二元前缀码:用0-1字符串作为代码表示字符,要求任何字符的代码都不能作为其它字符代码的前缀。
非前缀码的例子:
a: 001, b: 00, c: 010, d: 01
解码的歧义,例如字符串0100001
解码1:01,00,001 d,b,a
解码2:010,00,01 c,b,d
将原问题归结为规模为n-1
的2个子问题;
继续归约,将原问题归结为规模为n-2
的4个子问题。继续…,当子问题规模为1
时,归约过程截止。
从规模1
到n-1
,陆续组合两个子问题的解。直到规模为n
。
分析方法:递推方程。
输入:集合(含个不等的实数)
输出:中的第小的元素
,称为最小元素
,称为最大元素
位置处在中间爱你位置的元素,成为中位元素。
为奇数,中位数唯一,。
为偶数,可指定为。
选最大算法:顺序比较,在最坏情况下的时间为。
函数渐近界的定理
定理1
设和 是定义域为自然数集合的函数:
(1)如果存在,并且等于某个常数,那么。
(2)如果,那么。
(3)如果,那么。
推理1 → 多项式函数的阶低于指数函数的阶,。
推理2 →对数函数的阶低于幂函数的阶,。