数据结构与算法设计的关系
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构与算法设计的关系
学号:2009221104220066 姓名:曹丹专业:09软工
摘要:分别介绍数据结构和算法设计所研究的内容,以及数据结构和算法设计的区别和联系,最后举例说明。
关键字:数据结构算法设计
正文:
一、数据结构研究的内容
数据结构是指数据以及相互之间的联系,可以看做是相互之间存在着某种特定关系的数据元素的集合,因此,可以把数据结构看成是带结构的数据元素的集合。主要包括以下几个方面:
(1)数据元素之间的逻辑关系,即数据的逻辑结构。
(2)数据元素及其关系在计算机存储器中的存储方式,即数据的存储结构,也称为数据的物理结构。
(3)施加在该数据上的运算,即数据的运算。
数据的逻辑结构包括:集合、线性结构、树形结构、图形结构等;存储结构包括:顺序存储结构、链式存储结构、索引存储结构、哈希(散列)存储结构等。
二、算法设计的研究内容
算法设计作为用计算机解决问题的一个步骤,其任务是对各类具体问题设计出良好的算法。算法设计作为一门课程,是研究设计算法的规律和方法。
算法是指在解决问题时按照某种机械步骤一定可以得到问题的
结果(有解时给出解,无解时给出无解的结论)的处理过程。简言之,算法就是计算机解决问题的步骤。当面临某个问题时,需要找到用计算机解决这个问题的方法和步骤,算法就是解决这个问题的方法和步骤的描述。所谓机械步骤是指,算法中有待执行的运算和操作,必须是相当基本的。换言之,他们都是能够精确地被计算机运行的算法,计算机甚至不需要掌握算法的含义,即可根据该算法的每一步骤要求,进行操作并最终得出正确的结果。
算法由操作、控制结构、数据结构3要素构成。
算法分析的主要任务是对设计出的每一个具体的算法,利用数学工具,讨论其复杂度。对算法的分析一方面能深刻地理解问题的本质以及可能的求解技术,另一方面可以探讨某种具体算法实用于哪类问题,或某类问题宜采用哪种算法。算法分析就是研究算法从而达到优化计算机解决问题的效率的目的。
对算法的分析和评价,一般应考虑正确性、可读性、稳健性、高效率与低存储量需求等诸多因素。其中评价算法的3条主要标准是:(1)算法实现所耗费的时间;
(2)算法实现所好费的存储空间,其中主要考虑辅助存储空间;(3)算法应易于理解,易于编码,易于调试等。
其中时间复杂度是评价算法优劣的一条最重要的标准。
三、数据结构与算法设计的关系
算法设计的实质是对实际问题要处理的数据选择一种恰当的存储结构,并在选定的存储结构上设计一个好的算法,实现对数据的处
理。算法中的操作是以确定的存储结构为前提的,所以,在算法设计中选择好数据结构是非常重要的,选择了数据结构,算法才随之确定,好的算法在很大程度上取决于问题中数据所采用的数据结构。
(1)数据结构与算法的联系:
程序=算法+数据结构。数据结构是算法实现的基础,算法总是要依赖于某种数据结构来实现的。往往是在发展一种算法的时候,构建了适合于这种算法的数据结构。
算法的操作对象是数据结构。算法的设计和选择要同时结合数据结构,简单地说数据结构的设计就是选择存储方式,如确定问题中的信息是用数组存储还是用普通的变量存储或其他更加复杂的数据结构。算法设计的实质就是对实际问题要处理的数据选择一种恰当的存储结构,并在选定的存储结构上设计一个好的算法。不同的数据结构的设计将导致差异很大的算法。数据结构是算法设计的基础。用一个形象的比喻来解释:开采煤矿过程中,煤矿以各种形式深埋于地下。矿体的结构就像相当于计算机领域的数据结构,而煤就相当于一个个数据元素。开采煤矿然后运输、加工这些“操作”技术就相当于算法。显然,如何开采,如何运输必须考虑到煤矿的存储(物理)结构,只拥有开采技术而没有煤矿是没有任何意义的。算法设计必须考虑到数据结构,算法设计是不可能独立于数据结构的。
另外,数据结构的设计和选择需要为算法服务。如果某种数据结构不利于算法实现它将没有太大的实际意义。知道某种数据结构的典型操作才能设计出好的算法。
总之,算法的设计同时伴有数据结构的设计,两者都是为最终解决问题服务的。
(2)数据结构与算法的区别:
数据结构关注的是数据的逻辑结构、存储结构以及基本操作,而算法更多的是关注如何在数据结构的基础上解决实际问题。算法是编程思想,数据结构则是这些思想的逻辑基础。
四、举例说明
例如:有若干学生数据,每个学生数据包括学号(学生编号唯一)、姓名、班号和若干门课程成绩(每个学生所选的科目数可能不同,假设最多6们),要求设计一个程序输出每个学生的学号、姓名、平均分以及每门课的平均分。
现在有三种数据存储方案。
方案一:将学生的全部数据项放在一个表中,一个学生的全部数据对应一条记录。由于课程最多可选6们,对应的成绩也应有6个。对应的数据结构如下:
Struct student
{
int no;
char name[10];
intclassno;
int score1;
intscore2;
int score4;
intscore5;
intscore6;
};
方案二:将学生的全部数据项放在一个表中,但一个学生的一门课程成绩对应一条记录。这样成绩项只需要一个,为了区分不同课程成绩,需要增加一个课程编号项目。对应数据结构如下:
struct student
{
Int no;
Char name[10];
Intclassno;
Intcauseno;
Intdeg;
};
方案三:将学生的学号、姓名、班号放在一个表中,讲成绩数据放在另一个表中,两者通过学号关联。前者一个学生对应一条记录,后者一门课程成绩对应一条记录。对应的数据结构如下:
struct student1
{ int no;
char name[10];