康托展开:已知一个排列,求这个排列在全排列中是第几个。。。康托展开逆运算:已知在全排列中排第几,求这个排列。。。 康托展开
原创
2023-03-02 05:57:12
192阅读
康托展开
介绍
其实一个序列的康托展开值就是求一个序列在所有全排列中从小到大排列是排第几的。也就是说我们把所有序列按照大小都排号了,用这个排号作为它的哈希值,不得不说,巧妙的一匹。
计算思路
假设当前序列为321,询问它的康托展开值cantor("321"),在所有全排列中比它小的易知有5个,我们首先看最高位的3,想要它这个序列小,一共有两种情况:
最高位比3小,后面随意
原创
2023-08-19 23:01:41
120阅读
简述康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩。设有n个数(1,2,3,4,…,n),可以有组成不同(n!种)的排列组合,康托展开表示的就是是当前排列组合在n个不同元素的全排列中的名次。原理X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中, a[i]为整数,并且0 <= a[i...
原创
2022-03-10 17:09:51
149阅读
康托展开 康托展开就是指当前n个元素的排列在这n个元素的全排列里的排名(从小到大) 逆康托展开就是已知某排列在全排列的排名
原创
2022-11-25 02:24:48
192阅读
简述康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩。设有n个数(1,2,3,4,…,n),可以有组成不同(n!种)的排列组合,康托展开表示的就是是当前排列组合在n个不同元素的全排列中的名次。原理X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中, a[i]为整数,并且0 <= a[i...
原创
2021-07-13 15:24:15
519阅读
公式:X = a[i] * (n-1)! + a[i-1] * (n-2)! + … + a[1] * 0!
其中a[i]表示后面比该元素小的元素的个数
举个例子,有5个数1 2 3 4 5
共有5个元素,所以一共有5!种排序方法
如果用康托展开序列35142
第一个元素是3,在后面的序列中,有2个比3小的...
转载
2023-02-14 12:48:48
167阅读
康托展开 康托展开的公式是 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 其中,ai为当前未出现的元素中是排在第几个(从0开始)。 这个公式可能看着让人头大,最好举个例子来说明一下。例如,有一个数组 s = ["A", "B", "C", "D"],它的一个排列 s1 = ["D", "B", "A", "C"],现在要把 s1 映射成 X。n 指的是数组的长度,也就是4,所
转载
2013-08-12 19:43:00
134阅读
2评论
题目链接 P5367 【模板】康托展开 【模板】康托展开 题目描述 求 \(1\sim N\) 的一个给定全排列在所有 \(1\sim N\) 全排列中的排名。结果对 998244353 取模。 输入格式 第一行一个正整数 \(N\)。 第二行 \(N\) 个正整数,表示 \(1\sim N\) 的 ...
转载
2021-09-17 17:27:00
194阅读
2评论
http://zh.wikipedia.org/wiki/康托展开 http://www.nocow.cn/index.php/康托展开 http://blog.sina.com.cn/s/blog_4bf7b6580100l2zs.html http://www.skymoon.biz/?p=86 http://www.cnblogs.com/1-2-3/archive/2011/04/...
转载
2014-04-24 15:47:00
72阅读
2评论
康托展开
原创
2023-02-17 08:52:40
186阅读
康托展开:X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1
转载
2021-09-03 14:04:12
97阅读
康托展开
原创
2021-08-31 15:07:20
158阅读
把一个整数X展开成如下形式X=a【n】*n!+a【n-1】*(n-1)!+...+a【2】*2!+a【1】*1!其中,a为整数,并且0<=a<i,i=1,2,..,n 这就是康托展开。 康托展开就是一个全排列到一个整数的双射,就是一种特殊的哈希函数,经常用来做可以用全排列表示状态的搜索的哈希函数(8数码,魔板等问题)。 康托展开的公式是 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 其中,ai为当前未出现的元素中是排在第几个(从0开始)。 这个公式可能看着让人头大,最好举个例子来说明一下。例如,有一个数组 s =...
转载
2012-07-20 22:22:00
133阅读
2评论
康托展开/逆展开,快速的求全排列中的某个排列 康拓展开:ans=a1*(n-1)!+a2*(n-2)!+......+an*(0)!; ans表示n个数全排列中的第几个排列(从0开始查),ai表示这一位数在包括他和后面所有的数中排第几(从0开始) //康托展开 f[]={1,1,2,6,24,120
转载
2017-02-15 20:44:00
112阅读
2评论
康托展开题目描述输入两个自然数m,n期中1输出给定的排列在n个数全排列中按小到大第几个出现
原创
2023-07-07 13:29:34
26阅读
康托展开:X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 其中,a为整数,并且0康托展开可以求出 某数列的 一个全排列 是
原创
2023-07-18 19:10:33
89阅读
康托展开 简介:对于给定的一个排列,求它是第几个,比如54321是n=5时的第120个。(对于不是1~n的排列可以离散化理解) 做法: ans=a[n]*(n-1)!+a[n-1]*(n-2)!+~~~~a[1]*0!.(a[n]表示在给定的排列中,还没出现的,而且比当前值小的数的个数) 如果说对于
转载
2017-08-11 10:41:00
458阅读
2评论
/*摘自维基百科,由于维基现在又被禁了,所以就不给原文链接了*/康托展开[编辑]康托展开是一
转载
2022-09-26 14:42:58
141阅读
·康托展开: 1.先算 1~n 的阶乘 jc[1]~jc[n] 2.计算每一位后面有几个比这一位小的数 , 记为 num[i] 3.公式: ans+=num[i]*jc[n-i] ( i : 1~n ) < ※ans+1※ 即为 该展开式为全排列中的第几个 > ·康托逆展开: 1.先算 1~n 的阶 ...
转载
2021-08-08 21:08:00
159阅读
2评论
康托展开表示的是当前排列在n个不同元素的全排列中的名次。比如213在这3个数所有排列中排第3。 那么,对于n个数的排列,康托展开为: 其中表示第i个元素在未出现的元素中排列第几。举个简单的例子: 对于排列4213来说,4在4213中排第3,注意从0开始,2在213中排第1,1在13中排第0,3在3中排第0,即: ,这样得到4213在所有排列中排第ans=20
原创
2023-06-01 07:40:41
94阅读