算法复习1:算法概述

来源:互联网 发布:paypal充值 淘宝 编辑:程序博客网 时间:2024/05/17 03:48

问题一:什么是算法(Algorithm)

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

    满足下列四条性质:

-输入:有零个或多个由外部提供的量作为算法的输入;

-输出:产生至少一个量作为输出;

-确定性:组成算法的每条指令是清晰的、无歧义的;

-有限性:每条指令的执行次数是有限的,执行每条指令的时间也是有限的


问题二:什么是程序(Program)

    程序是算法用某种程序设计语言的具体实现。(注:程序执行时不一定是有限的,例如操作系统)


问题三:求解问题的基本步骤


问题四:算法复杂性分析

1、 算法复杂性:算法运行所需要的计算机资源的量

          -时间复杂性:需要时间资源的量

          -空间复杂性:需要空间资源的量

2、算法复杂性C采用一种与算法外部因素无关的测量方法,只依赖于问题规模N、输入I以及算法A本身。分别用T和S来表示时间复杂性和空间复杂性

       T = T(N, I, A)

       通常,A隐含在复杂性函数名当中,因此可简化为:

       T = T(N, I)

       只考虑某类有代表性的输入实例,因此可进一步简化为:

       最好情况下Tmin(N),最坏情况下Tmax(N),平均情况下Tavg(N),如果算法的时间复杂性不依赖输入实例,则简化为T(N)

3、实践表明,可操作性最好且最有实际价值的是最坏情况下的时间复杂性。


问题五:算法复杂性渐进性态

1、设T(N)是关于算法A的复杂性函数,如果存在t(N),使得当N趋于无穷大时有(T(N) -t(N))/ T(N)趋于0,则t(N)是T(N)当n趋于无穷大时的渐近表达式,或称t(N)是算法A当N趋于无穷大的渐近复杂性。

    得到t(N)的方式:

1)略去低阶项,留下主项;

2)略去常数因子。

2、上界记号O:O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n >=n0有:0<=f(n) <=cg(n) }
               –f(n)当n充分大时上有界,且g(n)是它的一个上界。f(n)的阶不高于g(n)的阶。

      下界记号类似


问题六:N、NP、NPC

•P(Polynomial)类问题是确定性图灵机模型下可在多项式时间内解决的问题类。
•NP(Nondeterministic Polynomial)类问题是非确定性图灵机模型下可在多项式时间内验证的问题类。

•NPC(NP-Complete,NP完全)问题
–规约:令Π和Π′是两个判定性问题,如果存在一个确定性算法A ,可以用多项式时间把问题Π′的实例I′转换为问题Π的实例I,使得I′的答案为yes 当且仅当I的答案是yes,则称Π′以多项式时间归约于Π,记为Π′∝pΠ 。
–令Π是一个判定性问题,如果:
(1) Π∈NP ,并且
(2) 对NP中的所有问题Π′∈NP ,都有Π′∝pΠ ,则称
问题Π是NP 完全的。

•NP-hard问题(NP难问题)
–令Π是一个判定性问题,如果对NP 中的每一个问题Π′∈NP ,有Π′∝pΠ ,就说判定问题Π是一个NP难题。
–Π′不一定在NP类中。



附1:算法分析的步骤

1、确定用来表示问题规模的变量;

2、确定算法的基本操作;

3、如果函数依赖输入实例,则分情况考虑最坏情况、最好情况、平均情况下的基本操作执行次数函数(运行时间函数);

4、只考虑问题的规模充分大时函数的阶,用渐近符号表示。


附2:常见的时间复杂性

•1 :几乎不存在
•logn:不能考虑全部输入
•n:遍历、扫描全部输入
•nlogn:许多分治算法
•n2:两层循环
•n3:三层循环
•2n:一个集合的所有子集
•n! :一个集合中的元素的所有排列


附3:从算法运行时间上可把算法分为两类
                  –多项式时间算法(polynomial time algorithm)          “易”解问题
                     •用多项式对运行时间限界的算法
                     •O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)
                  –指数时间算法(exponential time algorithm)              “难”问题
                     •用指数函数对运行时间限界的算法
                     •O(2n)<O(n!)<O(nn)


   

   

0 0