算法分析与设计:作业
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题1.2—5,P13
• 5. 写出十进制正整数转换为二进制整数的 算法
– 解:算法 Binary(n) //输入:十进制正整数n //输出:bkbk-1· · · b 1b 0 k←0 while n ≠ 0 bk ← n mod 2 n ← [n/2] k ← k+1
习题2.1—7,P39
• 7. Gaussian消去法用于求解n个n元线性方 程联立的方程组. 乘法是其基本操作,且大 约需要n3/3乘法运算. 问 a. 解一个1000个方程联立的方程组比解一 个500个方程联立的方程组要多运行多少时 间?
习题3.2-6,P82
• 6. 设文本T长度为n,模式P长度为m,给 出一个蛮力字符串匹配最差的实例,并指 出精确的比较次数
ቤተ መጻሕፍቲ ባይዱ– 解:令T为长度为n个0的字符串,P的前m-1个 字符为0,第m个字符为1,此时总的比较次数 最多,结果为 C(n)=m(n-m+1),当m<<n时,有 C(n)∈Θ(nm)
习题2.5—4,P64
• 4. 爬梯子. 假设每一步可以爬一格或者两格 梯子,爬一部n格梯子一共有几种爬法?
– 解:令C(n)表示总的爬法,则C(n-1)表示第一 步爬一格梯子的爬法,C(n-2)表示第一步爬二 格梯子的爬法,所以有 C(n) = C(n-1)+C(n-2), n>2 C(1) = 1, C(2) = 2 解之得 C(n) = F(n+1),这里F(n)表示Fibonacci数列
习题2.5—6,P65
• 6. 改进迭代算法Fib,使它仅需要Θ(1)的额 外空间
– 算法 Fib(n) a ← 0, b ← 0 for i ← 2 to n do b ← b+a a ← b-a if n=0 return 0 else return b
习题3.1—9.b,P79
• 9.b. 改进冒泡排序,使之在对列表比较一遍后没 有交换元素的情况下停止
习题7.2-3,P201
• 3. 文本T为1000个0,模式P分别为 a. 00001 b. 10000 c. 01010 用Horspool算法进行匹配,求总比较次数
– 解:由题意知,三种情况匹配都不成功,因此有 a. ShiftTable={0→4-3=1; 1→5},每次循环比较1次, 0的滑动距离=1,所以总次数=1000-5+1=996 b. ShiftTable={1→4-0=4; 0→1},每次循环比较5次, 0的滑动距离=1,总次数=(1000-5+1)×5=4980 c. ShiftTable={0→4-2=2; 1→1},每次循环比较2次, 0的滑动距离=2 ,所以总次数=(1000-5+1)/2×2=996
习题3.2-5,P82
• 5. 用蛮力字符串匹配算法在1000个0组成 的文本中查找下列模式需做多少次比较? a. 00001 b. 10000 c. 01010
– 解:文本T长度n=1000,模式P长度m=5,对 于三种情况匹配都失败,所以外层循环执行次 数为n-m+1=996,从而有 a. 每次循环,比较5次,总次数=5×996=4980 b. 每次循环,比较1次,总次数=1×996=996 c. 每次循环,比较2次,总次数=2×996=1992
– 解:算法 BubbleSort(A[0..n-1]) count ← n-1 flag ← true while flag flag ← false for j ← 0 to count-1 if A[j+1]<A[j] swap(A[j], A[j+1]) flag ← true count ← count-1
• 4.应用Horspool算法在一个长度为n的文本 中查找长度为m的模式。给出最差和最优 输入的例子
• 解:最差输入:令T为长度为n个0的字符串,P的第1 个字符为1,后m-1个字符为0, 则ShiftTable={0→1; 1→m-1},此时总的比较次数最多,结果为 C(n)=m(n-m+1),当m<<n时,有 C(n)∈Θ(n2) • 最优输入: T为长度为n个0的字符串,P为长度为m的 0串,比较次数为m
算法分析与设计:作业
计算机学院 刘在德
习题1.1—6,P6
• 6. 证明等式gcd(m, n)=gcd(n, m mod n)对 每一对正整数都成立
– 证明:m可以表示成m = kn+r,则r = m mod n 假设d是m, n的一个公约数,则有 d|m, d|n,而r = m-kn,因此d|r 因此d是(n, m mod n)的公约数 假设d是(n, m mod n)的公约数,则 d|n,d|r,但是m = kn+r 因此d也是(m, n)的公约数 因此(m, n)和(n, m mod n)的公约数是一样的, 其最大公约数也必然相等,得证
习题1.1-9,P6
• 9. 用减法实现Euclidean算法
– 解:算法 Euclid(m, n) //求两个不全为0的非负整数的GCD if m=0 return n if n=0 return m while m≠n do if m>n m <- m-n if m<n n = n-m return m
• 5. 相同的文本和模式,Horspool算法的比较次数 是否有可能多于蛮力算法?举例说明 – 解:有可能。例如令T为长度为n个0的字符串, P的第1个字符为1,后m-1个字符为0, – Horspool算法比较m(n-m+1)次 – 蛮力法比较n-m+1次
习题6.5-8,P180
• 8. 改进从右到左二进制幂算法计算an,但 不明确使用n的二进制表现形式 • 解:product ← 1 term ← a while n≠0 do b ← n mod 2 n ← [n/2] if b=1 product ← product*term term ← term*term return product
– 解:设cM是一次乘法运行的时间,则 T(n) ≈ cMn3/3,T(2n) ≈ cM(2n)3/3,所以 T(2n)/T(n) ≈ 8
• b. 新机器比旧机器运算速度快1000倍,假 设两台机器的运行时间相同,问新旧机器 的运算规模有什么变化
– 解:Told ≈ cMn3/3,Tnew ≈ 10-3cMN3/3 因为Told = Tnew,所以有 cMn3/3 ≈ 10-3cMN3/3 从而有 N/n ≈ 10