算法分析初步:刘汝佳讲授的程序与算法复杂度

需积分: 9 1 下载量 150 浏览量 更新于2024-07-11 收藏 93KB PPT 举报
"算法二续-刘汝佳黑书课件" 这篇内容主要讲解了算法分析的基础知识,由清华大学的刘汝佳教授阐述。首先,它引入了算法、数据结构和程序之间的关系,强调了程序是算法与数据结构的结合。在算法分析中,主要关注的是算法的时间效率,而不是具体的编程实现。 对于如何快速计算数组a中一段连续元素的和,如a[i]+…+a[j],课件提出了一种方法:利用前缀和s[i],即s[i]=a[1]+…+a[i]。通过前缀和,可以将原问题转化为s[j]-s[i-1],这样可以在预处理后直接读取结果。课件给出了一个简单的程序示例,展示了如何查找数组中两元素间最大子数组和,其时间复杂度为O(n^2),其中n<=3000。 接下来,内容进入了算法分析的初步讨论。分析算法通常不依赖于实际编写和运行程序,而是通过对基本操作次数的估算来评估算法的时间复杂度。以几个代码分析的例子来说明,例如,一个简单的阶乘计算程序,其时间复杂度为n;另一个双重循环的求和程序,时间复杂度为n^2。此外,还展示了一个嵌套循环的例子,其时间复杂度为n(n+1)/2,这说明了随着问题规模的增加,算法复杂度可能会以更高的阶数增长。 在比较两个算法的效率时,不仅要看它们的基本操作次数,还要考虑随着n的增长,这些操作次数的增长速率。渐进时间复杂度的概念被引入,用来比较算法的长期行为,忽略低阶项和常数因子,只保留最高阶项。例如,f(n)=n^2和g(n)=n^2/2虽然在小规模时有差异,但它们的渐进时间复杂度都是O(n^2),意味着在n足够大时,两者的时间复杂度增长趋势相同。 然而,复杂度分析并不总是能够解决所有问题,特别是在面对如停机问题这类无法确定具体步数的递归问题时,复杂度分析就显得无能为力。这表明在实际应用中,复杂度分析是一种有用的工具,但不能作为评估算法效率的唯一标准,有时还需要考虑其他因素,比如空间复杂度、问题特定的性质以及实际运行环境的影响。