当前位置:   article > 正文

数据结构速成--数据结构和算法

数据结构速成--数据结构和算法

        由于是速成专题,因此内容不会十分全面,只会涵盖考试重点,各学校课程要求不同 ,大家可以按照考纲复习,不全面的内容,可以看一下小编主页数据结构初阶的内容,找到对应专题详细学习一下。

目录

一、数据结构

二、逻辑结构

三、存储结构

四、算法

五、算法分析


一、数据结构

        数据是对客观事物的符号表示,如图像、声音等。
        数据元素是数据的基本单位。
        数据项是构成数据元素的不可分割的最小单位。

        一个数据元素可由若干个数据项组成,例如,一位学生的信息记录为一个数据元素,它是由学号、姓名、性别等数据项组成。
        数据对象是具有相同性质的数据元素的集合。
        数据结构是相互之间存在一种或多种特定关系的数据元素的集合
        数据结构包括三方面的内容:逻辑结构、存储结构和数据的运算。
        数据结构的形式定义为:数据结构是一个二元组如下

        其中:D是数据元素的有限集,S适用于表示数据元素相互关系的有限集。 

        第一部分大家主要掌握概念内容,分清基本单位、最小单位以及数据结构是数据元素的集合即可!

二、逻辑结构

        逻辑结构是指数据元素之间的逻辑关系,与数据的存储无关,独立于计算机。

        第二部分大家只要记住逻辑结构中,线性和非线性结构都有哪些,记住他们的名称即可。

三、存储结构

        存储结构(物理结构)是指数据结构在计算机中的表示,它包括数据元素的表示和关系的表示。

        顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系
由存储单元的邻接关系来体现。
        链式存储:借助指示元素存储地址的指针来表示元素之间的逻辑关系。
        索引存储:在存储元素信息的同时,还建立附加的索引表
        散列存储:根据元素的关键字直接计算出该元素的存储地址,又称哈希(hash)存储。 

        第三部分大家记住四种存储结构,以及我重点标红的地方即可! 

四、算法

         算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。此外,一个算法还具有下列个重要特性:
(1)有穷性。一个算法必须总是在执行有穷步后结束,且每一步都是在有穷时间内完成。
(2)确定性。算法中每条指令必须有确切的含义,且相同的输入只能得到相同的输出
(3)可行性。算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
(4)输入。一个算法有零个或多个输入
(5)输出。一个算法有一个或多个输出

注意:一个算法可以没有输入,但是必须要有输出!!!

        通常设计一个“好”的算法应考虑达到以下目标:

  • 正确性。算法应能够正确地求解问题。
  • 可读性。算法能具有良好的可读性,以帮助人们理解。
  • 健壮性。输入非法数据时,算法能做出反应或处理,而不会产生莫名其妙的输出结果。
  • 效率与低存储量需求。效率是指算法执行的时间,存储量需求是指算法执行过程中所需的最大存储空间。 

        第四部分大家重点记住算法的五大特性,以及实现优秀算法的四大目标,一定不要弄混了!

五、算法分析

        我们进行算法分析的目的就是分析算法的效率以求改进

        算法效率的度量是通过时间复杂度和空间复杂度来描述的。

        一个语句的频度是指该语句在算法中被重复执行的次数。

        算法中所有语句的频度之和记为T(n),它是该算法问题规模n的函数,时间复杂度主要分析的T(n)数量级。 

注意:常系数全部去掉,比如O(4n)就把4去掉,应该是O(n)。

        空间复杂度一般不会让大家来算,就记住一下概念,他是算法所占额外空间的量度。 

例1:

        本道题选D。A算得O(2n^{^{3}}) ,去掉常系数2,就是O(n^3{^{}});B也是O(n^3{^{}});C是O(n^{2}log_{2}n);D是O(n^{2})。

例2:

  1. //求时间复杂度
  2. for(i=2;i<=n;++i)
  3. ++x;
  4. for(j=1;j<=i-1;++j)
  5. a[i][j]=x;

         上面代码是嵌套for循环,i<=n 和 j<=i-1两层应该是O(n^{2})。二维数组访问都要嵌套,一般都是O(n^{2})。

例3:

  1. //求时间复杂度
  2. i=1;
  3. while(i<=n)
  4. i=i*2;

        上面代码我们注意i每次变化都是成2倍递增的,假设第x次变化就要跳出循环,这时候就是2^{x}=n,就能算到x=log_{2}n。一共重复log_{2}n次,因此时间复杂度是O(log_{2}n)。

例4:

        这段代码复杂度可以看到(y+1)^{2}<=n,则y+1<=n^{\frac{1}{2}},变成1次幂才可以计算,因为y+1,在循环条件里其实变了两次,因此时间复杂度为O(n^{\frac{1}{2}})。

        第五部分是本章最重要的内容,大家一定要记住如何计算时间复杂度,加法/乘法规则,以及常见时间复杂度的大小比较,看看例题熟练掌握!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/397291
推荐阅读
相关标签
  

闽ICP备14008679号