数据结构与算法设计关系.doc_第1页
数据结构与算法设计关系.doc_第2页
数据结构与算法设计关系.doc_第3页
数据结构与算法设计关系.doc_第4页
数据结构与算法设计关系.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

据结构与算法设计关系摘要:分别介绍数据结构和算法设计研究的内容,以及两者之间的联系和区别,最后举例说说明两者之间的联系。关键词:数据结构 算法设计 存储 复杂度正文:一,数据结构研究的内容在大二的时候,我们学习了数据结构教程课程,从中我们知道了,数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。现在我们知道了数据结构是指数据以及相互之间的关系,可以看做是相互之间存在着某种特定的关系的数据元素的集合,因此,可以把数据结构看成是带结构的数据元素的集合,数据结构包括以下几个方面,同时也是数据结构要研究的内容。1, 数据元素之间的逻辑关系,即数据的逻辑结构,数据的逻辑结构师从逻辑关系(主要是相邻关系)上描述数据的,它与数据的存储无关,是独立于计算机的,因此数据的逻辑结构可以看做是从具体问题抽象出来的数学模型;2, 数据元素及其关系在计算机存储器中的存储方式,即数据的存储结构,也称为数据的物理结构,数据的存储结构师逻辑结构用计算机语言的实现或在计算机中的表示(亦成文映象),也就是逻辑结构在计算机中的存储方式,也是依赖于计算机语言的;3, 施加在该数据上的操作,即数据的运算,数据运算时定义在数据的逻辑结构上的,每种逻辑结构都有一种相应的运算。以上是数据结构的包括的内容,也是数据结构研究的内容,其中每个方面又包括许多小的方面,逻辑结构包括集合,线性结构,树形结构,图形结构等,存储结构包括顺序存储结构,链式存储结构,索性存储结构,哈希(或散列)存储结构。当然,在我们大学期间,不能感受到数据结构研究内容的深刻,但是数据结构研究的内容非常广,而却有着非常重要的意义。二,算法设计研究的内容通过大二一年的学习,以及动手实践,我们应该对算法非常熟悉了。算法是什么?算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。当面临某个问题时,需要找到用计算机解决这个问题的方法和步骤,算法是解决这个问题的方法和步骤的描述。算法是计算机学科中最具有方法论性质的核心概念,被誉为计算机学科的灵魂。算法由操作,控制结构,数据结构3要素组成。算法的基本特征包括又穷性,确定性,可行性。以上是算法的一些基本特征,那么算法设计研究的内容是什么了,算法设计研究的内容包括以下几个方面。1. 算法实现平台有很多种类,它们的函数库,类库也有较大差异,但必须具备的最基本操作功能是相同的,操作包括:算术运算,关系比较,逻辑运算,数据传送。2. 一个算法功能的实现不仅取决于所选用的操作,还取决于各操作之间的执行顺序,即控制结构,算法的控制结构给出了算法的框架,决定了各操作的执行顺序。3. 算法操作的对象是数据,数据间的逻辑关系,数据的存储方式以及处理方式就是数据的数据结构。以上就是算法设计研究的内容,我是从算法的3要素来看算法设计研究的内容的。算法设计研究的内容也非常广,我们不能单凭我们大学学的知识去看算法设计的研究,我们学的只是九牛一毛,所以需要我们去多阅读一些关于算法研究方面的书籍。三,两者之间的联系与区别在介绍数据结构研究的内容的时候,就提到了两者之间的关系,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。由此可见数据结构和算法设计密不可分,好的数据结构也需要好的算法设计才能实现。在介绍算法设计研究内容的时候,我们可以知道算法操作的对象是数据,数据间的逻辑结构,数据的存储方式,简而言之,算法操作的对象是数据结构。由此可见,数据结构也是算法设计研究的一方面,说明两者有着密不可分的关系。但是两者也有着不同的地方,数据结构重在研究数据以及数据之间的关系,不会着重于其实现的过程,但是算法设计不仅要考虑到数据之间的关系,也要分析实现的过程,并要分析最优的算法实现,以及算法效率,空间利用率。四,举例说明下面举一些有关两者之间联系的例子,并简要说明。例子:给定一个文本文件,要求统计给定单词在文本中出现的总次数,并检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。程序如下:#include#include#include#include#include#define MAXSTRLEN 64void GetNext(char TMAXSTRLEN,int (&next)64)int i,j;i=1;next1=j=0;while(i(int)T0)if(j=0|Ti=Tj)+i;+j;nexti=j;else j=nextj;for(j=1;j(int)T0;j+)printf(next%d=%-3d,j,nextj);if(j)%5=0) printf(n);coutendl;void GetNext(char TMAXSTRLEN,int (&next)64,int m)int i,j;i=0;next0=-1;for(j=1;j=0) i=nexti;if(Tj=Ti+1) nextj=i+1;else nextj=-1;for(j=0;j=m;j+)printf(next%d=%-3d,j,nextj);if(j+1)%5=0) printf(n);coutendl;void GetNextV al(charTMAXSTRLEN,int (&next)64)int i,j;i=1;next1=j=0;while(i(int)T0)if(j=0|Ti=Tj)+i;+j;if(Ti!=Tj) nexti=j;else nexti=nextj;else j=nextj;for(i=1;i(int)T0;i+)printf(next%d=%-3d,i,nexti);if(i%5=0) coutendl;coutendl;int IndexKMP(char SMAXSTRLEN,char TMAXSTRLEN,int (&next)64)int i,j,n,m;i=j=1;n=(int)S0;m=(int)T0;while(in|j=m) return i+1-m;else return 0;int IndexKMP(char SMAXSTRLEN,char TMAXSTRLEN,int (&next)64,int pos)int i,j;i=pos;j=1;while(i(int)S0|j=(int)T0) return i+1-(int)T0;else return 0;int IndexKMP(char SMAXSTRLEN,char TMAXSTRLEN,int (&next)64,int n,int m)int i,j;i=j=0;while(in&jm)if(Si=Tj) +i;+j;else if(j=0) i+;else j=nextj-1+1;if(jm) return -1;else return i-m+1;int IndexBF(char SMAXSTRLEN,char TMAXSTRLEN,int pos)int i,j;i=pos;j=1;while(i=S0&jT0) return i-T0;else return 0;void main()printf(Findstr.cpp运行结果:n);int Index,N,M,next64=0;char sMAXSTRLEN,tMAXSTRLEN;printf(GetNext-IndexKMP 的结果:n);printf(输入主串 s:);gets(s);printf(输入模式串 t:);gets(t);N=strlen(s);M=strlen(t);printf(主串 s 长=%dn,N);printf(模式串 t 长=%dn,M);GetNext(t,next,M);Index=IndexKMP(s,t,next,N,M);if(Index!=-1)printf(模式串在主串的位置从第%d 个字符开始n,Index);else printf(主串 s 中不含模式串 tn);printf(GetNext-IndexKMP 的结果:n);s0=N;t0=M;GetNext(t,next);Index=IndexKMP(s,t,next,1);if(Index)printf(模式串在主串的位置从第%d 个字符开始n,Index);else printf(主串 s 中不含模式串 tn);printf(GetNextV al-IndexKMP的结果:n);GetNextV al(t,next);Index=IndexKMP(s,t,next,1);if(Index)printf(模式串在主串的位置从第%d 个字符开始n,Index);else printf(主串 s 中不含模式串 tn);printf(GetNext-IndexKMP 的结果:n);GetNext(t,next);Index=IndexKMP(s,t,next);if(Index)printf(模式串 t 在主串 s 中的位置从第%d 个字符开始n,Index);else printf(主串 s 中不含模式串 tn);printf(IndexBF 的结果:n);Index=IndexBF(s,t,1);if(Index)printf(模式串 t 在主串 s 中的位置从第%d 个字符开始n,Index);else printf(主串 s 中不含模式串 tn);cin.get();这个程序的思路大致可以分为以下几个方面:(1)定义一个串变量;(2)定义文本文件;(3)输入文件名,打开该文件;(4)循环读入文本行,写入文本文件,其过程如下:while(不是文件输入结束)读入一文本行至串变量;串变量写入文件;输入是否结束输入标志;(5) 关闭文件。本程序用到了顺序存储结构,也利用到了串的一些操作,串是非数值处理中的主要对象,如在信息检索、文本编辑、符号处理等许多领域,得到越来越广泛的应用。在串的基本操作中,在主串中查找模式串的模式匹配算法是文本处理中最常用、 最重要的操作之一, 称为模式匹配或串匹配, 就是求子串在主串中首次出现的位置。朴素模式匹配算法的基本思路是将给定字串与主串从第一个字符开始比较,找到首次与子串完全匹配的子串为止,并记住该位置。但为了实现统计子串出现的个数,不仅需要从主串的第一个字符位置开始比较,而且需要从主串的任一位置检索匹配字符串。为了实现这个过程,因此需要找到一种比较好的算法设计思路。C语言中以0表示串值的终结。此时的串长为隐含值,显然不便于进行某些串操作。在这种存储结构表示时实现串求子串操作如下:求子串 SubStrmg(&Sub,S,pos,len)过程即为复制字符序列的过程, 将串S 中从第 pos 个字符开始长度为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论