算法复习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)
- 算法复习1:算法概述
- 算法学习--算法概述1
- 算法复习
- 算法复习
- 算法复习
- 算法复习~
- 算法复习(1)-算法设计要求
- 【算法】生僻算法复习
- 算法复习-插入排序1
- 算法概述
- 算法概述
- 算法概述
- 算法概述
- 算法概述
- 算法概述
- 算法概述
- 算法概述
- 排序算法(1):主流排序算法概述
- 移动VR媒体概览
- Python处理Excel(五):读取Excel中的Int型数
- UI基础第二天(自学)
- 添加项目中package的搜索路径
- 在VS2015中让UnityShader脚本关键词高亮
- 算法复习1:算法概述
- 实现可滑可点的fragment,使上方的导航条随着fragment的切换而随之变动即滑动,导航条可自由滑动
- tiny_cnn 程序总结1----tiny_cnn简述
- SQLSever--2005 函数大全
- 握手,交流从掌心开始
- PAT乙级—1032. 挖掘机技术哪家强(20)-native
- 通过指针运算符访问对象成员和构造函数的特点
- c语言程序编译过程
- [树形DP 启发式合并 神题] BZOJ 4543 [POI2014]Hotel加强版 & BZOJ 3522 [Poi2014]Hotel