算法基础1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章导引
算法的五个重要特性
①确定性,每一种运算必须要有确切的定义,无二义性②能行性,运算都是基本运算,原理上能在有限时间内完成③输入:有0个或多个输入④输出:一个或多个输出⑤有穷性:在执行了有穷步运算后终止
算法学习的五个内容
①如何设计算法,运用一些基本设计策略规划算法②如何表示算法,用恰当的方式表示算法③如何确认算法,算法正确性的证明(算法确认algorithm validation)④如何分析算法,通过时间和空间复杂度的分析,确定算法的优劣⑤如何测试程序,测试程序是否会产生错误的结果
算法分析是对一个算法需要多少计算时间和存储空间作定量的分析
多项式时间算法
O(1) 指数时间算法:O(2n) 性质:①传递性:全都具有②反身性:Θ,O,Ω具有③对称性:仅f(n)= Θ(g(n)) ⇔g(n)= Θ(f(n))④互对称性:f(n)= O(g(n)) ⇔ g(n)= Ω (f(n)) ;f(n)= o(g(n)) ⇔ g(n)= ω (f(n)) ; 算术运算: O(f(n))+O(g(n)) = O(max{f(n),g(n)}) ; O(f(n))+O(g(n)) = O(f(n)+g(n)) ; O(f(n))*O(g(n)) = O(f(n)*g(n)) ; O(cf(n)) = O(f(n)) ; g(n)= O(f(n)) ⇒O(f(n))+O(g(n)) = O(f(n)) 。 ΘΩ也有类似性质,证明方法类似规则O(f(n))+O(g(n)) = O(max{f(n),g(n)}) 的证明: 对于任意f1(n) = O(f(n)) ,存在正常数c1和自然数n1,使得对所有 n≥n1,有f1(n) ≤c1f(n) 。 类似地,对于任意g1(n) = O(g(n)) ,存在正常数c2和自然数n2, 使得对所有n≥n2,有g1(n) ≤c2g(n) 。令c3=max{c1, c2},n3=max{n1, n2},h(n)= max{f(n),g(n)} 。 则对所有的n ≥n3,有 f1(n) +g1(n) ≤c1f(n) + c2g(n) ≤c3f(n) + c3g(n)= c3(f(n) + g(n)) ≤ 2c3 max{f(n),g(n)} = 2c3h(n) = O(max{f(n),g(n)}) . 规则O(f(n))+O(g(n)) = O(f(n)+g(n)) 的证明: 对于任意f1(n) = O(f(n)) ,存在正常数c1和自然数n1,使得对所有 n≥n1,有f1(n) ≤c1f(n) 。 类似地,对于任意g1(n) = O(g(n)) ,存在正常数c2和自然数n2, 使得对所有n≥n2,有g1(n) ≤c2g(n) 。令c3=max{c1, c2},n3=max{n1, n2},h(n)= f(n)+g(n) 。 则对所有的n ≥n3,有 O(f(n))+O(g(n)) = f1(n) +g1(n) ≤c1f(n) + c2g(n) ≤c3f(n) + c3g(n)= c3(f(n) + g(n)) =c3h(n) = O(f(n)+g(n)) . 规则O(f(n))*O(g(n)) = O(f(n)*g(n)) 的证明: 对于任意f1(n) = O(f(n)) ,存在正常数c1>1和自然数n1,使得对所有 n≥n1,有f1(n) ≤c1f(n) 。 类似地,对于任意g1(n) = O(g(n)) ,存在正常数c2>1和自然数n2, 使得对所有n≥n2,有g1(n) ≤c2g(n) 。令c3=c1*c2,n3=max{n1, n2},h(n)= f(n)*g(n) 。 则对所有的n ≥n3,有 O(f(n))*O(g(n)) = f1(n) *g1(n) ≤c1f(n) * c2g(n) = c3f(n)*g(n) =c3h(n) = O(f(n)*g(n)) . 取整函数性质 ⑴x-1 < ⎣ x ⎦≤x ≤⎡ x ⎤ < x+1;⑵⎣ n/2 ⎦+ ⎡ n/2 ⎤ = n;⑶对于n ≥ 0,a,b>0,有:①⎡⎡ n/a ⎤ /b ⎤ = ⎡ n/ab ⎤②⎣⎣n/a ⎦/b ⎦= ⎣n/ab ⎦③⎡a/b ⎤≤ (a+(b-1))/b ④⎣a/b ⎦≥(a-(b-1))/b ⑤f(x)= ⎣x ⎦, g(x)= ⎡ x ⎤为单调递增函数 ≥ 1+x; |x| ≤1 ⇒ 1+x ≤ e x≤ 1+x+x2 ; e x = 1+x+ Θ(x2), as x→0; ******************************** 第四章 分治法的思想: 将一个输入规模为n 的问题分解为k个规模较小的子问题, 这些子问题互相独立且与原问题相同, 然后递归的求解这些子问题,最后用 适当的方法将各子问题的解合并成原 问题的解。 分治法问题特征: ①问题规模小到一定的程度就非常容 易解决(所有问题的共性特征) ②问题可分解为若干个规模较小的同 类问题(递归策略[分]) ③子问题的解可以合并为该问题的解 (若不具备,可用贪心或动态规划) ④子问题是相互独立的(保证采用分 治法效率高,否则更适合采用动态规 划) 二分检索所需空间: 用n个位置存放 数组A,还有low, high, mid, x, j五个变 量需要存储,共需空间n+5。 二分检索算法正确性证明:如果n=0, 则不进入循环,j=0,算法终止;否则 就会进入循环与数组A中的元素进行 比较;如果x=A[mid],则j=mid,检索