文心一言 VS chatgpt (7)-- 算法导论2.3 3~4题
三、使用数学归纳法证明:当n刚好是2的幂时,以下递归式的解是 T(n)=nlgn。若n=2,T(n)=2;若n=2^k,k>1,T(n)=2T(n/2)+n。
文心一言:
chatgpt:
首先,当 n=2 时,T(n)=2log₂n=2,显然等式成立。
现假设对于所有的 k<m,递归式 T(n)=nlgn 成立,即当 n 刚好是 2 的幂时,T(n)=nlgn。
考虑当 n=2^m 时,如何证明 T(n)=nlgn。
根据递归式,有:
T(n) = 2T(n/2) + n
将 n=2^m 带入上式,可以得到:
T(2^m) = 2T(2^(m-1)) + 2^m
由于 2^(m-1) 是 2 的幂,根据归纳假设,可以得到:
T(2^(m-1)) = (2^(m-1)) * lg(2^(m-1)) = (m-1)2^(m-1)
带回原式,得:
T(2^m) = 2T(2^(m-1)) + 2^m
= 2((m-1)2^(m-1)) + 2^m
= m2^m
因此,当 n=2^m 时,T(n)=nlgn 成立。
综上所述,由数学归纳法可知:当 n 刚好是 2 的幂时,递归式 T(n)=nlgn 的解为 T(n)=nlgn。
四、我们可以把插人排序表示为如下的一个递归过程。为了排序 A[1…n],我们递归地排序A[1…n-1],然后把 A[n]插入已排序的数组 A[1…n-1]。为插人排序的这个递归版本的最坏情况运行时间写一个递归式。
文心一言:
为了排序 A[1…n],我们递归地排序A[1…n-1],然后把 A[n]插入已排序的数组 A[1…n-1]。为插人排序的这个递归版本的最坏情况运行时间写一个递归式。
最坏情况下,我们需要遍历整个数组,因此递归深度为 n。在每个递归步骤中,我们需要检查是否需要插入新元素,因此递归深度为 n-1。因此,插入排序的最坏情况运行时间为 O(n^2)。
chatgpt:
假设插入排序递归版本的最坏情况运行时间为 T(n),则:
当 n=1 时,数组已经有序,无需进行插入操作,所以 T(1)=1。
当 n>1 时,插入排序的过程分为两个部分:排序 A[1…n-1] 和将 A[n] 插入数组中。对于排序 A[1…n-1] 这一部分,由于它是对长度为 n-1 的数组进行排序,因此可以表示为 T(n-1);而将 A[n] 插入数组中的过程最坏情况下需要比较和移动 n-1 次,所以这一部分的代价为 n-1。因此,插入排序的递推式为:
T(n) = T(n-1) + (n-1)
展开递归式,可以得到:
T(n) = T(n-2) + (n-2) + (n-1)
= T(n-3) + (n-3) + (n-2) + (n-1)
…
= T(1) + 1 + 2 + … + (n-2) + (n-1)
= 1 + 2 + … + (n-2) + (n-1) + n
其中最后一个等式用到了等差数列求和公式。
因此,插入排序递归版本的最坏情况运行时间的递归式为:
T(n) = 1 + 2 + … + (n-2) + (n-1) + n
可以用等差数列求和公式求出该递归式的解为:
T(n) = Θ(n^2)
因此,插入排序递归版本的最坏情况运行时间为 Θ(n^2)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2022-04-12 2022-04-12:给定一个字符串形式的数,比如“3421“或者“-8731“, 如果这个数不在-32768~32767范围上,那么返回“NODATA“, 如果这个数在-32768~32767范围上
2021-04-12 2021-04-12:判断二叉树是否是搜索二叉树?