算法初探
来源:互联网 发布:尖锐湿疣不治知乎 编辑:程序博客网 时间:2024/06/05 09:35
算法
算法和数据结构作为编程学习的一部分,没有算法的程序即没有灵魂。在数学和计算科学中,算法作为一个计算的具体步骤,常用于计算、数据处理和自动推理等。
最早的算法为欧几里德提出的“求最大公因子的算法”——即我们都非常熟悉的辗转相除法。
算法分析
·算法的正确性
·算法的复杂性
算法的复杂度多种多样,最常用的包括时间复杂度——用于刻画程序输入的大小、空间复杂度——刻画程序所需要的最大内存,以及I/O等其他复杂性。
算法设计
实现方法
递归与迭代
顺序、并行与分布式
确定性与非确定性
近似求解与精确求解等等
算法分析的数学基础
计算复杂性函数的阶用于描述算法的增长率
⊙分析时间复杂度忽略系数和低次项 常数次操作的时间复杂度均为Θ(1)
时间复杂度的描述方法
f(n)=Θ(g(n))
c1g(n)〈f(n)〈c2g(n)
表明f(n)在g(n)的两个系数之间
f(n)=Ο(g(n))
0〈f(n)〈cg(n) (当n>N时)
f(n)=Ω(g(n))
0〈cg(n)〈f(n) (当n>N时)
Ω(g(n))常用于描述问题的最佳求解复杂度
排序问题的T(n)=Ω(n)
和式的估计与界限
1.线性和
2.级数
Σi=n(n+1)/2=Θ(n^2) Σa^k=(a^(n+1)-1)/(a-1) (a!=1)调和级数 Σ1/k=Θ(ln(n))+Ο(1)=Θ(ln(n))
递归方程
使用小的输入值来描述一个函数方程和不等式
替换法:联想已知的常用的算法的T(n)
例 求解2T(n/2+17)+n
类似于2T(n/2)+n 猜想T(n)=Ο(nlogn)
例 求解T(n)=2T(n/2)+n
首先很容易猜想到时间复杂度的上下界
T(n)=Ω(n) T(n)=Ο(n^2)
再在n和n^2之间 猜想 自然会联想到熟悉的nlogn
Master定理
求解T(n)=aT(n/b)+f(n) a>1 b>0 f(n)为正整数
(1)若f(n)=Ο(n^logb(a)-ε) ε>0 则 T(n)=Θ(n^logb(a))
(2)若f(n)=Θ(n^logb(a)) 则 T(n)=Θ(n^logb(a)lgn)
(3)若f(n)=Ω(n^logb(a)+ε) ε>0,且对于所有充分大的n有af(n/b)<= cf(n), 则 T(n)=Θ(f(n))
例 T(n)=9T(n/3)+n
a=9 b=3 f(n)=n n^logb(a)=Θ(n^2)
f(n) =n=Ο(n^logb(a)-ε)
则 T(n)=Θ(n^logb(a))=Θ(n^2)
- 算法初探
- 算法初探
- 算法初探
- tarjan算法初探
- 递归算法初探
- Dijkstra算法初探
- 公交换乘算法初探
- 随机算法初探
- 初探遗传算法
- KMP算法初探
- KMP算法初探
- Dijkstra 算法初探
- A*算法初探
- Adaboost算法初探
- 初探STL之算法
- A*算法的初探
- kmp 算法初探
- 神经网络算法初探
- 架构与系统设计资料集合TODO
- 解决jar包依赖:Spring IO platform推出bom
- CodeForces 555C Case of Chocolate(STL:map的使用)
- 九度 1101 - 字符串处理 - 计算表达式
- 初步篇11算术运算符与算术表达式项目5-坐标转换
- 算法初探
- 1077. Kuchiguse (20)
- 9.11排序与查找(三)——给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,找出数组中的某个元素
- hdoj 2795 Billboard 【线段树 单点更新 + 维护区间最大值】
- SQL Server 维护计划备份主分区
- web service调用方式
- 修改主题Theme中默认颜色
- linux实现的802.1q vlan
- HDOJ 4857 逃生 (拓扑排序之邻接表加队列)