首页

> 论文发表知识库

首页 论文发表知识库 问题

赫夫曼编码毕业论文

发布时间:

赫夫曼编码毕业论文

Lossless source coding is a kind of symbol when converting source code can be restored without distortion from the code source symbols to the original source coding. This article first briefly describes the lossless coding technology development and application; and then focus on the Shannon coding, fee Connaught coding, Huffman coding and arithmetic coding of the four principles of coding and coding steps, and compared with the corresponding examples of their Average code length and information transmission speed; Finally, the Huffman coding Matlab software simulation process, and gives some of the source, and an example of application, the output results are analyzed, conclusions are drawn.不知道准确不准确呀

Content as follows: no distortion source coding is a kind of when source symbols, can convert code without distortion from code returned to the original source of the source coding symbols. This paper firstly introduces the without distortion encoding technology development and application; Then discussed emphatically shannon coding, feanor coding, hoffmann coding and the arithmetic coding of four kinds of coding method, the principle and encoding steps are compared with the corresponding sample the average yards long and information transmission speed; Finally, using the Matlab software realize the coding hoffmann the simulation process, also gives part of the source program, and illustrates the application of output, analysed and corresponding conclusions.

数字图像压缩技术的研究及进展摘要:数字图像压缩技术对于数字图像信息在网络上实现快速传输和实时处理具有重要的意义。本文介绍了当前几种最为重要的图像压缩算法:JPEG、JPEG2000、分形图像压缩和小波变换图像压缩,总结了它们的优缺点及发展前景。然后简介了任意形状可视对象编码算法的研究现状,并指出此算法是一种产生高压缩比的图像压缩算法。关键词:JPEG;JPEG2000;分形图像压缩;小波变换;任意形状可视对象编码一 引 言 随着多媒体技术和通讯技术的不断发展,多媒体娱乐、信息高速公路等不断对信息数据的存储和传输提出了更高的要求,也给现有的有限带宽以严峻的考验,特别是具有庞大数据量的数字图像通信,更难以传输和存储,极大地制约了图像通信的发展,因此图像压缩技术受到了越来越多的关注。图像压缩的目的就是把原来较大的图像用尽量少的字节表示和传输,并且要求复原图像有较好的质量。利用图像压缩,可以减轻图像存储和传输的负担,使图像在网络上实现快速传输和实时处理。 图像压缩编码技术可以追溯到1948年提出的电视信号数字化,到今天已经有50多年的历史了[1]。在此期间出现了很多种图像压缩编码方法,特别是到了80年代后期以后,由于小波变换理论,分形理论,人工神经网络理论,视觉仿真理论的建立,图像压缩技术得到了前所未有的发展,其中分形图像压缩和小波图像压缩是当前研究的热点。本文对当前最为广泛使用的图像压缩算法进行综述,讨论了它们的优缺点以及发展前景。二 JPEG压缩 负责开发静止图像压缩标准的“联合图片专家组”(Joint Photographic Expert Group,简称JPEG),于1989年1月形成了基于自适应DCT的JPEG技术规范的第一个草案,其后多次修改,至1991年形成ISO10918国际标准草案,并在一年后成为国际标准,简称JPEG标准。1.JPEG压缩原理及特点 JPEG算法中首先对图像进行分块处理,一般分成互不重叠的 大小的块,再对每一块进行二维离散余弦变换(DCT)。变换后的系数基本不相关,且系数矩阵的能量集中在低频区,根据量化表进行量化,量化的结果保留了低频部分的系数,去掉了高频部分的系数。量化后的系数按zigzag扫描重新组织,然后进行哈夫曼编码。JPEG的特点优点:(1)形成了国际标准;(2)具有中端和高端比特率上的良好图像质量。缺点:(1)由于对图像进行分块,在高压缩比时产生严重的方块效应;(2)系数进行量化,是有损压缩;(3)压缩比不高,小于50。 JPEG压缩图像出现方块效应的原因是:一般情况下图像信号是高度非平稳的,很难用Gauss过程来刻画,并且图像中的一些突变结构例如边缘信息远比图像平稳性重要,用余弦基作图像信号的非线性逼近其结果不是最优的。2. JPEG压缩的研究状况及其前景 针对JPEG在高压缩比情况下,产生方块效应,解压图像较差,近年来提出了不少改进方法,最有效的是下面的两种方法:(1)DCT零树编码 DCT零树编码把 DCT块中的系数组成log2N个子带,然后用零树编码方案进行编码。在相同压缩比的情况下,其PSNR的值比 EZW高。但在高压缩比的情况下,方块效应仍是DCT零树编码的致命弱点。(2)层式DCT零树编码 此算法对图像作 的DCT变换,将低频 块集中起来,做 反DCT变换;对新得到的图像做相同变换,如此下去,直到满足要求为止。然后对层式DCT变换及零树排列过的系数进行零树编码。 JPEG压缩的一个最大问题就是在高压缩比时产生严重的方块效应,因此在今后的研究中,应重点解决 DCT变换产生的方块效应,同时考虑与人眼视觉特性相结合进行压缩。三 JEPG2000压缩 JPEG2000是由ISO/IEC JTCISC29标准化小组负责制定的全新静止图像压缩标准。一个最大改进是它采用小波变换代替了余弦变换。2000年3月的东京会议,确定了彩色静态图像的新一代编码方式—JPEG2000图像压缩标准的编码算法。1.JPEG2000压缩原理及特点 JPEG2000编解码系统的编码器和解码器的框图如图1所示。编码过程主要分为以下几个过程:预处理、核心处理和位流组织。预处理部分包括对图像分片、直流电平(DC)位移和分量变换。核心处理部分由离散小波变换、量化和熵编码组成。位流组织部分则包括区域划分、码块、层和包的组织。 JPEG2000格式的图像压缩比,可在现在的JPEG基础上再提高10%~30%,而且压缩后的图像显得更加细腻平滑。对于目前的JPEG标准,在同一个压缩码流中不能同时提供有损和无损压缩,而在JPEG2000系统中,通过选择参数,能够对图像进行有损和无损压缩。现在网络上的JPEG图像下载时是按“块”传输的,而JPEG2000格式的图像支持渐进传输,这使用户不必接收整个图像的压缩码流。由于JPEG2000采用小波技术,可随机获取某些感兴趣的图像区域(ROI)的压缩码流,对压缩的图像数据进行传输、滤波等操作。2.JPEG2000压缩的前景 JPEG2000标准适用于各种图像的压缩编码。其应用领域将包括Internet、传真、打印、遥感、移动通信、医疗、数字图书馆和电子商务等。JPEG2000图像压缩标准将成为21世纪的主流静态图像压缩标准。四 小波变换图像压缩1.小波变换图像压缩原理小波变换用于图像编码的基本思想就是把图像根据Mallat塔式快速小波变换算法进行多分辨率分解。其具体过程为:首先对图像进行多级小波分解,然后对每层的小波系数进行量化,再对量化后的系数进行编码。小波图像压缩是当前图像压缩的热点之一,已经形成了基于小波变换的国际压缩标准,如MPEG-4标准,及如上所述的JPEG2000标准 。2.小波变换图像压缩的发展现状及前景 目前3个最高等级的小波图像编码分别是嵌入式小波零树图像编码(EZW),分层树中分配样本图像编码(SPIHT)和可扩展图像压缩编码(EBCOT)。(1)EZW编码器 1993年,Shapiro引入了小波“零树”的概念,通过定义POS、NEG、IZ和ZTR四种符号进行空间小波树递归编码,有效地剔除了对高频系数的编码,极大地提高了小波系数的编码效率。此算法采用渐进式量化和嵌入式编码模式,算法复杂度低。EZW算法打破了信息处理领域长期笃信的准则:高效的压缩编码器必须通过高复杂度的算法才能获得,因此EZW编码器在数据压缩史上具有里程碑意义。(2)SPIHT编码器 由Said和Pearlman提出的分层小波树集合分割算法(SPIHT)则利用空间树分层分割方法,有效地减小了比特面上编码符号集的规模。同EZW相比,SPIHT算法构造了两种不同类型的空间零树,更好地利用了小波系数的幅值衰减规律。同EZW编码器一样,SPIHT编码器的算法复杂度低,产生的也是嵌入式比特流,但编码器的性能较EZW有很大的提高。(3)EBCOT编码器优化截断点的嵌入块编码方法(EBCOT)首先将小波分解的每个子带分成一个个相对独立的码块,然后使用优化的分层截断算法对这些码块进行编码,产生压缩码流,结果图像的压缩码流不仅具有SNR可扩展而且具有分辨率可扩展,还可以支持图像的随机存储。比较而言,EBCOT算法的复杂度较EZW和SPIHT有所提高,其压缩性能比SPIHT略有提高。小波图像压缩被认为是当前最有发展前途的图像压缩算法之一。小波图像压缩的研究集中在对小波系数的编码问题上。在以后的工作中,应充分考虑人眼视觉特性,进一步提高压缩比,改善图像质量。并且考虑将小波变换与其他压缩方法相结合。例如与分形图像压缩相结合是当前的一个研究热点。五 分形图像压缩 1988年,Barnsley通过实验证明分形图像压缩可以得到比经典图像编码技术高几个数量级的压缩比。1990年,Barnsley的学生提出局部迭代函数系统理论后,使分形用于图像压缩在计算机上自动实现成为可能。1. 分形图像压缩的原理 分形压缩主要利用自相似的特点,通过迭代函数系统(Iterated Function System, IFS)实现。其理论基础是迭代函数系统定理和拼贴定理。 分形图像压缩把原始图像分割成若干个子图像,然后每一个子图像对应一个迭代函数,子图像以迭代函数存储,迭代函数越简单,压缩比也就越大。同样解码时只要调出每一个子图像对应的迭代函数反复迭代,就可以恢复出原来的子图像,从而得到原始图像。2.几种主要分形图像编码技术 随着分形图像压缩技术的发展,越来越多的算法被提出,基于分形的不同特征,可以分成以下几种主要的分形图像编码方法。(1)尺码编码方法 尺码编码方法是基于分形几何中利用小尺度度量不规则曲线长度的方法,类似于传统的亚取样和内插方法,其主要不同之处在于尺度编码方法中引入了分形的思想,尺度 随着图像各个组成部分复杂性的不同而改变。(2)迭代函数系统方法 迭代函数系统方法是目前研究最多、应用最广泛的一种分形压缩技术,它是一种人机交互的拼贴技术,它基于自然界图像中普遍存在的整体和局部自相关的特点,寻找这种自相关映射关系的表达式,即仿射变换,并通过存储比原图像数据量小的仿射系数,来达到压缩的目的。如果寻得的仿射变换简单而有效,那么迭代函数系统就可以达到极高的压缩比。(3)A-E-Jacquin的分形方案 A-E-Jacquin的分形方案是一种全自动的基于块的分形图像压缩方案,它也是一个寻找映射关系的过程,但寻找的对象域是将图像分割成块之后的局部与局部的关系。在此方案中还有一部分冗余度可以去除,而且其解码图像中存在着明显的方块效应。3.分形图像压缩的前景 虽然分形图像压缩在图像压缩领域还不占主导地位,但是分形图像压缩既考虑局部与局部,又考虑局部与整体的相关性,适合于自相似或自仿射的图像压缩,而自然界中存在大量的自相似或自仿射的几何形状,因此它的适用范围很广。六 其它压缩算法 除了以上几种常用的图像压缩方法以外,还有:NNT(数论变换)压缩、基于神经网络的压缩方法、Hibert扫描图像压缩方法、自适应多相子带压缩方法等,在此不作赘述。下面简单介绍近年来任意形状纹理编码的几种算法[10]~ [13]。(1)形状自适应DCT(SA-DCT)算法 SA-DCT把一个任意形状可视对象分成 的图像块,对每块进行DCT变换,它实现了一个类似于形状自适应Gilge DCT[10][11]变换的有效变换,但它比Gilge DCT变换的复杂度要低。可是,SA-DCT也有缺点,它把像素推到与矩形边框的一个侧边相平齐,因此一些空域相关性可能丢失,这样再进行列DCT变换,就有较大的失真了[11][14][15]。(2)Egger方法 Egger等人[16][17]提出了一个应用于任意形状对象的小波变换方案。在此方案中,首先将可视对象的行像素推到与边界框的右边界相平齐的位置,然后对每行的有用像素进行小波变换,接下来再进行另一方向的小波变换。此方案,充分利用了小波变换的局域特性。然而这一方案也有它的问题,例如可能引起重要的高频部分同边界部分合并,不能保证分布系数彼此之间有正确的相同相位,以及可能引起第二个方向小波分解的不连续等。(3)形状自适应离散小波变换(SA-DWT) Li等人提出了一种新颖的任意形状对象编码,SA-DWT编码[18]~[22]。这项技术包括SA-DWT和零树熵编码的扩展(ZTE),以及嵌入式小波编码(EZW)。SA-DWT的特点是:经过SA-DWT之后的系数个数,同原任意形状可视对象的像素个数相同;小波变换的空域相关性、区域属性以及子带之间的自相似性,在SA-DWT中都能很好表现出来;对于矩形区域,SA-DWT与传统的小波变换一样。SA-DWT编码技术的实现已经被新的多媒体编码标准MPEG-4的对于任意形状静态纹理的编码所采用。 在今后的工作中,可以充分地利用人类视觉系统对图像边缘部分较敏感的特性,尝试将图像中感兴趣的对象分割出来,对其边缘部分、内部纹理部分和对象之外的背景部分按不同的压缩比进行压缩,这样可以使压缩图像达到更大的压缩比,更加便于传输。七 总结 图像压缩技术研究了几十年,取得了很大的成绩,但还有许多不足,值得我们进一步研究。小波图像压缩和分形图像压缩是当前研究的热点,但二者也有各自的缺点,在今后工作中,应与人眼视觉特性相结合。总之,图像压缩是一个非常有发展前途的研究领域,这一领域的突破对于我们的信息生活和通信事业的发展具有深远的影响。参考文献:[1] 田青. 图像压缩技术[J]. 警察技术, 2002, (1):30-31.[2] 张海燕, 王东木等. 图像压缩技术[J]. 系统仿真学报, 2002, 14(7):831-835.[3] 张宗平, 刘贵忠. 基于小波的视频图像压缩研究进展[J]. 电子学报, 2002, 30(6):883-889.[4] 周宁, 汤晓军, 徐维朴. JPEG2000图像压缩标准及其关键算法[J]. 现代电子技术, 2002, (12):1-5.[5] 吴永辉, 俞建新. JPEG2000图像压缩算法概述及网络应用前景[J]. 计算机工程, 2003, 29(3):7-10.[6] J M Shaprio. Embedded image coding using zerotree of wavelet coefficients[J]. IEEE Trans. on Signal Processing, 1993, 41(12): 3445-3462.[7] A Said, W A Pearlman. A new fast and efficient image codec based on set partitioning in hierarchical trees[J]. IEEE Trans. on Circuits and Systems for Video Tech. 1996, 6(3): 243-250.[8] D Taubman. High performance scalable image compression with EBCOT[J]. IEEE Transactions on Image Processing, 2000, 9(7): 1158–1170.[9] 徐林静, 孟利民, 朱建军. 小波与分行在图像压缩中的比较及应用. 中国有线电视, 2003, 03/04:26-29.[10] M Gilge, T Engelhardt, R Mehlan. Coding of arbitrarily shaped image segments based on a generalized orthogonal transform[J]. Signal Processing: Image Commun., 1989, 1(10): 153–180.[11] T Sikora, B Makai. Shape-adaptive DCT for generic coding of video[J]. IEEE Trans. Circuits Syst. Video Technol., 1995, 5(1): 59–62.[12] T Sikora, S Bauer, B Makai. Efficiency of shape-adaptive 2-D transforms for coding of arbitrarily shaped image segments[J]. IEEE Trans. Circuits Syst. Video Technol., 1995, 5(3): 254–258.[13]邓家先 康耀红 编著 《信息论与编码》

哈夫曼树毕业论文

对啊,楼主说的对。哈夫曼树的度不能为0或2,绝对不可能为1的。这和度的定义及哈夫曼树的定义有关。结点的度是指该结点所具有的非空子树数。一棵树的度是指该树中结点的最大度树。例如:A B C则A结点度为2.而哈夫曼树是最优二叉数,二叉数的度数且每个结点必有二个度除根结点外。楼主把哈夫曼树的定义认真读一下就知道了。

#include using namespace std;typedef struct Element{ Element* next; int value;}Element,*Link,*Position;class SortedUnion{private: Link sorted_link;public : SortedUnion() { //创建单链表的头节点 sorted_link = (Link)malloc(sizeof(Element)); sorted_link->next = NULL; } void addValue(int value) { Position pos = insertPosition(value); if(pos!=NULL) { Link tmp = (Link)malloc(sizeof(Element)); tmp->value = value; tmp->next = pos->next; pos->next = tmp; } } void deleteValue(int value) { Position pos,pre=sorted_link; for(pos=sorted_link->next; pos; pos=pos->next) { if(pos->value == value) { pre->next = pos->next; free(pos); break; } pre = pos; } } Position insertPosition(int value) { Position pos; for(pos = sorted_link; pos->next; pos=pos->next) { if(pos->next->value > value) break; if(pos->next->value == value) return NULL; } return pos; } void print() { Link ptr; for(ptr=sorted_link; ptr->next; ptr=ptr->next) cout << ptr->next->value << " "; } friend SortedUnion Intersection(SortedUnion A, SortedUnion B) { SortedUnion C; Position posA = >next, posB = >next; while(posA && posB) { if(posA->value < posB->value) posA = posA->next; else if(posB->value < posA->value) posB = posB->next; else{ (posA->value); posA = posA->next; posB = posB->next; } } return C; }};int main(){ SortedUnion u1,u2,u3; (2); (3); (1); (4); (1); (2); u3 = Intersection(u1, u2); ();}

哈夫曼树的定义是构造一棵最短的带权路径树,所以这种树为最优二叉树。最优二叉树的度只有0或者2。

给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

扩展资料:

1951年,当霍夫曼在麻省理工学院攻读博士学位时,他和他的学生们在一门信息理论课程上必须选择是完成一篇学期论文还是参加期末考试。

导师罗伯特·法诺的学期论文题目是:找到最有效的二进制代码。由于无法证明哪些现有代码是最有效的,霍夫曼放弃了对现有代码的研究,转向了新的探索。最后,他发现了基于有序频率的二叉树编码的思想,并很快证明了这种方法是最有效的。

树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。

树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明哈夫曼树的WPL是最小的。

这句话是错的。书上说过是带权路径最短的二叉树,以树表达与以二叉树表达完全不同。

在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。

结点的权及带权路径长度若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。

扩展资料:

哈夫曼树也可以是k叉的,只是在构造k叉哈夫曼树时需要先进行一些调整。构造哈夫曼树的思想是每次选k个权重最小的元素来合成一个新的元素,该元素权重为k个元素权重之和。但是当k大于2时,按照这个步骤做下去可能到最后剩下的元素少于k个。

对给定的n个权值构造k叉哈夫曼树时,可以先考虑增加一些权值为0的叶子节点,使得叶子节点总数为(k-1)nk+1这种形式,然后再按照哈夫曼树的方法进行构造即可。

户外探险杂志曼哥夫

《荒野生存》(乔恩•克拉考尔(Jon Krakauer))电子书网盘下载免费在线阅读

链接:

书名:荒野生存

作者:乔恩•克拉考尔(Jon Krakauer)

译者:欧冶

豆瓣评分:

出版社:中国人民大学出版社

出版年份:2008-07

页数:196

内容简介:

扣动美国人心弦的阿拉斯加之谜:

为什么富家子弟、名牌大学毕业生放弃一切走进阿拉斯加荒野?

为了逃离沉重的家庭桎梏?躲避复杂的人际关系?

渴望惊心动魄的冒险?还是执着探寻灵魂之乡?

为什么他在萍水相逢的过客心中都留下了刻骨铭心的印记?

为何一个无名的旅行者竟引起美国媒体的争相报道?

为何一个年轻流浪者在美国主流社会刮起一阵阅读、讨论旋风?

记者乔恩·克拉考尔沿着他的足迹奔走于美国西部,走访与他的旅途曾有交集的人,阅读他留下的谜样日记、照片、书籍和信件,并毫无保留地讲述自己年轻时的“魔指”峰冒险,以及使他醉心户外探险的家庭、心理因素,试图解开这个“阿拉斯加之谜”。

作者简介:

乔恩·克拉考尔(Jon Krauer)美国畅销书作家,《户外》杂志专栏作家、登山家。亲历1996年珠穆朗玛峰山难后,他在《户外》杂志发表的分析报道(后来扩展为本书)获“美国国家杂志奖”。

除了本书,乔恩·克拉考尔还著有《荒野生存》、《艾格尔山之梦》和《天堂的旗帜下》等。其中《荒野生存》出版后,长踞《纽约时报》畅销排行榜达两年以上,为他赢得杰出探险类作家的赞誉。

《户外探险(2010年第9期)》内容包括:特别策划、达者乐途、相看两不厌、身在此山中、孤帆近影、缘来你也在这里、索隐记、造化于心、山石空境、南方丝绸之路 蜀身毒道、风生水起、黑白灵兽、乡野行腔、乘物以游心。

赫鲁晓夫与乌克兰论文参考文献

苏联当局重新控制新收复地区后立即进行经济重建。同战前一样,第四个五年计画仍将重点放在重工业上,从而损害了消费品生产。战前制度很快又恢复了。赫鲁晓夫以第一书记身分继续领导乌克兰共产党,一直到1949年12月在莫斯科升任党中央委员会书记。列昂尼德·梅尔尼科夫接任他的职务。在党的队伍中进行的整肃是相对温和的。然而,一场为消除西方影响而采取强硬意识形态立场的运动同刚刚恢复的俄罗斯化运动同时展开。西乌克兰的苏维埃化是一场拖延很久并充满暴力的过程。对苏军进行的武装抵抗一直延续到50年代初,它得到了当地农村居民的暗中支持。当时正在强制推行的集体化运动激怒了农民。希腊公教会也受到支持游击队及乌克兰民族主义运动的指控。在对教士进行逮捕和威吓后,,1946年3月在利沃夫举行的一次宗教会议上正式宣布希腊公教会同俄罗斯正教会「重新合并」。1949年,外喀尔巴阡地区的希腊公教会也以类似的形式被取缔。 1953年斯大林死后,赫鲁晓夫战胜他在莫斯科的一些对手对乌克兰来说特别重要。身为乌克兰共产党第一书记的赫鲁雪夫熟悉乌克兰,他任命自己信任的干部担任党的职务,同乌克兰文化界的杰出人物也十分要好。与斯大林的反乌克兰的心态形成对照的是,赫鲁雪夫对那些坚持党的路线并忠诚为苏维埃国家服务的乌克兰人没有偏见。斯大林死后不久,梅尔尼科夫被免去了乌克兰共产党第一书记的职务,理由是「背离民族政策」,特别是提升非当地干部和在西乌克兰的高等教育中实行俄罗斯化。接替他的是基里琴科(Oleksy Kyrychenko),是担任过这个职务的第二个乌克兰人。这一举动以及与此同时进行的党和政府在人事问题上的变动提高了士气和信心,因为他们的权限领域也大大加强了。1954年,全苏联举行的庆祝乌克兰同俄罗斯「重新统一」300周年纪念活动,是表明乌克兰人地位正在上升的另一迹象;值此纪念活动之际,克里米亚半岛(1944年,该地的原住民鞑靼人被全部放逐)也从俄罗斯联邦画给了乌克兰。乌克兰党的官员开始提升到接近权力杠杆的莫斯科党中央机关。1957年,基里琴科调往莫斯科,任苏联共产党中央委员会的书记。他的乌克兰共产党第一书记的职务由波德戈尔内(Nikolay Podgorny)接任。1963年,波德戈尔内也调到莫斯科任中央委员会书记。党员人数在稳步增加,到1958年底已超过100万人,其中为乌克兰人,为俄罗斯人。赫鲁晓夫还在行政管理和经济管理上实行有限的权力下放。这些措施增加了乌克兰党和政府的领袖以及官员阶层的权力,也刺激了他们的野心,这反过来又招致莫斯科对「地方主义」提出警告。早在1953年,大规模的恐怖活动已经减少,镇压也采取了更加区别对待的方式。1955~1956年的大赦释放了集中营中的大多数犯人,数十万人回到了乌克兰。在赫鲁晓夫当政的后半期,一个明显的趋势是重新出现俄罗斯化。1959年通过的教育改革计画开始了一个压缩学校中乌克兰语教学的长期过程。1961年,新党纲强调俄语在消除苏联人民的民族隔阂上的重要性,并谈到苏联各共和国之间边界的重要性正在日渐缩小。党的理论家们发展了一种「民族融合」理论,该理论认为,当苏联社会向共产主义迈进时,民族语言也将随之消失。在赫鲁晓夫当权的最后几年,有两个人物上升到重要地位,他们是谢列斯特(Petro Shelest)和谢尔比茨基(Volodymyr Shcherbytsky),乌克兰的政治舞台在他们两人的支配下,几达30年之久。两人早期均在地方党组织内从事党务工作。1961年,谢尔比茨基担任了乌克兰部长会议主席(总理)。在波德戈尔内晋升到莫斯科中央后,谢列斯特於1963年6月接替他成为乌克兰党的领袖,同时,谢尔比茨基失掉了总理职务,从此销声匿迹。 赫鲁晓夫下台后,莫斯科的权力一直由以勃列日涅夫、柯西金和波德戈尔内3人为首的集体领导所分享。直到70年代中期,勃列日涅夫才占据了突出位置。谢列斯特是波德戈尔内的门徒,在赫鲁雪夫下台后不到一个月,便当上了政治局的正式委员。然而不久后,布里兹涅夫的追随者谢尔比茨基从相对默默无闻的状态中走了出来,他於1965年重新担任了基辅的总理职务,并於1966年成了莫斯科的政治局候补委员。莫斯科的新领导迅速取消了赫鲁晓夫的许多下放权力的措施。不过,新政权起初对非俄罗斯人表示了更多的关怀。莫斯科民族政策这种表面上的让步,是同领导集团忙於继承权的斗争有关,它促进了作为乌克兰谢列斯特时代特点的3种主要趋势。这3种趋势是︰日益壮大的文化复兴,基辅政界上层人物表现的更大自信,以及大规模持不同政见运动的日益发展。文化复兴是建立在推行非斯大林化的解冻政策所取得的各项成就的基础上,虽然这些成就必然有一定限度,但也是来之不易。充当其先锋的是一批年轻的「60年代一代」,他们的成长期没有直接经受过恐怖时期的苦难,他们在主题上和形式上都进行试验,有时还激起上一代人的怒火。越来越多过去遭到禁止的人物恢复了作为学者的名誉,历史学家开始探讨先前禁止涉及的问题。有关乌克兰历史的新的杂志刊物开始出现,大型百科全书式的出版物也在著手进行。这些活动遭到党内理论家和保守的文化界领导的猛烈攻击。然而,自20年代实行乌克兰化以来,文化方面的成就是空前的。这些成就之所以能够实现,是受到党的领导层中有影响部门的支持,特别是谢列斯特本人的支持。除文化外,谢列斯特还捍卫乌克兰的经济利益,他在苏联的投资分配上努力为乌克兰争取更大的分额,并在经济管理上为共和国争取更大的控制权。这些努力在某种程度上也是为了加强党在乌克兰人心目中的合法地位。在谢列斯特任职期间,乌克兰共产党员人数增加的比例,是全联邦平均数的一倍。自50年代末和60年代初持不同政见运动开始出现以来,在谢列斯特时期继续有发展。持不同政见者所写的各种材料通过地下出版物日益广泛地流传开来,其中有的还流出国境,在外国出版。不过,整个60年代对持不同政见者采取的报复措施,一般来说还算温和。1970年初,有迹象显示,谢列斯特政权的相对宽容作风快要结束了。乌克兰的格别乌首脑被撤换。诸如「反苏活动」和「资产阶级民族主义」等刺耳的声音增加了;「伟大大的俄罗斯人民」受到赞颂。1971年,勃列日涅夫的门徒和谢列斯特的对手谢尔比茨基升任政治局的正式委员。1972年5月,谢列斯特被免去了乌克兰共产党领袖的职务,由谢尔比茨基接替他。谢列斯特继续担任了一年的政治局委员和莫斯科的副总理,但在1973年5月,他失去了党和政府的一切职务。 谢尔比茨基的提升标志著勃列日涅夫巩固在莫斯科的权力方面的重要一步,并且是乌克兰战后政治生活中的转折点。谢尔比茨基在位达和政府17年之久,直至1989年秋辞职,数星期后去世。他的庇护人早已在1982年去世,此时,戈尔巴乔夫当政。随著谢尔比茨基的上任,党和政府内的人事变动逐渐开始了,其中许多变动涉及撤换谢列斯特的支持者和提升同谢尔比茨基(也是布里兹涅夫)早期的事业基地——聂伯罗彼得罗夫斯克地区共产党组织——有关系的干部。1973~1975年的一场整肃使乌克兰共产党近5%的党员遭到开除。整个1972年到1973年,民族主义分子和人权活动分子不断遭到逮捕。随著1975年国际《赫尔辛基协定》及其人权条款的签字,乌克兰成立了一个赫尔辛基观察小组。到70年代末,其成员几乎全部被关进集中营或流亡国外,关进精神病院也成了一种新的政治迫害方法。整个70年代和80年代,乌克兰的经济运作情况一直在滑坡。增长率下降,尤其是重要的冶金工业和煤炭工业,为一些严重问题所困扰。连续数年乾旱的袭击,缺乏刺激因素,以及在集体农场管理上的过度集中,使农业生产处於十分不利的状况。苏联的能源政策越来越重视核能,而位於基辅西北车诺比的一座乌克兰核电站在1986年4月发生了一场有史以来最严重的核事故。然而,尽管自1982年以来莫斯科的领导层发生了多次变动,谢尔比茨基仍牢牢地坐在他的位子上。

赫鲁晓夫是前苏联的总统,他是一个比较偏执的人,做事情不全面没有考虑到整个国家的国情。因为当时苏联的重工业发展非常不错,但是农业发展的却很差,去美国参观了农场以后发现玉米的产量很高,所以他也大力的推广玉米,因为他觉得玉米可以平衡他们的农业。

他是一个非常执着的人,之所以沉迷于种玉米玉就是因为他想要通过玉米实现自己的梦想。来做一个专利。

一、看待赫鲁晓夫要用批判的眼光,从不同的角度来看,对于他的评价是各不相同的:

二、赫鲁晓夫执着于种玉米的原因:

基于哈夫曼算法的研究的论文

本篇将介绍 哈夫曼压缩算法(Huffman compression)

众所周知,计算机存储数据时,实际上存储的是一堆0和1(二进制)。

如果我们存储一段字符:ABRACADABRA!

那么计算机会把它们逐一翻译成二进制,如A:01000001;B: 01000010; !: 00001010.

每个字符占8个bits, 这一整段字符则至少占12*8=96 bits。

但如果我们用一些特殊的值来代表这些字符,如:

图中,0代表A; 1111代表B;等等。此时,存储这段字符只需30bits,比96bits小多了,达到了压缩的目的。

我们需要这么一个表格来把原数据翻译成特别的、占空间较少的数据。同时,我们也可以用这个表格,把特别的数据还原成原数据。

首先,为了避免翻译歧义,这个表格需满足一个条件: 任何一个字符用的值都不能是其它字符的前缀 。

我们举个反例:A: 0; B: 01;这里,A的值是B的值的前缀。如果压缩后的数据为01xxxxxx,x为0或者1,那么这个数据应该翻译成A1xxxxxx, 还是Bxxxxxxx?这样就会造成歧义。

然后,不同的表格会有不同的压缩效果,如:

这个表格的压缩效果更好。

那么我们如何找到 最好的表格 呢?这个我们稍后再讲。

为了方便阅读,这个表格是可以写成一棵树的:

这棵树的节点左边是0,右边是1。任何含有字符的节点都没有非空子节点。(即上文提及的前缀问题。)

这棵树是在压缩的过程中建成的,这个表格是在树形成后建成的。用这个表格,我们可以很简单地把一段字符变成压缩后的数据,如:

原数据:ABRACADABRA!

表格如上图。

令压缩后的数据为S;

第一个字符是A,根据表格,A:11,故S=11;

第二个字符是B,根据表格,B:00,故S=1100;

第三个字符是R,根据表格,R:011,故S=1100011;

如此类推,读完所有字符为止。

压缩搞定了,那解压呢?很简单,跟着这棵树读就行了:

压缩后的数据S=11000111101011100110001111101

记住,读到1时,往右走,读到0时,往左走。

令解压后的字符串为D;

从根节点出发,第一个数是1,往右走:

第二个数是1,往右走:

读到有字符的节点,返回此字符,加到字符串D里。D:A;

返回根节点,继续读。

第三个数是0,往左走:

第四个数是0,往左走:

读到有字符的节点,返回此字符,加到字符串D里。D:AB;

返回根节点,继续读。

第五个数是0,往左走:

第六个数是1,往右走:

第七个数是1,往右走:

读到有字符的节点,返回此字符,加到字符串D里。D:ABR;

返回根节点,继续读。

如此类推,直到读完所有压缩后的数据S为止。

压缩与解压都搞定了之后 我们需要先把原数据读一遍,并把每个字符出现的次数记录下来。如:

ABRACADABRA!中,A出现了5次;B出现了2次;C出现了1次;D出现了1次;R出现了2次;!出现了1次。

理论上,出现频率越高的字符,我们给它一个占用空间越小的值,这样,我们就可以有最佳的压缩率

由于哈夫曼压缩算法这块涉及内容较多 ,文章篇幅很长;全文全方面讲解了Compose布局的各方面知识。更多Android前言技术进阶,我自荐一套《 完整的Android的资料,以及一些视频课讲解 》 现在私信发送“进阶”或者“笔记”即可免费获取

最后我想说:

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们

技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面

Android 架构师之路还很漫长,与君共勉

手打的,你最好编译一下以免我哪里敲错了 (百度不能显示行首空格真是不爽) //哈夫曼树和~编码的存储表示 typedef struct{ unsigned int weight;//权值 unsigned int parent,lchild,rchild; }HTNode, *HuffmanTree;//动态分配数组存储哈夫曼树 typedef char * *HuffmanCode;//动态分配数组存储哈夫曼编码表 void HoffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n){ //w存放n个字符的权值(均>0),构造哈夫曼树HT,并求出n个字符的哈夫曼编码HC if (n<=1) return; m=2*n-1; HT=(HuffmanTree) malloc ((m+1)*sizeof(HTNode));//0号单元未采用 for (p=HT,i=1;i<=n;++i,++p,++w) *p={*w,0,0,0}; for (;i<=m;++i;++p) *p={0,0,0,0} for (i=n+1;i<=m;++i){//建哈夫曼树 //在HT[1..i-1]选择parent为0且weight最小的两个结点编号分别为s1,s2 Select(HT,i-1,s1,s2); HT[s1].parent=i;HT[s2].parent=i; HT[i].lchild=s1;Ht[i].rchild=s2; HT[i].weight=HT[s1].weight+HT[s2].weight; } //从叶子到根逆向求每个字符的哈夫曼编码 HC=(HuffmanCode)malloc((n+1)*sizeof(char *));//分配n个字符编码的头指针向量 cd=(char *)malloc(n*sizeof(char));//分配求编码的工作空间 cd[n-1]="\0";//编码结束符 for (i=1;i<=n;++i){//逐个字符求哈夫曼编码 start=n-1;//编码结束符位置 for (c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)//从叶子逆向向根求编码 if (HT[f].lchild==c) cd[--start]="0"; else cd[--start]="1"; HC[i]=(char *)malloc((n-start)*sizeof(char));//为第i个字符编码分配空间 strcpy(HC[i],&cd[start]);//从cd复制编码(串)到HC } free(cd);//释放工作空间 }//HuffmanCoding

typedef struct{ unsigned int weight;//权值 unsigned int parent,lchild,rchild; }HTNode, *HuffmanTree;//动态分配数组存储哈夫曼树 typedef char * *HuffmanCode;//动态分配数组存储哈夫曼编码表 void HoffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n){ //w存放n个字符的权值(均>0),构造哈夫曼树HT,并求出n个字符的哈夫曼编码HC if (n<=1) return; m=2*n-1; HT=(HuffmanTree) malloc ((m+1)*sizeof(HTNode));//0号单元未采用 for (p=HT,i=1;i<=n;++i,++p,++w) *p={*w,0,0,0}; for (;i<=m;++i;++p) *p={0,0,0,0} for (i=n+1;i<=m;++i){//建哈夫曼树 //在HT[1..i-1]选择parent为0且weight最小的两个结点编号分别为s1,s2 Select(HT,i-1,s1,s2); HT[s1].parent=i;HT[s2].parent=i; HT[i].lchild=s1;Ht[i].rchild=s2; HT[i].weight=HT[s1].weight+HT[s2].weight; } //从叶子到根逆向求每个字符的哈夫曼编码 HC=(HuffmanCode)malloc((n+1)*sizeof(char *));//分配n个字符编码的头指针向量 cd=(char *)malloc(n*sizeof(char));//分配求编码的工作空间 cd[n-1]="\0";//编码结束符 for (i=1;i<=n;++i){//逐个字符求哈夫曼编码 start=n-1;//编码结束符位置 for (c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)//从叶子逆向向根求编码 if (HT[f].lchild==c) cd[--start]="0"; else cd[--start]="1"; HC[i]=(char *)malloc((n-start)*sizeof(char));//为第i个字符编码分配空间 strcpy(HC[i],&cd[start]);//从cd复制编码(串)到HC } free(cd);//释放工作空间 }//HuffmanCoding

相关百科

热门百科

首页
发表服务