数据结构与算法设计的关系
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构与算法设计的关系
摘要:分别介绍数据结构和算法设计研究的内容,以及两者的联系和区别,最后举例说明两者之间的联系。
关键词:数据结构算法设计存储空间存储效率
正文:
一、数据结构研究的内容
数据结构是指数据以及相互之间的联系,可以看做是相互之间存在着某种特定关系的数据元素的组合,因此可以把数据结构看城市带结构的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。数据结构包括以下几个方面:
1、数据元素之间的逻辑关系,即数据的逻辑结构,数据的逻辑结构师从逻辑关
系(主要是相邻关系)上描述数据的,它与数据的存储无关,是独立于计算机的,因此数据的逻辑结构可以看做是从具体问题抽象出来的数学模型;
2、数据元素及其关系在计算机存储器中的存储方式,即数据的存储结构,也称
为数据的物理结构,数据的存储结构师逻辑结构用计算机语言的实现或在计算机中的表示(亦称为映象),也就是逻辑结构在计算机中的存储方式,也是依赖于计算机语言的;
3、施加在该数据上的操作,即数据的运算,数据运算时定义在数据的逻辑结构
上的,每种逻辑结构都有一种相应的运算。
以上是数据结构的包括的内容,也是数据结构研究的内容,其中每个方面又包括许多小的方面,逻辑结构包括集合,线性结构,树形结构,图形结构等,存储结构包括顺序存储结构,链式存储结构,索性存储结构,哈希(或散列)存储结构。
二、算法设计研究的内容
算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。当面临某个问题时,需要找到用计算机解决这个问题的方法和步骤,算法是解决这个问题的方法和步骤的描述。
算法是计算机学科中最具有方法论性质的核心概念,被誉为计算机学科的灵魂。算法由操作控制结构数据结构 3 要素组成。算法的基本特征包括又穷性,确定性,可行性。以上是算法的一些基本特征,那么算法设计研究的内容是什么了,算法设计作为计算机解决问题的一个步骤,其任务是对各类具体问题设计出
良好的算法。算法设计作为一门课程,是研究设计算法的的规律和方法。算法设计研究的内容包括以下几个方面:
1,算法实现平台有很多种类,它们的函数库,类库也有较大差异。但必须具备的最基本操作功能是相同的,操作包括:算术运算,关系比较,逻辑运算,数据传送。
2,一个算法功能的实现不仅取决于所选用的操作,还取决于各操作之间的执行顺序即控制结构,算法的控制结构给出了算法的框架,决定了各操作的执行顺序。
3,算法操作的对象是数据,数据间的逻辑关系,数据的存储方式以及处理方式就是数据的数据结构。
以上就是算法设计研究的内容,我是从算法的3要素来看算法设计研究的内容的。当然算法设计研究的内容也非常广。
在设计算法时,应当严格考虑算法的一下质量指标。
算法设计有以下质量指标:
1、正确性
首先,算法对于一切合法的输入数据都能得出满足要求的结果;其次对于精心选择的、典型的、苛刻的几组输入数据,算法也能得出满足要求的结果。
2、可读性
算法主要是为了人的阅读与交流,其次才是让计算机执行。因此算法应该易于人理解;另一方面,晦涩难读的算法易于隐藏较多错误而难以调试;有些算法设计这总是把自己的算法写得只有自己才看得懂,这样的算法反而没有太大的实用价值。
3、稳健性
当输入的数据非法时,算法应当恰当地作出反应或进行处理,而不是产生莫名其妙的输出结果。这就需要一定充分的考虑到可能的异常情况,并且处理出错的方法不应该是简单的中断算法的执行,而应是返回一个表示错误或错误性质的值,以便在更高的抽像层次上进行处理。
4、高效率与低存储量需求
通常,效率指的是算法的执行时间;存储量指的是算法执行过程中所需的最大存储空间。两者都与问题的规模有关。
算法设计都是为了使算法达到以上的质量标准,更好的为人们服务。
三、算法设计与数据结构的关系
数据结构与算法之间存在者密切的关系。可以说不了解施加于数据上的算法需求就无法决定数据结构;反之算法的结构设计和选择又依耐于作为其基础的数据结构。即数据结构为算法提供了工具。算法是利用这些工具来解决问题的最佳方案。
四,举例说明
下面举例说明同一个问题用不同的数据结构,算法设计的效率不同,并简要说明。对于排序问题,将9、7、8、6、1、2、4、5、3、0十个数按从小到大排序。
1,用我们熟悉的冒泡排序:
void BubbleSort(int R[],int n)
{
int i;j;
int t;
for(i=0;i { for(j=n-1;j>i;j--) if(R[j] {t=R[j]; R[j]=R[j-1]; R[j-1]=t; } } } 2,用快速排序: Void QuickSort(R[],int s,int t) { int i=s,j=t; int tmp; if(s { tmp=R[s]; while(i!=j) { while(j>i&&R[j]>tmp) j--; R[i]=R[j]; while(i R[j]=R[i]; } R[i]=tmp; QuickSort(R,s,i-1); QuickSort(R,i+1,t); }