第二章算法

来源:互联网 发布:中标数据查询360 编辑:程序博客网 时间:2024/05/18 13:27

2.3两种算法的比较

 

[cpp] view plain copy
print?
  1. #include <iostream>  
  2. #if 0   //需要运行 100次   
  3. int main() {  
  4.       
  5.     int i,sum=0,n=100;  
  6.     for(i=1;i<=n;i++)  
  7.     {  
  8.         sum=sum+i;  
  9.      }   
  10.        
  11.     std::cout << sum;  
  12.     return 0;  
  13. }  
  14. #endif  
  15. #if 1  
  16. int main()  
  17. {  
  18.     //运行一次   
  19.     int sum=0,n=100;  
  20.     sum=(1+n)*n/2;  
  21.     std::cout << sum;  
  22. }  
  23. #endif  
  24. //显然 第二个算法更优秀  
  25. //算法:解决特定问题求解的描述, 在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作  
2.4算法定义

  算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

2.5算法的特性

  输入输出:零个或多个输入,至少一个或多个输出。

 有穷性:有限的步骤,每个步骤在可接受的时间内完成

确定性:每一步都有确定的含义,没有二义性

可行性:每一步都必须可行,执行有限次数完成

2.6算法的设计

 正确性

 可读性

 健壮性

时间效率高和存储量低

2.7算法效率的度量方法

 2.7.1事后统计方法:通过写好的测试程序和数据,利用计算机对不同算法比较,然后确定效率

     缺点:必须事先把程序写好,时间的快慢依赖计算机,算法测试数据设计困难

2.7.2事前分析估计方法 :编程前对程序进行估计

    缺点:依赖算法的好坏

2.10常见的时间复杂度

     O(1): 表示算法的运行时间为常量
    O(n): 表示该算法是线性算法
   O(㏒2n): 二分查找算法
   O(n2): 对数组进行排序的各种简单算法,例如直接插入排序的算法。
   O(n3): 做两个n阶矩阵的乘法运算
   O(2n): 求具有n个元素集合的所有子集的算法
   O(n!): 求具有N个元素的全排列的算法

优<---------------------------<劣

O(1)2n)<O(n)<O(n2)<O(2n)


排序法

 最差时间分析平均时间复杂度 稳定度 空间复杂度 冒泡排序O(n2)O(n2)稳定 O(1) 快速排序O(n2)O(n*log2n)不稳定 O(log2n)~O(n)选择排序O(n2)O(n2)稳定 O(1) 二叉树排序O(n2)O(n*log2n)不一顶 O(n)

插入排序

O(n2)O(n2)稳定 O(1) 堆排序O(n*log2n)O(n*log2n)不稳定 O(1) 希尔排序OO 不稳定 O(1)



0 0
原创粉丝点击