康托展开式

原创 2013年12月02日 10:07:03
格式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0!
康托展开式用途:
       1:康托展开式是一个全排列到自然数双射(两个集合之间一一对应),常用于构建Hash表时候的时空压缩。
       2:康托展开式可用于计算当前按某一全序关系全排列中的位置,因此可逆。

对于第一条不多加解释,现在着重解释第二条。这里注意一点,康托展开式一般用在序列中所有元素不重复的情况。而重复的情况下,需要稍作调整(具体例子具体分析)。

举例
               3 5 7 4 1 2 9 6 8 展开为 98884。
               因为  X=2*8!+3*7!+4*6!+2*5!+0*4!+0*3!+2*2!+0*1!+0*0!=98884.

解释:

          排列的第一位是3,比3小的数有两个,以这样的数开始的排列有8!个,因此第一项为2*8!

          排列的第二位是5,比5小的数有1、2、3、4,由于3已经出现,因此共有3个比5小的数,这样的排列有7!个,因此第二项为3*7!

          以此类推,直至0*0!

     在这个例子中,全序关系为自然数大小的关系。其中第i个位置的权重为i!。每个位置的系数为当前位置逆序奇偶的个数。计算出来的康托展开式结果为该序列在按从大到小全排列中的位置(由于序列中每个数字都不同,所以得出的结构唯一。)。

康托展开式逆运算:
     可以利用康托展开式的结果直接定位某一排列在全排列中的位置,进而求出该全排列。


注:本文来自维基百科,并加入了自己的一些理解。
http://zh.wikipedia.org/wiki/%E5%BA%B7%E6%89%98%E5%B1%95%E5%BC%80






























算法:康托展开式——实现全排列序列与序号的映射

康托展开式实现了由1到n组成的全排列序列到其编号之间的一种映射,下面会给出例子,虽然这个公式应用不是很多,但这种思想值得学习,首先给出其公式: X=an*(n-1)!+an-1*(n-2)!+...+...
  • lrgdongnan
  • lrgdongnan
  • 2016年06月07日 10:23
  • 1950

【算法】康托展开

1. 概述 康托展开是将n个数的全排列映射到自然数空间0, 1, ... , n!-1的双射。在介绍康托展开之前,先介绍几个概念:变进制数、逆序对。 1.1 变进制 我们经常使用进制有:二...
  • lifehack
  • lifehack
  • 2013年12月06日 11:22
  • 1671

康托展开式

康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。 以下称第x个全排列是都是指由小到大的顺序。 公式...
  • gaotong2055
  • gaotong2055
  • 2013年10月16日 18:54
  • 772

康托展开及其逆运算 详解

康托展开 康托展开逆运算 详解
  • lx417147512
  • lx417147512
  • 2014年04月30日 16:52
  • 4979

算法之康托展开式

康托展开式: X=an*(n-1)!+(an-1)*(n-2)!+...+ai*(i- 1)!+...+a2*1!+a1*0! (解决一些序列问题的算法)    其中...
  • sword_anyone
  • sword_anyone
  • 2017年05月21日 10:50
  • 173

排列序数-康托展开式

题目: X星系的某次考古活动发现了史前智能痕迹。 这是一些用来计数的符号,经过分析它的计数规律如下: (为了表示方便,我们把这些奇怪的符号用a~q代替) abcdefghijklmnopq 表示0...
  • qq_35239633
  • qq_35239633
  • 2017年03月29日 18:01
  • 264

康托逆展开式

关于康托展开式的问题我已经在第一篇文章提到了,需要的朋友可以点进去看看。 ACM题目之排列序数 康托逆展开式就是给你一个数组,然后让你求出其全排列第n大的序列. 这里借用百度百科给的大家解释下 ...
  • MagicScaring
  • MagicScaring
  • 2016年07月23日 17:04
  • 207

算法之康托展开式(正规)

康托展开  康托展开的公式是 X=an(n-1)!+an-1*(n-2)!+…+ai*(i-1)!+…+a2*1!+a1*0!* 其中,ai为当前未出现的元素中是排在第几个(从0开始)。     ...
  • sword_anyone
  • sword_anyone
  • 2017年05月21日 11:03
  • 177

全排列编码于解码-康托展开式

在一些问题中需要对排列状态进行编码以便判重,如果使用完美hash来实现的话需要编码数量在计算机承受范围内,康托展开式符合条件 公式:X=An*(n-1)!+An-1*(n-2)!+......A2*1...
  • TamingBoy
  • TamingBoy
  • 2017年12月26日 16:05
  • 69

康托展开式---我排第几+逆康托展开

之前一直不想看这个康托展开定理因为真的很不理解,但是现在还是勇敢的面对了~  {1,2,3,4,...,n}表示1,2,3,...,n的排列如 {1,2,3} 按从小到大排列一共6个。123 1...
  • meme_y
  • meme_y
  • 2013年04月05日 20:53
  • 523
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:康托展开式
举报原因:
原因补充:

(最多只允许输入30个字)