- 0
- 0
- 约1.66千字
- 约 2页
- 2026-01-31 发布于北京
- 举报
第一章作业
1.1、算法设计与分析包括设计与分析两个方面:1、从设计的角度来看,算法设计主要的主
要目的是寻找一个高效的算法解决实际问题,其中的高效主要体现在主要包括时间复杂度和空
间复杂度,即以尽可能快的执行时间和尽可能低的内存来解决问题,正是算法设计的目的决
定了其意义所在:即通过特定的方法设计出效率尽可能高的算法,解决实际问题。2、从算
法分析的角度来看,算法分析主要是分析算法的时空复杂度以及算法实现的难易程度,通过
对算法的时空复杂度的分析,我们能正确的判别好的和差的算法,从而尽可能选取效率好的
算法来解决实际的问题,同时算法的分析也为我们优化我们的算法设计了判别。
1.2、
(1)、问题:
输入:两个正整数m,n
输出:m,n的最大公因数
算法:
(m,n)
ifmn
thenswap(m,n);
while(n!=0)
{
k=mmodn;
m=n;
n=k;
}
returnm;
end
(2)、证明:
初始化:首先若mn,则交换m,n从而保证mn,当n=0则直接返回m,否则初始化k
为mmodn,此时符合迭代条件;
保持:在循环中,如果有n!=0,则循环一直继续,n重新被赋值为mmodn,循环一直被
继续,直到n等于0为止;
终止:因为每次n都会重新被赋值为mmodn,当n等于0时循环终止。
(3)、对于输入规模为log2a,log2b的数,循环的次数为n的位数,即lgn=lg(log2b),
从而得到求余操作次数为lg(log2b)次,赋值操作为3*lg(log2b)。
1.3、
(a)、证明:
初始化:在第一轮迭代以前,i=2,而字数组为A[1..i-1]。也就是它只包含一个元素A[1],
这个子数组显然是已排序的,这就证明了循环不定时在循环的第一次迭始之前是成立
的。
保持:在外层for循环的循环体中,要将A[i-1]、A[i-2]、A[i-3]等元素向右移动一个位置,
直到A[i]找到合适的为止为止,这时将A[i];
终止:当i大雨n时外层for循环结束。在循环不变式中,将j替换为n+1,就有子数组A[1..n]
包含了原先A[1..n]中所有的元素,而此时已经排好序了,从而意味着整个算法是正确的。
1.4、算法基本技术主要包括算法设计与算法分析;基本算法主要包括一些具体的算法,比
如说排序算法中的排序、快速排序、堆排序、归并排序等,再比如动态规划DP、贪心
算法等等算法;问题特征分析主要是针对具体的某一个问题进行特征提取,抓住该问题的本质
特征,从而为解决该问题找到具体的方向。比如说曾经在实现K-mean算法时,要用
到算法设计技术来设计算法,而在设计算法之前,先对该问题进行特征分析,明确问题后选择
算法;而这个问题主要用到的算法差不多属于贪心算法的范畴,在确定所用的算法后就开始进行
算法的设计,并在此之前对算法进行时空复杂度的分析,以估计该算法在特定数据规模下是否可
行,同时算法实现后还需要使用算法分析技术进行精确的时空复杂度分析。综上,这三者关系是
相辅相成的,紧密联系,不是孤立存在的。
原创力文档

文档评论(0)