第k个字典序全排列(kth permutation)

本文介绍了如何使用康托编码来实现字典序全排列。通过编码和解码规则,可以找到给定集合的第k个字典序排列。示例展示了如何对1到5及1到6的全排列进行编码和解码,解析了如何根据给定的序号生成相应的排列序列。
摘要由CSDN通过智能技术生成
给定一个数字n和k,表示求一个由n个数字组成的序列的第k个字典序排列。比如给定n=3,k = 2则求由数字【1,2,3】组成的所有序列中的安字典序排列的第k个。不难看出这三个数字组成的序列的按字典序排序如下:
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
所以得到的第k=2个序列就是1,3,2。

分析
  1. 可以用上一篇文章所说的NextPermutation方法在初始序列为【1,2,3,···n】的基础上调用k-1次nextPermutation方法即可。
  2. 可以利用康托编码来实现。
康托编码:

    对于一个集合{1,2,3,4,...,n}的从小到大排序(或者从大到小,与从小到大类似,这里只说前者)的全排列显然它有n!项用自然数1,2,...,n!与之一一对应,这是一种对应法则,康托编码就是这么一种可以实现按字典序排序的序列与自然数之间相互对应的双射。

编码规则为&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值