<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[BabyNumber的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/BabyNumber</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; BabyNumber]]></copyright><item><title><![CDATA[特殊排列的算法]]></title><link>https://blog.youkuaiyun.com/BabyNumber/article/details/50508314</link><guid>https://blog.youkuaiyun.com/BabyNumber/article/details/50508314</guid><author>BabyNumber</author><pubDate>Wed, 13 Jan 2016 10:24:03 +0800</pubDate><description><![CDATA[全排列是集合中全部元素的排列，并且每一个排列中的元素都不会重复。实际应用中，还会遇到各种特殊的排列，例如集合中一部分元素的排列，允许元素重复的排列等。
现在来看一看产生各种特殊排列的算法。
 
递归形式的回溯算法如下：
//全排列（递归）
//输入：排列元素个数n
//输出：n个元素的全体排列
#include
#include 
using namespace std;]]></description><category></category></item><item><title><![CDATA[全排列的算法（八）——序数法]]></title><link>https://blog.youkuaiyun.com/BabyNumber/article/details/44217255</link><guid>https://blog.youkuaiyun.com/BabyNumber/article/details/44217255</guid><author>BabyNumber</author><pubDate>Thu, 12 Mar 2015 09:19:18 +0800</pubDate><description><![CDATA[全排列的生成算法（八)——序数法
 
n个元素的全排列有n!个，如果将排列按顺序编号，并能够按照某种方法建立起每一个序号与一个排列之间的对应关系，那么就可以根据序号确定排列，反过来也可以根据排列确定它的序号。根据排列的序号生成对应排列的方法就称为序数法。
通常，我们使用的计数法是十进制数。十进制数的位权是10，也就是逢十进一。另外还有二进制、八进制和十六进制等，它们的位权分别是2、8和16。]]></description><category></category></item><item><title><![CDATA[全排列的算法（七）——递归算法]]></title><link>https://blog.youkuaiyun.com/BabyNumber/article/details/44016175</link><guid>https://blog.youkuaiyun.com/BabyNumber/article/details/44016175</guid><author>BabyNumber</author><pubDate>Mon, 02 Mar 2015 11:11:51 +0800</pubDate><description><![CDATA[全排列的生成算法（七）——递归算法
 
当排列采用递归方式定义时，可以直接从他的定义出发来生成全体排列。
如果用P表示n个元素的排列，而Pi表示不包含元素i的排列，(i)Pi表示在排列Pi前加上前缀i的排列，那么，n个元素的排列可递归定义为：
如果n=1，则排列P只有一个元素i
如果n>1，则排列P由排列(i)Pi构成（i=1、2、....、n-1）。
根据定义，容易看出如果已经生成了]]></description><category></category></item><item><title><![CDATA[全排列的算法（六）——回溯法]]></title><link>https://blog.youkuaiyun.com/BabyNumber/article/details/43924291</link><guid>https://blog.youkuaiyun.com/BabyNumber/article/details/43924291</guid><author>BabyNumber</author><pubDate>Tue, 24 Feb 2015 09:41:27 +0800</pubDate><description><![CDATA[全排列的生成算法（六）——回溯法
回溯法通常是构造一颗生成树。以3个元素为例；树的节点数据可取值是1、2、3。如果某个节点为0，则表示尚未取值。
初始状态是(0，0，0)，第1个元素值可以分别挑选1，2，3，因此扩展出3个子结点。用相同方法找出这些结点的第2个元素的可能值，如此反复进行，一旦出现新结点的3个数据全非零，那就找到了一种全排列方案。当尝试了所有可能方案，即获得了问题的解答。
回溯]]></description><category></category></item><item><title><![CDATA[全排列的算法（五）——邻位互换法]]></title><link>https://blog.youkuaiyun.com/BabyNumber/article/details/43866675</link><guid>https://blog.youkuaiyun.com/BabyNumber/article/details/43866675</guid><author>BabyNumber</author><pubDate>Tue, 17 Feb 2015 16:13:38 +0800</pubDate><description><![CDATA[5.邻位互换法
是由Johnson-Trotter首先提出。如果已知n-1个元素的排列，将n插入到排列的不同位置，就得到了n个元素的排列。用这种方法可以产生出任意n个元素的排列。但是，为了产生n个元素的排列，我们必须知道并存储所有n-1个元素的排列，然后才能产生出所有n阶排列，这是一个很大的缺点。
该算法的实质是交换排列中某两个相邻的元素来产生一个新的排列。按照下面所说的算法就可以从原始排列开]]></description><category></category></item><item><title><![CDATA[全排列的算法（四）——n进位法]]></title><link>https://blog.youkuaiyun.com/BabyNumber/article/details/43635705</link><guid>https://blog.youkuaiyun.com/BabyNumber/article/details/43635705</guid><author>BabyNumber</author><pubDate>Sun, 08 Feb 2015 11:09:09 +0800</pubDate><description><![CDATA[n进位法
这个算法是将初始排列012……(n-1)作为一个n进制数，然后对它累加1，从而生成全体排列。这个算法比较简单，但是在累加过程中，会出现重复元素，所以需要将有重复元素的排列删除。这是这个算法的缺点。
从一个排列生成一个新的排列的算法如下：
第一步：在排列的第n-1 位累加1。
第二步：如果其和大于n-1，就进位，发生连续进位就连续进位直至不再发生进位为止。无进位继续。
第三步：检]]></description><category></category></item><item><title><![CDATA[全排列的算法（三）——递减进位法]]></title><link>https://blog.youkuaiyun.com/BabyNumber/article/details/43408077</link><guid>https://blog.youkuaiyun.com/BabyNumber/article/details/43408077</guid><author>BabyNumber</author><pubDate>Mon, 02 Feb 2015 14:30:02 +0800</pubDate><description><![CDATA[在递增进位法中，逆序序列最低位是逢2进1，进位频繁，这是它的一个缺点。排列的逆序序列q0，q1，……，qn-1中记录的是每个排列的元素左边比该元素大的元素个数，如果将它改成记录每个元素右边比该元素小的元素个数，就得到了一个新的序列a0，a1，……，ai，……，an-1，我们称它为中介数序列，它具有与逆序序列相似的性质：
a0=0，0≤a1≤1，0≤a2≤2，……，0≤ai≤i，……0≤an-1≤]]></description><category></category></item><item><title><![CDATA[全排列的算法（二）——递增进位法]]></title><link>https://blog.youkuaiyun.com/BabyNumber/article/details/43021021</link><guid>https://blog.youkuaiyun.com/BabyNumber/article/details/43021021</guid><author>BabyNumber</author><pubDate>Thu, 22 Jan 2015 16:10:01 +0800</pubDate><description><![CDATA[2.递增进位制数法
集合{1、2、……n-1、n}的全排列中，只有原始排列12……n的各个元素的顺序是自然顺序，其余排列的元素的顺序都要改变。为了说明元素间顺序的改变，引入了排列的逆序的概念，它在行列式理论中起着重要的作用。
设集合{1，2，……，n}的一个排列是 p0p1……pn-1，如果对于任意的k和l（0≤k，l≤n-1），当kpl，则称数对(pk，pl）是排列 p0p1……pn-1 的]]></description><category></category></item><item><title><![CDATA[排列的算法（一）——字典序算法]]></title><link>https://blog.youkuaiyun.com/BabyNumber/article/details/42706757</link><guid>https://blog.youkuaiyun.com/BabyNumber/article/details/42706757</guid><author>BabyNumber</author><pubDate>Wed, 14 Jan 2015 10:49:53 +0800</pubDate><description><![CDATA[从n个不同元素中取出n个元素的排列，称为n个不同元素的全排列。
全排列的生成算法就是对于给定的元素集合，用有效的方法将所有可能的全排列无重复无遗漏地列举出来。]]></description><category></category></item></channel></rss>