数据结构(一)——数据结构简介

数据结构(一)——数据结构简介

    本系列博客为学习狄泰学院《数据结构实战开发教程》笔记并根据网络资料总结而来。算法

    狄泰学院:https://dt4sw.ke.qq.com/数组

1、数据结构简介

数据结构是相互间存在特定关系的数据的集合,分为逻辑结构和物理结构。网络

一、逻辑结构

f89ffac0f27a22773b514f8ea03976c3.jpg

    集合结构:数据元素之间没有特别的关系,仅同属相同集合。数据结构

    线性结构:数据元素间是一对一的关系ide

    树形结构:数据元素间存在一对多的层次关系学习

    图形结构:数据元素之间是多对多的关系测试

二、物理结构

物理结构是逻辑结构在计算机中存储形式,分为顺序存储结构和链式存储结构。spa

顺序存储结构将数据存储在地址连续的存储单元里。3d

链式存储结构将数据存储在任意的存储单元里,经过保存地址的方式找到相关联的数据元素。blog

497c1003e0320602ddac08bea69c7fff.jpg

2、算法简介

算法是特定问题求解步骤的描述,是独立存在的一种解决问题的方法和思想。

一、算法的特性

    输入:有0个或多个输入

    输出:至少有1个或多个输出

    有穷性:算法在有限的步骤后应该自动结束而不会无限循环。

    肯定性:算法中的每一个步骤都有肯定的含义,不会出现二义性

    可行性:算法的每一步都是可行的

    正确性:算法对于合法数据可以获得知足要求的结果,可以处理非法输入,并获得合理的结果。

    可读性:算法要便于阅读、理解和交流

    健壮性:算法不该该获得莫名其妙的结果

    性价比:利用最少的资源获得知足要求的结果

二、算法效率的度量

效率评估是工程中算法最重要的附加特性。

1)、过后统计法

比较不一样算法对同一组输入数据的运行处理时间。

缺点:

A、为了得到不一样算法的运行处理时间必须编写相应程序

B、运行处理时间严重依赖硬件以及运行时环境

C、算法的测试数据选取困难

2)、事前分析统计

依据统计的方法对算法效率进行评估

影响算法效率的主要因素:

A、算法采用的策略和方法

B、问题的输入规模

C、编译器产生的代码

D、计算机的执行速度

算法效率的简单估算:

2435a8bdaad13bbfc26a186308402464.png

dcedfaf0c818ec1d1a6ddb780e132c5b.png

2e53f2da89f3ea92326636b603ce799d.png

三种求和算法的关键部分的操做数量分别为2nn1。随着问题规模的增大,操做数量的差别会愈来愈大,效率差别也会愈来愈大。

f019b71c0542dfffe34916c5dafdbae3.png


不一样算法操做数量的对比

算法操做数量对比的实例一:

1f1f4b220fd610f8d033b5f579c14014.png

n<=3时,算法B优于算法A。随着n的规模增大,算法A优点比较明显。

算法操做数量对比的实例二:

0e2c64f8fc297539b47bd14862b49fe6.png

n=1时,算法C与算法D效率相同。随着n规模的增大,算法C优点明显优于算法D

判断算法的效率时,操做数量中的常数项和其余次阶项经常能够忽略,只须要关注最高阶项。

三、算法的复杂度

1)算法的时间复杂度

算法时间复杂度是算法运行后对时间需求量的定性描述。

因为主要关注算法的效率问题,所以主要讨论算法的时间复杂度。

O表示法

算法的效率严重依赖于操做(Operations)数量,操做数量的估算能够做为时间复杂度的估算,在判断时首先关注操做数量的最高阶项。

O2==>O1

O3n+3==> O3n==>On

O3n^2+n+4==>On^2

常见的时间复杂度:

3bad4e0bbb70214203b3f91ee1993a63.png

beba971dd6384780c363bf70deeacc36.png

4dae3d0ab36882f1648ba3bf0a2cafd6.png

64623a88c501b8a4926834f3b1293c7c.png

2)算法的空间复杂度

算法空间复杂度是算法运行后对空间需求量的定性描述。

一般使用Sn)表示算法的空间复杂度。使用时间复杂度的推导方法推导空间复杂度。

当算法所需的内存空间大小为常数时,算法的空间复杂度为S1)。

一般状况下,算法的时间复杂度更受关注。能够经过增长额外空间下降时间复杂度。

算法是解决具体问题的步骤,数据结构是算法解决问题的载体。

四、算法实例

    一个数组中存储着1——1000的数字,每一个数字可能出现屡次或者不出现,找出出现次数最多的数字。

void search(int array[], int len)

{

  //总计可能出现1000种可能值

  int sp[1000] = {0};

  int max = 0;

  for(int i = 0; i < len; i++)

  {

      //遍历数组,数组中某个数组出现一次增长统计1

      sp[array[i] - 1]++;

  }

  for(int i = 0; i < 1000; i++)

  {

      if(max < sp[i])

      {

          max = sp[i];

      }

  }

  for(int i = 0; i< 1000; i++)

  {

      if(max == sp[i])

      {

          cout << "Number:" << i + 1 << endl;

          cout << "Count:" << max << endl;

      }

  }

}

使用空间换时间,算法的时间效率为On)。

相关文章
相关标签/搜索