您的位置:首页 > 理论基础 > 数据结构算法

数据结构总结(2)

2016-02-25 15:35 435 查看
算法
{
  算法的概念:
一个有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列
  算法的对象:
数据
  算法的特性:
(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];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构