数据结构与算法(一)基础概念篇

一、数据结构概述
  数据结构的主要任务是通过分析数据对象的结构特征,包括逻辑结构及数据对象之间的关系,然后把逻辑结构表示成计算机课实现的物理结构,从而便于计算机处理。
  概念术语:
  1)数据(Data):是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输出给计算机处理的符号集合。数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图像、视频等非数值类型;
  2)数据元素(Data Element):是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录;
  3)数据项(Data Item):一个数据元素可以由若干个数据项组成;数据项是数据不可分割的最小单位;
  4)数据对象(Data Object):是性质相同的数据元素的集合,是数据的子集;
  5)数据结构(Data Structure):是数据的组织形式,是数据元素相互之间存在的一种或多种特定的数据元素的集合;
  6)数据类型(Data Type):是指一组性质相同的值的集合及定义在此集合上的一些操作的总称;

二、数据的逻辑结构与物理结构:
  逻辑结构(Logical Structure)是指在数据对象中数据元素之间的相互关系。数据元素之间存在不同的逻辑关系构成了以下四种结构类型:
  1)集合类型:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他的关系。各个数据元素是“平等的”,它们的共同属性是“同属于一个集合”,数据结构中的集合就类似于数学中的集合;
  2)线性结构:线性结构中的数据元素之间是一对一的关系,并且是一种先后的次序;
  3)树形结构:树形结构中的数据元素之间存在一种一对多的层次关系;
  4)图形结构:图形结构的数据元素关系是多对多的关系;
 
  存储结构(Storage Structure)也称为物理结构(Physical Structure),指的是数据的逻辑结构在计算机中的存储形式,数据的存储结构一般可以反映数据元素之间的逻辑关系,分为顺序存储结构和链式存储结构:
  1)顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的;
  2)链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。数据元素的存储关系并不能反映其逻辑关系,因此需要用一个指针存放数据元素的地址,这样通过地址就可以找到相关联数据元素的位置;

三、算法
  算法(Algorithm)是解决特定问题求解步骤的描述,在计算机中表现为有限的操作序列,在数据类型建立起来之后,就要对这些数据类型进行操作,建立起运算的集合即为程序。运算的建立、方法好坏直接决定了计算机程序原型效率的高低;
  1)数据结构与算法的关系:两者既有联系又有区别,联系是:程序=算法+数据结构。数据结构是算法实现的基础,算法总是要依赖某种数据结构来实现的,算法的操作对象时数据结构,区别是数据结构关注的是数据的逻辑结构、存储结构的一些基本操作,而算法更多的是关注如何在数据结构的基本上解决实际问题,算法是编程思想,数据结构是这些思想的基础;
  2)算法的特性:
    有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在
        可接受的时间内完成;
    确定性:算法的每一步骤都具有确定的含义,不会出现二义性;
    可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成;
    输入:是指算法具有零个或多个输入;
    输出:是指算法至少有一个或多个输出;

算法效率的度量方法:
  1)算法采用的策略、方案;
  2)编译产生的代码质量;
  3)问题的输入规模;
  4)机器执行指令的速度;

四、时间复杂度
  在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级;算法的时间复杂度,也就是算法的时间度量,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数,这样用大写O来体现算法时间复杂度的记法,我们称之为大O记法。
在这里插入图片描述

非正式术语
O(1) 常数阶
O(n) 线性阶
O(n^2) 平方阶
O(logn) 对数阶
O(nlogn) nlogn阶
O(n^3) 立方阶
O(2^n) 指数阶

常用的时间复杂度所耗费的时间从小到大依次是:
  O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
在这里插入图片描述
五、空间复杂度
  算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数;
  一般情况下,一个程序在机器上执行时,除了需要存储的程序本身指令、常数、变量和输入数据外,还需要存储对数据操作的存储单元。若输入数据所占空间只取决于问题本身,和算法无关,这样只需要分析该算法在实现时所需的辅助单元即可。若算法执行时所需的辅助空间相对于输入数据量而言是个常数,则称此算法为原地工作,空间复杂度为O(1)。

发布了83 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Micky_Yang/article/details/104156331
今日推荐