数据结构总结(2)

来源:互联网 发布:mac 文件夹隐藏与显示 编辑:程序博客网 时间:2024/06/09 22:45

算法

{

  算法的概念:

一个有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列

  算法的对象:

数据

  算法的特性:

1)输入 有0个或多个输入

2)输出 有一个或多个输出(处理结果)

3)确定性 每步定义都是确切、无歧义

4)有穷性 算法应在有穷性结束(避免死循环)

5)有效性 每一条运算应足够基本

  算法的评价:

1)正确性

2)可读性

3)健壮性

   *4)高效性(时间代价和空间代价)

  算法的效率衡量:

     事后统计和事前分析估计

  算法操作:

  {

  一般操作:

    插入、删除、查找、遍历、交换、判断等

  重要操作:

    查找(查找方法)和排序

  } 

}

算法的时间复杂度

{   

    算法时间复杂度的概念

{

   算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作:

                       T(n)=O(f(n)) 

}

算法时间复杂度的分类

{

  线性阶(T( n ) = O ( 1)):

  int a=1,b;b=a; 

  平方阶( T( n ) = O ( n 2)

  for( i = 0; i < n; i++)

  for( j = 0; j < n; j++)

     c[i][j] = a[i][j] + b[i][j];

  语句的频度(Frequency Count ): 重复执行的次数:n*n;

  立方阶(T( n ) = O ( n 3):

   for(i=1;i<=n;i++)

  for(j=1;j<=n;j++)

     {c[i][j]=0;

       for(k=1;k<=n;k++)

          c[i][j]=c[i][j]+a[i][k]*b[k][j];

     }

算法中的基本操作语句为c[i][j]=c[i][j]+a[i][k]*b[k][j]; 

 

  对数阶(T(n) =O( log2n))

i=1;                            

while(i<=n)

 i=i*2; 

 即f(n)log2n,取最大值f(n)=log2n

所以该程序段的时间复杂度T(n) =O( log2n)    

  线性对数阶(T(n) =O(n log2n))

}

}

算法空间复杂度

{

算法的空间复杂度的概念 

{

算法所需存储空间的度量,记作

                  S(n)=O(f(n)) 

其中n为问题的规模(或大小)

}

算法要占据的空间:

1)算法本身要占据的空间,输入/输出,指令,常数,变量等

2)算法要使用的辅助空间

例子:

【算法1 S(n) = O(1)

for(i=0;i<n/2;i++)

{  

    t=a[i];

    a[i]=a[n-i-1];

    a[n-i-1]=t

}

【算法2 S(n) = O(n)

for(i=0;i<n;i++)

    b[i]=a[n-i-1];

for(i=0;i<n;i++)

    a[i]=b[i];

}

0 0