可知,子表法查找比较次数的理论最小值为此时要求n=s2。如果在第一个步骤(确定子表)中改为采用二分法,则这种情况下就可以对以上码表中前缀连零再细化,将相同连零个数的码字放在一起,增加子表数而减少子表中的码字结点数,可以进一步提高查找效率。
从以上分析可见,二叉树的查找效率是最高的。因此可以将二叉树应用到子表法中,对每一张子表分别建树。对于二叉树来说,查找时间与树的深度有关。观察子表中的码字,发现它们都有不同长度的连零作为前缀,如果直接建树将导致树的不平衡并增加了树的深度。为了解决这个问题,可以考虑在同一张子表中为每个码字去除相同个数的连零前缀,然后建立二叉树。在解码时,先忽略这些连零个数,再进行树的查找。在最理想情况下,这种查找方法的一次查找的平均比较次数为:
对第一张VLC表采用二叉树一子表法的最大比较次数:
几种算法的对比与复杂度分析如表4所示。
空间复杂度也是需要考虑的问题。JM参考实现中为Tls和TC的联合码表建立了2个3×4×17的三维数组共需要408 B的存储空间。二叉树法经过统计,一棵树共有124个结点,其中叶结点62个,其余62个结点为根结点或枝结点。建3棵二叉树所需要的空间为(62×4+62×2)×3=1 116 B。子表法将码表分成12张子表,每张子表用2个二维数组表示,而数组的平均大小为4×6.5,则共要4×6.5×12×2=624 B。
3 结 语
H.264是现在视频编解码领域研究的热点也是未来发展的方向,它将代替MPEG2成为主流的信源压缩标准。H.264应用领域非常广泛。将H.264的编解码速度尽可能的提高,可以使其在更多的领域中应用,如数字电视,消费电子类产品,网络通信,可视电话等现在热门领域。在此专门对于CAVLC码表查找给出了改进方案,通过这三种改进方案,避免了对整个码表的查找,对码表的查找在效率上有了很大提高。具有明显的实用意义。