算法设计和分析 ① 算法的概述

第一章 算法的概述

1.1 算法是什么?

一般地,算法是指在解决问题时,按照某种机械程序步骤,一定可以得到结果的处理过程

这种过程必须是确定的、有效的、有限的。

1.1.1 算法的定义

一系列将问题的输入转换为输出的计算或操作步骤。

1.1.2 计算机算法的一般特征

①输入 ②输出 ③确定性 ④有限性
有外部提供的量,作为算法的输入 算法产生至少一个量作为输出 组成算法的每条指令是清晰的,没有歧义的 算法的每条指令的执行次数是有限的,执行每条指令的时间也是有限的

1.1.3 算法的三要素

①数据 运算数据中作为运算对象和结果的数据
②运算 运算序列中的各种运算、赋值、算术和逻辑运算
③控制和转移 运算序列中的控制和转移

1.1.4 算法的分类

① 从解法上分类:

数值型算法 算法中的基本运算为算术运算
非数值型算法 算法中的基本运算为逻辑运算

② 从处理方式上分类:

串行算法 串行计算机上执行的算法
并行算法 并行计算机上执行的算法

1.1.5 算法与程序、数据结构的关系

① 从过程上讲:算法 + 数据结构 ≈ 程序

② 从对象上讲:对象 + 消息 ≈ 程序

1.2 算法的复杂性是什么?

算法的复杂性:算法执行所需的时间空间的数量,其与问题的规模算法的输入数据、以及算法的本身有关。

扫描二维码关注公众号,回复: 14132597 查看本文章

1.2.1 算法设计的标准

① 正确性 算法应满足用户的具体需求
② 可读性 算法应该好读,利于读者对算法的理解
③ 健壮性 算法有好的容错能力,当输入异常或非法数据时,能够正确应对适当处理,不会产生莫名其妙的输出结果
④ 时间和空间效率

时间效率:算法执行的时间应该足够

空间效率:算法执行所需的最大存储空间足够

        

1.2.2 算法复杂度

① 算法的复杂度(算法复杂性):

        (1)算法复杂性衡量的标准:时空效率需求

        (2)算法复杂度的分析对象分为:时间复杂度和空间复杂度;

        (3)算法复杂度分析是指:对一个算法所需要的资源进行预测

② 算法的复杂度表示方法:

        算法复杂度函数:C = F( scale , input , algorithm )

scale 问题的规模,通常用符号N表示
input 算法的输入,其相对于问题的规模可视为常量,可以省略
algorithm 算法本身,通常函数F的名字即是代表选择的算法,因此可以省略

        时间复杂度的表示即为:T = T ( N )

        空间复杂度的表示即为:S = S ( N )

③ 算法复杂度计算模型:

        (1)算法分析采用单处理RAM模型( Random-Access Machine

        (2)RAM 包含了计算机中的常用指令:

算术指令

加、减、乘、除、求余、取整

数据移动指令 装入、存储、复制
控制指令 条件转移和非条件转移、子程序调用和返回指令

        (3)每条指令执行所需要的时间为常量,称为元计算

        (4)指令一条一条顺序执行,没有并发操作

④ 算法复杂度计算方法:

        (1) 假设共有K种元计算

        (2) 运行时间按依次为:t1,t2,...,tk

        (3) 算法执行这些元计算的平均次数为: e1,e2,..,eN

        (4) ei 是问题规模N的函数: ei = ei(N)

        则算法复杂度计算方法如下:

                

        

1.2.3 算法的渐进分析

        ① 渐进符号:Θ符号

                (1)首先,我们对一个给定的函数g(n),则Θ(g(n))表示一个函数的集合

                (2)对于这个函数集合中的函数 f ( n ):

                        存在正常数c1、c2和n0,当n充分大时[n >= n0],

                        满足 c1g(n) <= f ( n ) <= c2g(n),则称f ( n ) = Θ( g ( n ) )。

                        此时g ( n )即为f ( n )的一个渐进确界

                  (3) Θ符号渐进的给出了一个函数的上界和下界。注意此处的等号仅仅为一个记号,并不代表两者相等。

        ② 渐进符号:O符号

                (1)首先,我们对一个给定的函数g(n),则O(g(n))表示一个函数的集合

                (2)对于这个函数集合中的函数 f ( n ):

                        存在正常数c、n0,当n充分大时[n >= n0],

                        满足 0 <= f ( n ) <= cg(n),则称f ( n ) = O( g(n) ),

                        此时g ( n )即为f ( n )的一个渐进上界

                (3)实际意义:表示f(n)的阶不高于g(n)的阶。

                        例如:N^2 = O(N^3)、N^2+2N = O(N^3)、N^3 + 3N = O(N^3)。

                        其在问题规模相当大时,是为算法复杂度的上界。

        ③ 渐进符号:Ω符号

                (1)首先,我们对一个给定的函数g(n),则Ω(g(n))表示一个函数的集合

                (2)对于这个函数集合中的函数 f ( n ):

                        存在正常数c、n0,当n充分大时[n >= n0],

                        满足 cg(n)<= f ( n ) ,则称 f ( n ) = Ω( g(n) )。

                        此时g ( n )即为f ( n )的一个渐进下界

                (3)实际意义:如果问题的时间复杂度下界为 Ω( f(n) ),则计算时间复杂性为 Ω( f(n) )的算法为最优算法。

1.2.4 常见的时间复杂度

常数阶 O(1)
对数阶 O(logn)
线性阶 O(n)
线性对数阶 O(nlogn)
多项式阶 O(n^2)、O(n^3)
指数阶 O(2^n) < O(n!) < O(n^n)

        

猜你喜欢

转载自blog.csdn.net/zujiasheng/article/details/120951694
今日推荐