算法概述及复杂理论

算法设计与分析


算法概述及复杂理论

问题

  • 目标(比如找男女朋友的目标就是找个白雪公主)
  • 约束条件(身高,颜值等)和解空间
  • 可行解/最优解/近似解
  • 问题实例和问题规模

1、可计算问题/不可计算问题
计算机研究可计算问题
2、困难问题(时间度量)
3、P、NP、NPC

算法的概念

解决问题的一个方法或过程,是一个由若干个算法指令组成的有穷序列。

算法的特点

1、输入和输出
2、确定性
3、可行性
4、有穷性

算法的描述

1、伪代码
2、流程图
3、自然语言的描述

算法的正确性

对任意一个输入,算法都能够得到一个正确的输出。
软件测试非常重要。
如果是实例一个一个的测试,因为问题的复杂度,实例可能很多很多。所以测试算法正确性的方法很重要。

  • 循环不变量
    与程序变量有关的一个语句,它在循环刚开始前,以及在循环的每个迭代执行后为真,特别是在循环结束后,任然为真。
  • 插入排序的循环不变量
    比如说在选取数组A中的最大值,算法为:
MAX=A[0],
for(int i=0;i<A.length;i++)
{
    if(A[i]>MAX)
    {
        MAX=A[i];
    }
}

每次循环中MAX都是A[0]-A[i]中的最大值,这就是循环不变量,总是为真。

  • 利用循环不变量证明算法的正确性
    寻找到循环不变量,即某个特征Lj,然后证明循环不变量为真Lj(j=1,2,3,4..n),然后利用类似数学归纳法的证明方法
    1、初始步:在循环的迭代开始前,L1为真;
    2、归纳步:如果在循环的第j个迭代前,Lj-1为真,则在循环的第j+i个迭代前,Lj为真;
    3、终止步:当循环终止时,Ln为真。
    插入排序算法的正确性证明

算法的效率

  • 算法的效率指:求解已个问题所需要的时间和空间
  • 时间资源和空间资源(时间资源比较重要)
  • 计算模型(Turing机、以及RAM(随机存储器)等
  • 算法时间资源的估计(算法执行基本运算的数目或者步数)

度量一个算法运行时间的三种方式:

  • 最好时间复杂度
  • 最坏时间复杂度
  • 平均时间复杂度

最坏情形时任何规模的问题实例运行时间上的上界,没有更坏了。
算法效率的比较
插入排序与归并排序的比较
插入排序算法o(2n2) 归并排序算法o(50nlgn)
若同时对100万个数据进行比较
则插入排序算法需要时间比归并排序算法需要时间相差很多,即使是插入排序算法的配置好很多的时候,仍然比不上。所以算法很有必要研究!!

算法的时间复杂度取决于主要项;
算法的效率主要取决与算法本身。

问题的下界

问题下界:任何一种算法解决一个问题所需要的必须的最小运行时间。
如排序问题的时间下界为nlogn,时间复杂度为nlogn都是排序算法的最有算法。
最优算法指的不是某个实例的最优算法,而是平均的概念

posted @ 2020-02-23 20:01  断翅孤飞  阅读(319)  评论(0编辑  收藏  举报