序关系计数

序关系计数问题问题描述:用关系“<”和“=”将3 个数A、B和C依序排列时有13 种不同的序关系: A=B=C,A=Bi-1时, A[i,j]=0,显然我们有A[i,0]=1,i=1~n。当用j个"<"号来连接i个数时,具有如下的形式: S1 < S2 < ...... < Sj+1 Sk(1≤k≤j+1) 中的各数用等号"="连接。对于A[i,j],考虑在i-1个数的基础上增加一个数的情形。 新增加的数x可以在上式 Sk(1≤k≤j+1) 中任何一个中, 当x∈Sk,且i-1个数时已有j个"<"号,此时产生的不 同的序关系为A[i-1,j]; 当i-1个数时只有j-1个"<"号时, Sk={x},且新增一个"<"号 ,此时的不同序关序有A[i-1,j-1]。因此,x∈Sk时产生的不同序关系为 A[i-1,j-1]+A[i-1,j]。 由于x∈Sk(1≤k≤j+1),共有j+1种不同的情形,因此,产生 的所有不同序关系为: A[i,j]=(j+1)(A[i-1,j-1]+A[i-1,j]) 经过简化后的递归式在计算A[i,j]时只用到第i-1行中的2个数,因此只要保存第i-1行 的数据就可以了。 int Orderings(int n) ...{ A[0]=1; for(int j=1;j<=n-1;j++) A[j]=0; for(int i=2;i<=n;i++) for(int j=i-1;j>=1;j--) A[j]=(j+1)*(A[j-1]+A[j]); int total=0; for(int j=0;j<=n-1;j++) total+=A[j]; return total; } 修改后的算法只需要O(n)空间和O(n^2)计算时间 。

 

感悟:算法的设计是很有挑战性与艺术性的,对于一个问题,怎么着手用数学模型来解决,确实要有点悟性!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值