数据结构与算法笔记(一):基本概念及复杂度

算法(Algorithm)

一、算法的特性

  1. 有穷性(Finiteness)
    必须能在执行有限个步骤之后终止;
  2. 确切性(Definiteness)
    每一步骤必须有确切的定义;
  3. 输入项(Input)
    一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
  4. 输出项(Output)
    一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
  5. 可行性(Effectiveness)
    算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)。

二、算法的设计要求

  1. 正确性
  2. 健壮性
  3. 可读性
  4. 耗时低,占用空间少

数据结构(Data Structures)

一、数据结构(Data Structures)主要是指数据和关系的集合

数据指的是计算机中需要处理的数据,
而关系指的是这些数据相关的前后逻辑,
这些逻辑与计算机储存的位置无关。

二、主要包含以下四大逻辑结构

  1. 集合结构(Set Structure)
    所有数据元素除了同属于一个集合外,并 无其他关系
  2. 线性结构(Linear Structure)
    数据元素之间存在 一对一 的关系
  3. 树形结构(Tree Structure)
    数据元素之间存在 一对多 的层次关系。
  4. 图形结构(Graphic Structure,也称:网状结构)
    数据元素之间存在 多对多 的关系
    (注:此时的“多对多”中的多表示,至少有一个)

三、数据类型(Data Type)
是数据的取值范围和对数进行操作的总和。
数据类型规定了程序中对象的特性。
(程序中的每一个变量,常量或者表达式都属于一种数据类型)。

抽象数据类型(Abstract Data Type,ADT)
只是一个数学模型以及定义在模型上的一组操作。
通常是对数据的抽象,定义了数据的取值范围以及对数据操作的集合。
抽象数据类型的特征是实现与操作分离,从而实现封装。

四、时间复杂度和空间复杂度

  1. 时间复杂度:表示一个程序运行所需要的时间。
  2. 空间复杂度:指运行完一个程序所需内存的大小。

我们一般并不需要得到详细的值,只是需要比较快慢的区别。

〇表示最坏情况,Ω表示最好情况,θ表示平均情况。
我们常用的分析使用O进行表示即可。

对于一个算法的时间复杂度而言,n表示其执行问题的规模。
O(n)表示执行该问题需要的时间量级:如O(n)表示线性级别,O(n2)表示平方级别。
n主要的判断方式为算法中循环结构的执行次数

注:
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)

你可能感兴趣的:(算法,数据结构与算法)