使用简化递推关系求解第n个卡特兰数问题
关于卡特兰数简化递推公式未被广泛使用的疑问
近期练习动态规划时遇到第n个卡特兰数问题,查看问题及卡特兰数公式后,对动态规划编码实现感到困惑,于是从数学角度推导了简化递推公式:(1) C_n = (4n - 2) / (n + 1) * C_{n - 1}
据此写出了如下代码:
//Not sure if this solution is dynamic or not. int ln = 1; for(int i = 2; i <= n; i++){ ln = ln * (4*i - 2) / (i + 1); } return ln;
实现并验证该解法后,我查看了该问题的常规动态规划解法,它采用由初始定义推导而来的递推公式:(2) C_n = sum_{i=0}^{n-1} C_i * C_{n-i-1}
该解法时间复杂度为O(N²),而我的解法时间复杂度为O(N)。
我在网上确认自己推导的公式是卡特兰数的简化递推公式,但查阅多个编码解决方案后,未找到使用该公式实现的O(N)时间复杂度卡特兰数解法,最接近的是使用组合数公式的O(N)解法:(3) C_n = C(2n, n)/(n + 1)
请问为何我推导的简化递推公式(1)未被广泛用于相关编码解决方案中?
内容的提问来源于stack exchange,提问作者Captaincanadap
相关产品推荐
相关产品推荐

