2023年哈弗曼实验报告.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2023年哈弗曼实验报告.pdf》由会员分享,可在线阅读,更多相关《2023年哈弗曼实验报告.pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、华 北 科 技 学 院 计 算 机 系 综 合 性 实 验 实 验 报 告 课 程 名 称 _数 据 结 构 _实 验 学 期 2 023 至 2023 学 年 第 _ 三 学 期 学 生 所 在 系 部 计 算 机 系 _年 级 2023级 专 业 班 级 信 管 BO8 1学 生 姓 名 X X 学 号 任 课 教 师 _实 验 成 绩 _计 算 机 系 制 数 据 结 构 课 程 综 合 性 实 验 报 告 开 课 实 验 室:基 础 一 20 2 3 年 6月 2 2 日 实 验 题 目 用 哈 弗 曼 编 码 实 现 文 献 压 缩一 实 验 目 的 1、了 解 文 献 的 概 念。
2、2、掌 握 线 性 链 表 的 插 入、删 除 等 算 法。3、掌 握 Huf f m a n树 的 概 念 及 构 造 方 法。4、掌 握 二 叉 树 的 存 储 结 构 及 遍 历 算 法。5、运 用 H u f fman树 及 H u ffman编 码,掌 握 实 现 文 献 压 缩 的 一 般 原 理 二 设 备 与 环 境 微 型 计 算 机、Wind o w s 系 列 操 作 系 统、Vi s ual C+6.0软 件 三、实 验 内 容 根 据 a s c i i码 文 献 中 各 a s c i i 字 符 出 现 的 频 率 情 况 创 建 H a f f m a n树,再
3、 将 各 字 符 相 应 的 哈 夫 曼 编 码 写 入 文 献 中,实 现 文 献 压 缩。四 实 验 结 果 及 分 析 1.重 要 结 构 图 2、重 要 函 数 功 能 F ileR e a d(in t c ou n t,ch a r s,ch a r file n a me)压 缩 文 档 存 在。对 该 文 档 进 行 读 取,求 其 所 有 出 现 的 字 符 和 字 符 的 权 值。CreateH u ffm anTre e(H Tree T,i n t N,in t c ount,c h ar s)以 求 得 该 文 档 的 字 符 和 权 值。建 立 Huffman树。H
4、u f fm a nCodin g(HTr e e T,HCode H,i nt N,c har s)求 各 个 字 符 的 H u f f m a n 编 码。File P r i nt(HTree T,HCode H,int N)求 得 Huffm a n 编 码 以 及 各 节 点 的 权 值。将 求 得 的 数 据 分 别 存 放 在 H u f fm anCode.tx t、Char,t x t、W eight,tx t 中。F i 1 e W r ite(HCode H,i nt N,c h a r file n a m e)求 得 H u f f m a n编 码 以 及 各 节
5、 点 的 权 值。将 文 档 翻 译 成 Huffm a n 编 码 以 字 符 形 式 存 放 在 F i l e,t x t中。F ileCon v e r t(v o i d)F ile.t x t 存 在。将 字 符 形 式 的 Huf f m a n编 码 翻 译 成 二 进 制 形 式,每 首 季 8 比 特 就 通 过 位 操 作 合 并 成 一 个 字 节 写 入 文 献 code.t x t 中,最 后 局 限 性 8 位 时 将 最 后 的 几 位 存 放 在 Ta i 1.t x t中。F i leRe a d(HTre e T,H Cod e H)压 缩 生 成 的 H
6、uf f m anC o de.t x t、C har,t x t、W eig h t,t x t 存 在。读 取 字 符 及 其 权 值 和 其 Huffm a n 编 码。FileE x t r ac t(void)压 缩 结 果 文 献 Co d e.t x t和 t a i l,t x t存 在。将 cod e.t x t 和 t a i l.t x t 中 的 字 符 写 成 编 码 的 二 进 制 字 符 形 式,写 进 fileOO.txt。FileT r ans(H T reeT,H C ode H,i nt N)已 生 成 Fi 1 eO O,t x t并 已 求 得 各 个
7、 字 符 的 Huf f m a n编 码,H u ffman树 已 建 立。:将 Hu f fm a n编 码 翻 译 成 原 文 献,写 入 tra n sla t ed.t x t0还 需 要 包 含 调 用 若 干 库 文 献:std i o.h,ma I Io c.h,stri n g.ho3、实 验 环 节 进 入 主 界 面输 出 编 码-回 XC h a i*a c t e r l n Chat*.t x tC h a i*a ctei*W e ig h t In*W e ig h t.t x t,H u ffm an C ode In*H u f f n a n C o d
8、e.t x tC ode F i l e In*C o d e.t x t,T a i l F i l e In(39 MC:Documents and SettingsAdministratorffiDebugflH.exeM1234请 输 入 选 项(0 4):马 Tfl扁 曼 弗 缩 压 出 哈 压 矍 运 营 完 毕 解 决 结 果 如 下:该 文 本 文 献 保 存 的 是 测 试 文 献 中 出 现 的 字 符 以 及 相 应 的 权 值/Char.txt-记 事 本 IT 回 文 件(E)编 辑(E)格 式 9)查 看 也)帮 助(H)abcdefghjnrsuxz字 母 相 应
9、 的 权 值,保 存 在 Wei g ht.t xt,Weight.txt-记 事 本&回 文 件(E)编 辑(E)格 式 查 看(Y)帮 助(H)139435554512233测 试 文 献 p p.t x t,P P.tx t-记 事 本 回 文 件(E)编 辑 格 式 9)查 看(y)帮 助 出)bhjjnhnggdusdcaesrzccxfdFgcuxczeeczbhjcFgFhxcdfgnjhnnbc 编 码 压 缩 以 后 保 存 在 c ode文 本 文 献 里,Code.txt-记 事 本 1=1旧 文 件(f)编 辑 也)格 式(Q)查 看 也)帮 助 世)QTAJ清“遂 燥
10、?hQ 轮 4 I-相 应 字 符 哈 夫 曼 编 码B HuffmanCode.txt-记 事 本 回 M 3-文 件(E)编 辑 格 式 9)查 看(Y)帮 助(H)|0100001 011101001011011101111000101000101001101101011101111000压 缩 文 献 国 C:Documentsand SettingsAdministrato八 桌 面 Debug哈 弗 曼.exe”-|n|x|CharacterIn,Char.txt*Charac t e rWe ight In 9 Weight-txtjHuffman Code In 9Huffna
11、nCode.txt*Code File In 9 Code.txt,Tail File In 9 Tail.txtJ凶 Z J曼 弗 缩 压 出 哈 压 解 退 1234请 输 入 选 项(。4):根 据 huffma n 编 码 解 压 后 的 结 果 保 存 在 Tr a n s I ated File.txt里 面 Translated File.txt-记 事 本 文 件(E)编 辑(E)格 式 9)查 看(V)帮 助 坦)(jnbaznggdusdcaesrzccxfdfgcuxczeeczbhjcFgfhxcdfgnjhnnbc4、重 要 思 想 生 成 Huf f man树 函
12、数 选 取 字 符 中 权 值 最 小 的 两 个 节 点 建 树,将 权 值 相 加 放 在 根 节 点 中,将 原 节 点 删 除,新 节 点 放 入 数 组。递 归 进 行 上 述 操 作 直 到 数 组 中 只 有 一 个 节 点 为 止。算 法 如 下:2、建 立 哈 夫 曼 树 构 造 哈 夫 曼 数 时,一 方 面 将 n 个 权 值 的 叶 子 结 点 存 放 到 数 组 h u f fTree2*num的 前 n个 分 量 中,然 后 不 断 的 将 两 棵 子 树 合 并 为 一 棵 子 树,并 将 新 子 树 的 根 结 点 顺 序 存 放 到 数 组 h u ffT r
13、 ee2*n u m 的 前 n 个 分 量 的 后 面。设 n个 叶 子 的 权 值 保 存 在 数 组 c n t n 中,哈 夫 曼 树 的 存 储 重 要 是 运 用 数 组 存 储 伪 代 码 描 述 为:,1.数 组 哈 夫 曼 树 Huffm a nTree初 始 化,所 有 元 素 结 点 的 双 亲、左 右 孩 子 都 置 为 0;,2.数 组 哈 夫 曼 树 HuffmanT r e e 的 前 n个 元 素 的 权 值 给 定 权 值 cntn;3.进 行 n-1次 合 并 c.l、在 二 叉 树 集 合 中 选 取 两 个 权 值 最 小 的 根 结 点,其 下 标 分
14、 别 为 i 1和 i2;c.2、将 二 叉 树 i l 和 i 2合 并 为 一 棵 新 的 二 叉 树对 每 个 叶 子 结 点 进 行 编 码:a.1初 始 化 编 码 深 度 为 0,将 孩 子 结 点 的 双 亲 结 点 付 给 一 个 变 量,双 亲 结 点 不 为 空 时,深 度 加 1,继 续 向 上 查 找,这 时 该 双 亲 结 点 已 变 成 孩 子 结 点,循 环 知 道 双 亲 结 点 为 空,求 出 每 一 个 叶 子 结 点 的 深 度。a.2将 编 码 初 始 结 点 初 始 化 为 深 度+1,将 孩 子 结 点 的 双 亲 结 点 付 给 一 个 变 量,双
15、 亲 结 点 不 为 空 时,初 始 结 点-1,假 如 此 孩 子 为 双 亲 的 左 孩 子,则 置 为 0,否 则 置 为 循 环 知 道 双 亲 结 点 为 空。编 码 完 毕 压 缩 部 分:重 要 思 想 为:对 字 符 窜 编 码 的 解 码 是 将 编 码 窜 从 左 到 右 逐 为 判 别,直 到 拟 定 一 个 字 符。这 可 以 用 生 成 哈 夫 曼 的 逆 过 程 实 现。从 根 结 点 开 始,根 据 每 一 位 的 值 是 0 还 是 1拟 定 选 择 左 分 支 还 是 右 分 支,直 到 到 达 一 个 叶 子 结 点,然 后 再 从 根 结 点 出 发,开
16、始 下 一 个 字 符 的 翻 译。如 根 据 上 面 的(a)哈 夫 曼 编 码 树 对 生 成 的(b)字 符 编 码 表 进 行 解 码,从 根 结 点 开 始,由 于 第 一 位 是 1,所 以 选 择 右 分 支,下 一 位 又 是 1,又 选 择 右 分 支,到 达 叶 子 结 点 相 应 的 字 符 a。再 从 根 结 点 出 发,下 一 位 是 0,选 择 左 分 支,再 下 一 位 是 1,则 选 择 右 分 支,再 下 一 结 点 为 0,选 择 左 分 支,到 达 叶 子 结 点 相 应 的 字 符 c,同 理,知 道 所 有 的 字 符 都 被 解 出 伪 代 码 如
17、下:创 建 新 的 文 本 文 档 b、读 取 压 缩 的 二 进 制 文 献:按 照 编 码 的 先 后 顺 序 进 行 读 取 编 码,当 文 献 没 结 束 时,读 取 编 码,从 根 结 点 开 始,假 如 此 结 点 有 子 结 点,假 如 读 取 的 编 码 为 0 并 且 是 根 结 点 的 左 孩 子,则 将 此 左 孩 子 置 为 根 结 点,假 如 读 取 的 编 码 为 1并 且 是 根 结 点 的 右 孩 子,则 将 此 右 孩 子 置 为 根 结 点,否 则 的 话 说 明 已 有 一 个 字 符 和 编 码 相 应 了,输 出,再 从 根 结 点 开 始,反 复 上
18、 述 过 程,知 道 读 取 的 文 献 为 空,解 码 完 毕。c、关 闭 文 献 源 代 码#include#i n clude#i n c I u d e#d efine MAX_S I ZE 10000 OO#d e f i n e n 1 5 0#define m 2*n1/-H u f fman 树 存 储 2吉 构 一-typ e def s t ruct(c h ar ch;int weigh t;in t Ichi I d,rchild,p arent;H u ffm anT r e e;t ypedef HuffmanTr e e H Treem;/-Huffman 编 码
19、 存 储 结 构-一 t ypedef stru c t(i n t s t art;char ch;c h ar bi t sn+l;H uffmanC o de;ty p edef H u ffmanCode HCod e n;/-一-读 文 献 一-一-int FileRea d(i nt c o u n t,c h ar s El,c h a r fi I e n ame)(int i=0,N=O,k=O,tempfn;ch a r c;F I LE*rf;r f=fopen(filename,rn);i f(rf=NULL)(p rintf(ca n n o t open f i 1
20、 e n n);exi t(0);)for(i=0;i n;i+)(t em p i=0;counti=0;wh i le(!feo f(r f)c=fgetc(rf);k=c;tempfk+;i+;f c lo s e(rf);for(i=0;i n;i+)if(t emp i!=0)(s N=i;countfN=temp i;N+;re t urn N;/F i l e R e a d/.-生 成 哈 弗 曼 树 函 数-void Creat e H u ff m anTree(HTre e T,i n t N,int count E,chars)i nt i,J,p l=O,p 2=0,
21、11,I 2;for(i=0;i2*N 1;i+)(T i.lchild=O;T i.rchild=O;Ti.pa r ent=O;f or(i=0;i N;i+)Ti.weig h t=co u n t E i;fo r(i=N;i2*N-l;i+)(11=12=10 0 0000;f or(j=0;ji;j+)(i f(T j.pa r e n t=0)(i f(Tj.we i g h t I 1)(I l=Tj.w e ight,p 1=j;)f o r(J=O;ji;j+)(if(Tj.pa r e n t=0)(if(T J.weigh t 12)&(j!=p 1)(12=T J.w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 年哈弗曼 实验 报告
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内