1. 定义
算法是一个满足下列条件的计算:
-  
  有穷性/终止性:有限步内必须停止 
-  
  确定性:每一步都是严格定义和确定的动作 
- 能行性:每一个动作都能够被精确地机械执行
- 输入:有一个满足给定约束条件的输入
- 输出:满足给定约束条件的结果
问题:定义了输入和输出的关系。
问题与算法:一个算法面向一个问题,而不是仅求解一个问题的一个或几个实例。
2. 算法的正确性分析
一个算法是正确的,如果它对于每一个输入都最终停止,而且产生正确的输出
-  
  不正确算法 -  
    不停止(在某个输入上) 
-  
    对所有输入都停止,但对某输入产生不正确结果 
 
-  
    
-  近似算法 
  - 对所有输入都停止
-  
    产生近似正确的解或产生不多的不正确解 
 
-  
  算法正确性证明 - 证明算法对所有输入都停止
-  
    证明对每个输入都产生正确结果 
-  
    程序调试只能证明程序有错,不能证明程序无错误! 
 
3. 算法的复杂性分析
-  
  目的:预测算法对不同输入所需资源量 
-  
  复杂性测度:时间,空间, I/O等, 是输入大小的函数 
- 用途: 为求解一个问题选择最佳算法、最佳设备
- 度量: 
  - 输入大小:设input是问题R的输入集合,R的输入大小是一个函数 F:Input->N,N是正整数集合 
    - 矩阵问题的输入大小=矩阵的维数
-  
      图论问题的输入大小=图的边数/结点数 
 
- 时间复杂性:一个算法对特定输入的时间复杂性是该算法对该输入产生结果需要的原子操作或“步”数 
    - 时间复杂性是输入大小的函数
-  
      假设每一步的执行需要常数时间,实际上每步需要的时间量可能不同 
 
 
- 输入大小:设input是问题R的输入集合,R的输入大小是一个函数 F:Input->N,N是正整数集合 
    
-  
  算法分析模型 -  
    随机访问模型 -  
      单处理机,串行执行,无并发 
-  
      基本数据类型 
- 基本操作(每个操作常数时间) 
 
-  
      
-  
    并行多处理机模型 
 
-  
    










