data structure 1 算法和算法分析

1)算法的基本概念

      - 简单的说就是解决问题的方法。科学的讲就是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。

      - 算法的五个特性:有穷性、确定性、可行性、0个或多个输入、1个或多个输出。记忆

      - 算法的设计要求:正确性、可读性、健壮性、高效率、低存储。记忆

      - 算法与程序的区别:1、程序不一定满足有穷性。2、程序中的指令必须是机器可执行的,算法中的指令无此限制。算法的指令可以通过数学符号、流程图、伪代码等描述。

2)算法的时间复杂度 重点

      - 分析给定的代码块的时间复杂度就是分析有效语句执行次数之和。例如:

for( i = 1; i <= n; ++i )
    for( j = 1; j <= n; ++j )
    {    
         ++x;  
    }
第一行执行n次、第二行执行n*n次、第四行执行n*n次。一共执行n+2*n^2次。

      - 时间复杂度表示方法:T(n) = O(f(n))  或者时间复杂度为O(f(n))  

      - f(n)一般用表达式中增长最快的项表示,并将常数去掉。例子中的f(n) = n^2,即时间复杂度为O(n^2)

3)常见的时间复杂度 重点

      - 常数阶 O(1),对数阶 O(log n),线性阶 O(n), 线性对数阶 O(nlog n),平方阶 O(n^2),立方阶 O(n^3),…, k 次方阶O(n^k),指数阶 O(2^n),阶乘阶 O(n!)

      - O(1)<O(log n)<O(n)<O(nlog n)<O(n^2)<O(2^n)<O(n!)<O(n^n)  

4)时间复杂度的三种具体情况 重点

Void bubble-sort(int a[],int n) 
 {   //将 a 中整数序列重新排列成自小至大有序的整数序列。 
      for(i = n-1, change = TURE; i > 1 && change; --i)
            change = false;
             for ( j = 0;  j < i; ++j)
                 if (a[ j] > a[ j +1]) {a[ j]←→a[ j +1];  change = TURE} 
 }// bubble-sort

最好情况:0次   最坏情况:1+2+3+...+n(n-1)/2次   平均时间复杂度:O(n^2)

这里我们规定讨论的时间复杂度均指最坏的时间复杂度。

5)算法的空间复杂度

      - 空间复杂度:S(n) = O(f(n))  n为问题的规模

      - 一个算法所需要的存储空间:算法本身的存储空间、输入数据的存储空间、算法在运行过程中临时占用的存储空间。

      - 若所需临时空间不随问题规模的大小而改变,则称此算法为原地工作

      -  若所需存储量依赖于特定的输入,则通常按最坏情况考虑。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值