社区
数据结构与算法
帖子详情
递归
jp1984
2005-04-14 10:01:28
在利用最佳原理中求TSP问题中的比较次数中得到结果
T(n) = (n - 1)T(n - 1) + n - 1
请问该递归关系如何求解?
...全文
153
8
打赏
收藏
递归
在利用最佳原理中求TSP问题中的比较次数中得到结果 T(n) = (n - 1)T(n - 1) + n - 1 请问该递归关系如何求解?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jp1984
2005-04-20
打赏
举报
回复
To : dengsf
谢谢回复。
不错的,我和您得到相同的结果
S(n) = (n-1) + (n-1)(n-2) + ... + (n-1)(n-2)..2*1
但是对S(n)无法取得简单形式。主要对TSP组合分析算法复杂度可取得精确的比较次数,含2^n 。我想这个递归解得的肯定是含 n! 项的表达式。然后用Stirling公式近似可取得和前面同阶的复杂度。
求解到这里 其实也差不多了,总归还是个求复杂度的问题 。
jp1984
2005-04-18
打赏
举报
回复
谁帮下忙。
dengsf
2005-04-18
打赏
举报
回复
更正一点,
因 S(n) = HAHA(n-2)*(n-1)!
严格来说, S(n) = SITA[(n-1)!] = o(n!)
个人觉得应该没有没有较简单的通式——觉得而已~
实际的 S(n) = (n-1) + (n-1)(n-2) + ... + (n-1)(n-2)..2.1
它如果有简单形式的话,看上去似乎会是 f(n)^g(n) 的形式,但要符合
lim(n->无穷)(f(n)^g(n))/(n-1)! = e = lim(n->无穷)HAHA(n) = lim(n->无穷)(1+1/n)^n
不知从这里会否有所进展。
PS:楼主为什么一定要求精确值?
& 楼主说话很客气~
dengsf
2005-04-15
打赏
举报
回复
有点遗漏
S(n) = HAHA(n-2) + C
C为常数 = S(1) = T(1)
但对最后的 SITA(n!) 没影响。
dengsf
2005-04-15
打赏
举报
回复
两边除以 (n-2)! 得:
T(n)/(n-1)! = T(n-1)/(n-2)! + 1/(n-2)!
令: S(n) = T(n)/(n-1)!
得:S(n) = S(n-1) + 1/(n-2)!
记 HAHA(n) = sum[0 to n](1/n!)
很明显 S(n) = HAHA(n-2)
而 1 <= HAHA(n) <= 1 + 1 + 1/2 + 1/4 + ... = 3 ( n >= 0 )
所以 T(n) = (n-1)! * HAHA(n-2) = SITA(n!)
mmmcd
2005-04-15
打赏
举报
回复
如果要求通式,就要解非齐次差分方程
gumbour
2005-04-15
打赏
举报
回复
边界
T(0) = ?
假设 T(0) = T0
int Fun(int n)
{
if (n == 0)
return T0
else
return (n-1)*Fun(n-1)+n-1
}
jp1984
2005-04-15
打赏
举报
回复
to dengsf:
不管怎样,谢谢您的回复。
其实题目已经给出了T(1),一个顶点时的TSP问题显然T(1) = 0
您的结论是正确了, 参照您上面的结论,C = 0.
得到T(n) ~ sita(n!).
我要问的不是渐进情况下的复杂度问题 。我说的是准确的比较次数,换句话说,就是通式。您的思路很好,但是对于HAHA(n - 2)仍然无法取得通式。
我曾考虑用n去乘等式的两边,用H(n)=nT(n)做替换,也可以取得您的结论,但是依旧求不出通式。
读懂C++
递归
程序
递归
在计算学科中是一种非常重要的方法,计算理论中到处都有用
递归
进行表述的问题及求解方法。 在程序设计中,数据描述和算法表达也常用
递归
,通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,
递归
策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。 掌握
递归
,计算机类专业的学生必须要做到。 本文基于一个C++
递归
程序,分步骤进行演示,帮助你知道其执行过程,试图帮助你啃下这块硬骨头。
数据结构:利用栈,将
递归
转换为非
递归
的方法
利用栈将
递归
转换为非
递归
对于一般的
递归
过程,仿照
递归
算法执行过程中
递归
工作栈的状态变化,可直接写出相应的非
递归
算法。 步骤 第一次调用的参数push进堆栈,原有
递归
代码外层加一个while循环,判断条件就是
递归
结束的条件。
递归
调用的地方改成push(); continue; 直到遇到
递归
终止条件,退出
递归
运算所在循环,再用一个新的循环做出栈操作并计算,将
递归
代码中的return改成pop并执行响应的计算,直到栈空为止。就可以了。 完整描述: (1) 设置一个工作栈存放
递归
工作记录(包括实参、 返回地址
【数据结构】--- 二叉树的
递归
遍历和非
递归
遍历【C语言实现】
目录 1. 创建一颗二叉树 2.
递归
前序遍历二叉树 3.
递归
中序遍历二叉树 4.
递归
后序遍历二叉树 5. 测试
递归
打印二叉树代码 6. 非-
递归
前序遍历二叉树 7.非-
递归
实现中序遍历二叉树 8.非 -
递归
实现后序遍历【较为复杂的方法】 9.非 -
递归
实现后序遍历【简单的方法】 10. 二叉树的层次遍历 11. 最后:附全部代码: 对于二叉树的非
递归
深度优先遍历,使用的都是栈 对于二叉树的层次遍历,使用的是队列 1. 创建一颗二叉树 依据前序遍...
C语言
递归
算法及简单
递归
练习总结
递归
:大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解
递归
。 简单理解:
递归
:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。若干次之后,你打开面前的门后,发现只有一间屋子,没有门了。然后,你开始原路返回,每走回一间...
递归
算法时间复杂度分析
递归
算法时间复杂度分析 时间复杂度: 一般情况下,算法中基本操作重复的次数就是问题规模n的某个函数f(n),进而分析f(n)随n的变化情况并确定T(n)的数量级。这里用‘o’来表示数量级,给出算法时间复杂度。 T(n)=o(f(n)); 它表示随问题规模n的增大,算法的执行时间增长率和f(n)增长率成正比,这称作算法的渐进时间复杂度...
数据结构与算法
33,028
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章