社区
数据结构与算法
帖子详情
递归
jp1984
2005-04-14 10:01:28
在利用最佳原理中求TSP问题中的比较次数中得到结果
T(n) = (n - 1)T(n - 1) + n - 1
请问该递归关系如何求解?
...全文
158
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++
递归
程序,分步骤进行演示,帮助你知道其执行过程,试图帮助你啃下这块硬骨头。
彻底理解
递归
,从
递归
的本质说起!
遍历二叉树,是学习树这种数据结构首先要理解的一种基本操作。比较简单地方式就是用
递归
去遍历,鉴于
递归
这种调用方法有一定的特殊性,今天还是想来讲讲怎么去理解
递归
遍历。本文针对想理解
递归
的过程的朋友,因为本人在学到这一部分的时候也纠结了很久,其实只要理解了过程,那以后写
递归
的代码再也不用“心虚”了,因为那个过程是可预测的,可证明的。
递归
调用的特殊性在于自己调用自己,给人一种迷茫感,如果是
递归
调用“一次”...
什么是
递归
,通过这篇文章,让你彻底搞懂
递归
想了解更多数据结构以及算法题,可以关注微信公众号“数据结构和算法”,每天一题为你精彩解答。也可以扫描下面的二维码关注 啥叫
递归
聊
递归
之前先看一下什么叫
递归
。
递归
,就是在运行的过程中调用自己。 构成
递归
需具备的条件: 1. 子问题须与原始问题为同样的事,且更为简单; 2. 不能无限制地调用本身,须有个出口,化简为非
递归
状况处理。
递归
语言例子 我们用2个故事来阐述一下什么叫
递归
。 1,从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正
快速排序(三种算法实现和非
递归
实现)
快速排序(Quick Sort)是对冒泡排序的一种改进,基本思想是选取一个记录作为枢轴,经过一趟排序,将整段序列分为两个部分,其中一部分的值都小于枢轴,另一部分都大于枢轴。然后继续对这两部分继续进行排序,从而使整个序列达到有序。
递归
实现:void QuickSort(int* array,int left,int right) { assert(array); if(left &gt;=
递归
算法及经典
递归
例子代码实现
一、什么叫做
递归
? 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法;
递归
函数就是直接或间接调用自身的函数,也就是自身调用自己; 二、一般什么时候使用
递归
?
递归
时常用的编程技术,其基本思想就是“自己调用自己”,一个使用
递归
技术的方法即是直接或间接的调用自身的方法。
递归
方法实际上体现了“以此类推”、“用同样的步骤重复”这样的思想,它可以用
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章