一、绪论

基本框架

数据结构——绪论_时间复杂度

基本概念

  1. 数据(Data):是对客观事物的符号表示,在计算机科学中是指能输入到计算机并被计算机程序处理的符号的总称。
  2. 数据元素(Data Element):是数据的基本单位,也可以称为结点,在计算机程序中通常作为一个整体进行考虑。数据元素一般由若干数据项(Data Item)组成。
  3. 数据结构(Data Structure):相互之间存在一定关系的数据的集合。是数据及其元素之间相互关系的表示。
  4. 逻辑结构:数据元素之间一般存在某种特定的关系,这种关系称为数据的逻辑结构。

分为:

线性结构(linear structure)

树型结构(tree structure)

图结构(graph structure)

集合(set)

 

数据结构——绪论_数据_02

  1. 物理结构(存储结构):数据结构在计算机内存中的表示形式。包括数据元素的表示和其关系的表示。主要分为: 顺序结构     链式结构

 

时间和空间复杂程度分析

时间复杂度估计

事后统计法

有趣的小程序

插装 time( ) 的计时程序    

double start, stop;

time (&start);

int k = seqsearch (a, n, x);

time (&stop);

double runTime = stop - start;

cout << " " << n << " "

cout runTime << endl;

缺点:需先运行依据算法编制的程序软、硬件环境影响测试结果

事前统计法

程序的执行时间T(n):

数据结构——绪论_数据_03

   语句 i 的执行次数×执行时间(执行时间可以认为是常量1)

                    

大Ο记号表示算法的时间性能

当问题规模 n→∞时T(n)与某一量同阶,称作算法的渐近时间复杂度 (asymptotic time complexity,随着问题规模的增加,算法运行时间的增长趋势) :

记作:T(n)=O(n^2)    O是order的简写

O有两种算法:

1.

求出执行次数X(n),保留求出次数的最高次幂,并且把系数去掉。  如X(n)=2n^2+n+1=O(n^2)

2.

结论:时间复杂度只与算法中语句频度最大的语句(基本语句)有关, 而其它语句的时间可以不计

例子:f(n)为基本语句的频度,则T(n)=O(F(n)): 
时间复杂度:  T(n)=O(F(n))

数据结构——绪论_Data_04

 

 

常见时间复杂度

数据结构——绪论_Data_05

常见时间复杂度之间的关系

 

数据结构——绪论_数据_06

空间复杂度估计

定义:

算法的空间复杂度是指在算法的执行过程中,需要的辅助空间数量。

辅助空间是除算法本身和输入输出数据所占据的空间外,算法临时开辟的存储空间。通常记作: S ( n ) = O ( f ( n ))

其中, n 为问题规模,分析方法与算法的时间复杂度类似。

例子:

数据结构——绪论_数据_07

模板

数据结构——绪论_Data_08

直接上例子:

函数模板:

#include<iostream>

using namespace std;

template<typename T> //模板定义,T为模板参数

T abs(T a) //定义函数模板

{ //记住只能

return a<0?-a:a;

}

template <typename T> ///必须新建一个

T Max(T x,T y)

{

return (x>y)?x:y;

}



int main()

{

int x=-12;



double y=12.5;

cout<<abs(x)<<endl;

cout<<abs(y)<<endl;

cout<<Max(x,y)<<endl;///错误:x和y的数据类型必须一样



}