2004《数据结构》课程设计题目及基本要求如下:

合集下载

数据结构的课程设计

数据结构的课程设计

数据结构的课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点与应用场景。

2. 学会分析不同数据结构的存储方式和操作方法,并能运用到实际问题的解决中。

3. 掌握排序和查找算法的基本原理,了解其时间复杂度和空间复杂度。

技能目标:1. 能够运用所学数据结构知识,解决实际问题,提高编程能力。

2. 能够运用排序和查找算法,优化程序性能,提高解决问题的效率。

3. 能够运用数据结构知识,分析并解决复杂问题,培养逻辑思维能力和创新意识。

情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学习热情,形成主动探索和积极进取的学习态度。

2. 增强学生的团队协作意识,培养合作解决问题的能力,提高沟通表达能力。

3. 培养学生的抽象思维能力,使其认识到数据结构在计算机科学中的重要性,激发对计算机科学的热爱。

本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合,培养学生的编程能力和逻辑思维能力。

通过本课程的学习,使学生能够掌握数据结构的基本知识,提高解决实际问题的能力,同时培养良好的学习态度和价值观。

在教学过程中,将目标分解为具体的学习成果,以便进行后续的教学设计和评估。

二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,重点讲解线性结构(线性表、栈、队列)和非线性结构(树、图)的特点。

2. 线性表:讲解线性表的顺序存储和链式存储结构,以及相关操作(插入、删除、查找等)。

3. 栈和队列:介绍栈和队列的应用场景、存储结构及相关操作。

4. 树和二叉树:讲解树的定义、性质、存储结构,二叉树的遍历算法及线索二叉树。

5. 图:介绍图的定义、存储结构(邻接矩阵和邻接表)、图的遍历算法(深度优先搜索和广度优先搜索)。

6. 排序算法:讲解常见排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理、实现及性能分析。

7. 查找算法:介绍线性查找、二分查找等查找算法的原理及实现。

数据结构课程设计题目

数据结构课程设计题目

数据结构课程设计题目一、题目背景在现代科技发展的背景下,数据结构作为计算机科学的重要基础课程,对于培养学生的编程思维、数据处理能力具有重要的作用。

本篇课程设计将围绕数据结构的实际应用,设计一个能够提升学生数据结构理论与实践能力的题目。

二、题目描述你需要设计一个软件,实现以下功能:能够记录学生信息并进行相关的数据操作。

具体要求如下:1. 学生信息包括:学生学号、姓名、性别、年龄、身高、体重等基本信息;2. 软件需要实现以下操作:a. 添加学生信息:可以手动添加每个学生的详细信息,并将其记录到数据库中;b. 删除学生信息:能够根据学号或姓名删除指定学生的信息;c. 修改学生信息:能够根据学号或姓名修改指定学生的信息;d. 查询学生信息:能够按照学号、姓名、性别、年龄等条件进行学生信息的查询,并将结果以列表形式展示;e. 统计学生信息:能够统计学生的平均年龄、平均身高、平均体重等统计数据,并展示在界面上;f. 数据导入导出:能够将学生信息导入/导出到文件或数据库中,实现数据的持久化存储。

三、设计思路为了实现上述功能,你可以采用以下的设计思路:1. 数据结构选择:可以使用链表、数组、树等数据结构存储学生信息,具体根据功能需求来选择合适的数据结构;2. 界面设计:考虑采用图形界面或者命令行界面,以提供方便的操作方式;3. 数据存储:可以使用文件、数据库等方式进行数据的存储和读取,以实现数据的持久化;4. 算法设计:在实现功能的过程中,需要考虑合适的算法来实现快速的查找、删除和修改等操作;5. 错误处理:在设计过程中,需要考虑各种可能的错误情况,并进行相应的处理和提示。

四、实施步骤为了顺利完成该课程设计,你可以按照以下步骤进行:1. 分析题目需求:仔细阅读以上题目描述,明确实现各项功能的具体要求;2. 设计数据结构:选择合适的数据结构来存储学生信息,考虑数据的增删改查等操作的效率;3. 设计算法:根据功能需求,设计相应的算法来实现各项操作;4. 实现界面:根据选择的界面方式,设计相应的图形界面或命令行交互界面;5. 实现功能:按照题目要求,逐个实现各项功能,并进行测试;6. 完善细节:对界面进行美化,完善用户交互体验,处理各种错误情况;7. 测试与调试:对整个软件进行全面的测试,并进行调试修复可能存在的问题;8. 编写报告:撰写课程设计报告,详细记录设计过程、实现方法、遇到的问题以及解决方案等。

中南大学《数据结构》课程设计题目及要求

中南大学《数据结构》课程设计题目及要求

《数据结构》课程设计指导书(一):设计目的:1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4)进行全面综合的训练,对课堂教学、实验等环节的有益补充。

5)提高解决实际问题和培养软件工作所需的动手能力。

6)深化理解和灵活掌握教学内容7)进行软件工程的综合训练。

训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

(二):设计要求:1) 学生必须仔细阅读《数据结构》课程设计方案,认真主动完成课设的要求。

有问题及时主动通过各种方式与教师联系沟通。

2) 学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时向教师汇报。

3) 课程设计按照教学要求需要两周时间完成,两周中每天(按每周5天)至少要上3-4小时的机来调试C/C++语言/JAVA设计的程序,总共至少要上机调试程序30小时4) 课程设计题目如下,题后有要求的按要求完成,没有要求的至少从中选择并完成二个题目。

5) 设计期间,要求严格遵守学校规章制度和实验室管理制度。

6) 按指定时间上机,服从指导教师和实验室其他老师的安排。

7) 上机前,应编写相应的程序,禁止无准备的上机。

(三):课程设计题目:一、试设计一个航空客运订票系统。

基本要求如下:1、每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。

2、系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。

数据结构课设

数据结构课设

数据结构课设数据结构是计算机科学中非常重要的一门课程,它研究各种数据的组织方式和处理方法。

在数据结构课中,学生通常需要完成一个课程设计,以巩固所学知识并增强实践能力。

本文将介绍数据结构课设的一般要求和常见的设计方案。

一、课设要求1. 问题定义:课设通常会给出一个具体的问题或需求,要求学生使用数据结构的知识和算法来解决。

2. 设计思路:学生需要提供一个清晰的设计思路,包括问题的分析、解决方案的选择、数据结构的设计和算法的实现等。

3. 数据结构的选择:学生需要根据问题的性质和要求选择合适的数据结构,如数组、链表、栈、队列、树等。

4. 算法的实现:学生需要实现相应的算法来解决问题,包括数据的插入、删除、查找等操作。

5. 性能分析:学生需要对设计的数据结构和算法进行性能分析,评估其时间复杂度和空间复杂度,并根据分析结果进行优化。

6. 测试与验证:学生需要设计充分的测试用例来验证程序的正确性和性能,确保解决方案的可行性和有效性。

二、设计方案1. 数组:数组是一种线性数据结构,可用于存储一组相同类型的数据。

在课设中,可以使用数组来实现各种结构和算法,如栈、队列、图等。

2. 链表:链表是一种动态数据结构,可用于解决插入和删除操作频繁的问题。

课设中的链表设计可以包括单链表、双链表、循环链表等。

3. 栈和队列:栈和队列是两种常用的数据结构,栈是一种后进先出(LIFO)的数据结构,队列是一种先进先出(FIFO)的数据结构。

可以利用栈和队列解决许多实际问题。

4. 树:树是一种非线性数据结构,具有分层和层次结构。

可以使用二叉树、红黑树、AVL树等来解决与树相关的问题,如查找、排序、遍历等。

5. 图:图是一种复杂的数据结构,用于表示各种实际问题中的关系和连接。

可以使用邻接矩阵或邻接表来表示图,并利用图的各种算法解决相关问题。

6. 其他数据结构:除了上述常见的数据结构,还有许多其他数据结构可以应用于数据结构课设,如哈希表、堆、并查集等。

数据结构课程设计题目及要求样本

数据结构课程设计题目及要求样本

《数据结构》课程设计目录一、课程设计要求 (2)1.分组设计 (2)2.题目选择 (2)3.考核标准 (2)4.提交材料 (2)5.考核等级 (3)二、课程设计报告(见附件2) (3)三、课程设计题目: (3)(一)课程设计1 (3)1. joseph环 (3)2. 文章编辑 (4)3. 学生成绩管理系统 (5)4. 一元稀疏多项式计算器 (6)5. 表达式求值 (6)6.运动会分数统计 (7)7.宿舍管理查询软件 (9)8.校园导游咨询 (9)9.哈夫曼编/译码器 (10)10.建立通信网络 (12)11. 考试报名管理 (12)12. 停车场管理 (13)项目简介 (13)13.图书管理信息系统的设计与实现。

(13)附件1:分组登记表 (15)附件2:实训报告一、课程设计要求1.分组设计按小组方式进行组织设计, 小组成员为3~4人, 班级内自由组合, 并确定小组组长, 分组名单汇总到曹钿鹏和韩滨龙, 最后交给老师。

2.题目选择每个小组选择1个题目设计完成, 组与组之间题目能够相同可是方法不同, 并完成实训报告。

3.考核标准总的要求: 组内每位同学, 一起协商承担的任务, 每人都要参与设计和编程工作。

评分组成:1) 组长对组内成员学习态度和承担设计任务的评价;2) 课程设计完成的效果, 必要时会采用现场演示和答辩的方式;3) 课程设计实训报告的撰写质量;4.提交材料每位同学依据所在小组选择的课程设计题, 独立撰写课程设计实训报告, 不允许相互间抄袭, 否则均以零分计算。

提交材料: 课程设计报告, 程序代码: ( 建议按如下形式打包)文件夹以”组号.rar”提交, 里面每位同学包含两个文件夹: ”实训报告”和”源代码”。

”实训报告”文件夹中是本组成员的实训报告。

备注: 小组长将本组得设计报告收齐, 以组为单位打包交给曹钿鹏和韩滨龙, 两人最后汇总提交到邮箱: 。

5.考核等级评分标准: 等级制( 优秀、良好、中等、及格、不及格)二、课程设计报告( 见附件2)三、课程设计题目:( 一) 课程设计11.joseph环【问题描述】编号是1, 2, ……,n的n个人按照顺时针方向围坐一圈, 每个人只有一个密码( 正整数) 。

《数据结构》课程设计题目及要求

《数据结构》课程设计题目及要求

《数据结构》课程设计题目及要求一、数据结构课程设计要求1.学生必须仔细阅读《数据结构》课程设计方案,认真主动完成课设的要求。

有问题及时主动通过各种方式与教师联系沟通。

2.学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时向教师汇报。

3.课程设计按照教学要求需要两周时间完成,两周中每天至少要上2小时的上机来调试C或C++语言设计的程序。

学院安排上机时间学生不得缺席。

二、上交相关内容要求上交的成果的内容必须由以下四个部分组成,缺一不可1.上交源程序:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中);2.上交程序的说明文件:(保存在.txt中)在说明文档中应该写明上交程序所在的目录,上交程序的主程序文件名,如果需要安装,要有程序的安装使用说明;3.课程设计报告:(保存在word 文档中,文件名要求按照"姓名-学号-课程设计报告题目"起名,如文件名为"张三-001-二叉树动态演示".doc )按照课程设计的具体要求建立的功能模块,每个模块要求按照如下几个内容认真完成;其中包括:a)需求分析:在该部分中叙述,每个模块的功能要求。

b)概要设计在此说明每个部分的算法设计说明(可以是描述每一个算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义。

c)详细设计各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)源程序要按照写程序的规则来编写。

要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。

d)调试分析测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。

e) 总结:总结可以包括: 课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容。

数据结构课程设计要求

数据结构课程设计要求

一、课程设计的步骤 数据结构课程设计就是综合运用本课程所学到的知识来解决实际问题。

计算机解决一个具体问题一般需要经过下列几个步骤: 首先要从该具体问题抽象出一个适当的数学模型; 然后设计或选择一个解此数学模型的算法; 最后编出程序进行调试、测试,直至得到最终的解答。

课程设计也是按照这个步骤进行,下面介绍各阶段的内容。

1. 建立模型 建立模型通常包括所描述问题中的数据对象及其关系的描述、问题求解的要求及方法等方面。

将一个具体的问题转换为我们所熟悉的模型,就可以很容易进行求解。

《数据结构》课程中所介绍的各种结构也是数学模型。

数学模型的建立是求解实际问题的基础。

正确选择数学模型是解决问题的关键,这就要求我们具有扎实的数学基础,同时熟练地掌握数据结构所介绍的线性表、队列与栈、广义表、树和图等各种结构(模型)的存储方法和操作算法。

2. 选择合适的存储结构 在构造出求解算法之后,就需要考虑如何在计算机上实现。

从算法到程序还是有一定距离的。

为此,需要做两方面的工作,其一是选择合适的存储结构,其二是用指定的计算机语言来描述算法。

下面先讨论第一个方面,即选择存储结构的问题。

选择合适的存储结构首先是为了将问题所涉及到的数据(包括数据中的基本对象及对象之间的关系)存储到计算机中。

此外,还需要考虑所选择的结构是否便于问题的求解,时间和空间复杂度是否符合要求。

在实际应用时,需根据问题的要求进行合理的选择及综合。

不同的存储形式对问题的求解实现有较大的影响,所占用的存储空间也可能有较大的差异。

3. 构造求解算法 在建立好模型之后,一个具体的问题就变成了一个用模型所描述的抽象的问题。

借助于这一模型以及已有的知识(例如数据结构中的基本知识),我们可以相对容易地描述出原问题的求解方法即算法。

从某种意义上说,该算法不仅能实现原问题的求解,而且还能实现许多类似的具体问题的求解,尽管这些具体问题的背景及其描述形式可能存在较大的差异。

《数据结构》课程设计

《数据结构》课程设计

《数据结构》课程设计一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中基础的数据组织、管理和处理方法,培养其运用数据结构解决实际问题的能力。

课程目标如下:1. 知识目标:(1)理解基本数据结构的概念、原理和应用,如线性表、栈、队列、树、图等;(2)掌握常见算法的设计和分析方法,如排序、查找、递归、贪心、分治等;(3)了解数据结构在实际应用中的使用,如操作系统、数据库、编译器等。

2. 技能目标:(1)能够运用所学数据结构解决实际问题,具备良好的编程实践能力;(2)掌握算法分析方法,能够评价算法优劣,进行算法优化;(3)能够运用数据结构进行问题建模,提高问题解决效率。

3. 情感态度价值观目标:(1)激发学生对计算机科学的兴趣,培养其探索精神和创新意识;(2)培养学生团队合作意识,学会与他人共同解决问题;(3)增强学生的责任感和使命感,使其认识到数据结构在信息技术发展中的重要性。

本课程针对高中年级学生,结合学科特点和教学要求,将目标分解为具体的学习成果,为后续教学设计和评估提供依据。

课程注重理论与实践相结合,旨在提高学生的知识水平、技能素养和情感态度价值观。

二、教学内容《数据结构》教学内容依据课程目标进行选择和组织,确保科学性和系统性。

主要包括以下部分:1. 线性表:- 线性表的定义、特点和基本操作;- 顺序存储结构、链式存储结构及其应用;- 线性表的相关算法,如插入、删除、查找等。

2. 栈和队列:- 栈和队列的定义、特点及基本操作;- 栈和队列的存储结构及其应用;- 栈和队列相关算法,如进制转换、括号匹配等。

3. 树和二叉树:- 树的定义、基本术语和性质;- 二叉树的定义、性质、存储结构及遍历算法;- 线索二叉树、哈夫曼树及其应用。

4. 图:- 图的定义、基本术语和存储结构;- 图的遍历算法,如深度优先搜索、广度优先搜索;- 最短路径、最小生成树等算法。

5. 排序和查找:- 常见排序算法,如冒泡、选择、插入、快速等;- 常见查找算法,如顺序、二分、哈希等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2004《数据结构》课程设计题目及基本要求如下:一、试设计一个航空客运定票系统。

基本要求如下:1、每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。

2、系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。

若需要,可登记排队候补;3)承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。

3、实现提示:两个客户名单可分别由线性表和队列实现。

为查找方便,已订票客户的线性表应按客户姓名有序,并且,为了插入和删除方便,应以链表作为存储结构。

由于预约人数无法预计,队列也应以链表作为存储结构。

二、校园导游咨询(为来访的客人提供各种信息服务)1、基本要求:1)设计下沙校园平面图,在校园景点选10个左右景点。

以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等有关信息。

2)为来访客人提供图中任意景点相关信息的查询。

3)为来访客人提供任意景点的问路查询,即查询任意两个景点之间的一条最短路径。

2、实现提示:一般情况下,校园的道路是双向通行的,可设计校园平面图是一个无向网。

顶点和边均含有相关信息。

三、停车场管理问题[问题描述]设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。

车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。

如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。

停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。

每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。

如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。

编制一程序模拟该停车场的管理。

[实现要求]要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。

[实现提示]汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。

例如,(‘A’,,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,,5,20)表示5号牌照车在20这个时刻离去。

整个程序可以在输入信息为(‘E’,0,0)时结束。

本题可用栈和队列来实现。

四、全国交通咨询模拟【问题描述】处于对不同目的的旅客对交通工具有不同的要求。

例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。

编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。

【基本要求】(1)提供对城市信息进行编辑(如:添加或删除)的功能。

(2)城市之间有两种交通工具:火车和飞机。

提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。

(3)提供两种最优决策:最快到达或最省钱到达。

全程只考虑一种交通工具。

(4)旅途中耗费的总时间应该包括中转站的等候时间。

(5)咨询以用户和计算机的对话方式进行。

由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。

【实现提示】(1)对全国城市交通图和班车时刻表及飞机航班表的编辑,应该提供文件形式输入和键盘输入两种方式。

飞机航班表的信息应包括:起始站的出发时间、终点站的到达时间和票价;列车时刻表则需根据交通图给出各个路段的详细信息,例如:对于从北京到上海的火车,需给出北京至天津、天津至徐州及徐州至各段的出发时间、到达时间和票价信息。

(2)以邻接表作交通图的存储结构,表示边的结点内除含有邻接点的信息外,包括交通工具、路程中消耗的时间和花费以及出发和到达的时间等多项属性。

五、压缩器/解压器【问题描述】为了节省存储空间,常常需要把文本文件采用压缩编码的方式储存。

例如:一个包含1000个x的字符串和2000个y的字符串的文本文件在不压缩时占用的空间为3002字节(每个x或每个y占用一个字节,两个字节用来表示串的结尾)。

同样是这个文件,采用游程长度编码(run-length coding),可以存储为字符串1000x2000y,仅为10个字母,占用12个字节。

若采用二进制表示游程长度(1000和2000)可以进一步节约空间。

如果每个游程长度占用2个字节,则可以表示的最大游程长度为2*pow(16),这样,上例中的字符串只需要用8个字节来存储。

当要读取编码文件时,需要对其进行解码。

由压缩器(compressor)对文件进行编码,由解压器(decompressor)进行解码。

①(1)长度-游程编码的压缩/解压;+(2)LZW压缩/解压(散列);②(1)长度-游程编码的压缩/解压;+(3)霍夫曼编码压缩/解压(霍夫曼树) 【基本要求】要求选用二种压缩/解压策略实现压缩/解压器[(1)为必选]。

输入的为本文文件(.txt),输出的为一种自定义的文件(.nz)。

考虑当构成文本的字符集合为{a,b,c,……,z,0,1,2,…9}时,请用实例测试你的压缩/解压器。

你的压缩器会不会出现抖动?(压缩后的文本比原来的还要大)。

扩充构成文本的字符集合以便使它适应更一般的情况。

【实现提示】LZW:由Lempel、Ziv和Welch这三位科学家所开发的技术。

该方法把文本的字符串映射为编码,首先,为该文本中所有可能出现的字母分别分配一个代码。

例如:要压缩的对象是aaabbbbbbbaabaaba,由a和b组成。

为a分配代码0,为b 分配代码1。

字符串和编码的关系被存储在字典中。

其相应的代码。

若输入文件的下一个字符为c,则为pc分配下一个代码,并插入字典,这种策略称为LZW规则。

相反,在解压时,编码表由压缩文件重新构造,LZW原则使这种重建成为可能。

如上例子,压缩时,文件中第一个在字典中出现的最长前缀是a, 输出其编码0,然后为字符串aa分配代码2,并插入到字典中。

余下的字符串在字典中出现的最长前缀是aa,输出aa的对应代码2,同时为字符串aab分配代码3并将其插入到字典中。

依次类推,由此,输出解压时,要输入代码,然后用代码所表示的文本来替换这些代码。

代码到文本的映射可按下面的方法重建:首先把分配给单一字母的代码插入到字典中。

象前面一样,字典的入口为key-code对。

然而此时是根据给定的代码(key)去寻找相应的入口(而不是根据文本Code)。

压缩文件中的第一个代码对应于单一的字母,因此可以由该字母代替。

对于压缩文件中的其他代码p,要考虑两种情况:1)在字典中;2)不在字典中。

在1)情况下,找到p对应的文本text(p)输出。

并且,根据压缩原理可知,若在压缩文件中代码q写在p之前且text(q)是与q对应的文本,则压缩器会为文本text(q)(其后紧跟fc(p),text(p)的第一个字符)分配一新代码。

因此在字典中插入序偶(下一个代码,text(q)fc(p))。

情况2)时,只有在当前文本段形如text(q)text(q)fc(q)且text(p)=text(q)fc(q)时才会发生。

相应的压缩文件段是qp。

在压缩过程中,为text(q)fc(q)分配的代码为p。

在解压过程中,在用text(q)代替q后,又遇到代码p。

然而,此时字典中没有与p对应的文本。

因为这种情况只在解压文本段为text(p)text(q)fc(q)时才发生,因此可以对p解码。

当遇到一个没有定义代码文本对的代码p时,p对应的文本为text(q)fc(q),其中q为p前面的代码。

如上例子:首先,初始化字典,在其中插入(0,a),(1,b)。

压缩的第一个代码为0,则用a代替之。

下一个代码2未定义,因为前一个代码为0,且text(0)=a,fc(0)=a,则text(2)=text(0)fc(0)=aa。

因此用aa代替2,并把(2,aa)插入字典中。

下个代码1由b 来替换,并把(3,text(2)fc(1))=(3,aab)插入字典中。

依次类推,得解压结果。

霍夫曼编码:根据不同符号在文本中出现的不同的频率来进行压缩编码。

假设文本是由a,u,x,z组成的字符串,若这个字符串的长度为1000,每个字符用一个字节来存储,共需1000个字节(即8000位)的空间。

如果每个字符用2位二进制来编码(00=a,01=x,10=u,11=z),则用2000位二进制即可以表示1000个字符。

此外,还需要一定的空间来存放编码表,可以采用如下格式来存储:符号个数:代码1,符号1,代码2,符号2,……符号个数及每个符号分别用8位二进制来表示,每个代码需要占用[log2(符号个数)]位二进制。

因此,上例中,代码表需占用5*8+4*2=48位,压缩比为8000/2048=3.9 。

利用这种编码方法,字符串aaxuaxz的压缩码为二进制串111,每个字符的编码具有相同的位数(两位)。

从左到右依次从位串中取出两位,通过查编码表边可以获得原字符串,这是解压缩过程。

我们利用霍夫曼编码来实现压缩,必须:1)必须获得不同字符的频率。

2)建立具有最小加权外部路径的二叉数(即霍夫曼树),树的外部结点用字符串中的字符表示,外部结点的权重(weight)即为该字符出现的频率。

3)遍历从根到外部结点的路径得到每个字符的编码。

4)使用字符的编码来代替字符串中的字符。

为了方便解码,需要保存字符代码映射表或每个字符的频率表(在保存信息为频率表的情况下,解码需要重构霍夫曼数以获得相应的编码表)。

构造霍夫曼树:首先从仅含一个外部结点的二叉树集合开始,每个外部结点代表字符串的一个不同的字符,其权重等于该字符的频率。

此后不断的从集合中选择两棵具有最小权重的二叉树,并把它们合并成一棵新的二叉树,合并方法是把这两棵二叉树分别作为左右子树,然后增加一个新的根结点。

新二叉树的权重为两棵子树的权重之和。

这个过程一直可以持续到仅剩下一棵树为止。

[二叉树的集合可以使用有序表/优先队列(基于队列/基于堆)实现]。

相关文档
最新文档