错位排序算法
首先让我们理解什么是错位排列错位排列是指在排列中任何一个元素都不在自己原来的位置上。比如对于序列 {1,2,3}{1,2,3}一个错位排列可能是 {3,1,2}{3,1,2}因为 11 不在位置 11 上22 不在位置 22 上33 不在位置 33 上。基本概念对于 nn 个元素每个元素都不能放在原来的位置上记录 nn 个元素的错排数量为 D(n)D(n)简单推导n1n1 时没有错排可能D(1)0D(1)0n2n2 时只有一种错排方式 (1,2)→(2,1)(1,2)→(2,1)D(2)1D(2)1n3n3 时有两种错排方式 (1,2,3)→(2,3,1),(3,1,2)(1,2,3)→(2,3,1),(3,1,2) D(3)2D(3)2递推公式推导假设我们要计算nn个元素的错排数量我们可以这样思考先把第 nn 个元素放到某个位置 ii 上 ii 可以是 11 到 n−1n−1 中的任何位置对于位置 ii 原来的元素我们有两种选择把 ii 放到位置nn剩下 n−2n−2 个元素的错排问题不把 ii 放到位置 nn剩下 n−1n−1个元素的错排问题因此得到递推公式 D(n)(n−1)×[D(n−2)D(n−1)]D(n)(n−1)×[D(n−2)D(n−1)]边界条件 D(1)0D(1)0 D(2)1D(2)1递推公式的实际意义(n−1)(n−1)表示第 nn 个元素可以放的位置数量D(n−2)D(n−2)表示把 ii 放到 nn 的位置后剩余元素的错排数量D(n−1)D(n−1)表示不把 ii 放到 nn 的位置剩余元素的错排数量错位排列在实际生活中有很多应用比如帽子问题n个人参加晚会他们的帽子被服务员打乱求没有人能拿到自己帽子的情况数信件投递问题n封信装入n个信封求没有一封信装入正确信封的情况数
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2470838.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!