首页 > 其他分享 >康托展开

康托展开

时间:2023-07-16 09:56:38浏览次数:30  
标签:int 序要 52413 康托 include 展开 字典

简介:康托展开可以求解一个排列的序号,比如:12345 序号为 1  ,12354序号为2,按字典序增加编号递增,依次类推。
康托逆展开可以求解一个序号它对应的排列是什么。

 

康托展开解释:

先给出康托展开的公式:

                                                     

 

拿52413举例子:

1、首先看第一个数 5,不管第一位是什么数,后面都有四位数,那么这四位数全排列的方式有 4!种,而如果第一位是 1 或 2 或 3 或 4 都会比5开头的字典序要小,所以可以令1,2,3,4分别作为开头,这样的话就会有 4 * 4!种排法要比 52413这种排法的字典序要小。

那么第一个数是1,2,3,4时候的字典序的个数数完了是 4 * 4! 种,且这些字典序都要比52413的字典序要小。

还有其他的排列方式比52413的字典序要小的吗?

2、那么就可以固定第一位5,找下一位2,这时5已经用过了,所以从剩下的 1,2,3,4 里挑选比2小的数,一共1个,后面还剩三位,也就是3!种排列方式,那么这时候比 52413 字典序要小的又有 1 * 3!种,也就是当5在第一位,1在第二位的时候。

3、再看第三位4,这时5,2都用了,所以从剩下的 1,3,4三个数中找比4小的数的个数,有两个比4小原理同上,所以这时候也可以有 2 * 2!种排列方式的字典序小于 52413

4、再看第四位1,这时候会有 0 * 1!种

5、再看第五位3,这时候会有0 * 0!种

 

/***** 这里以字符串进行展示  字符串可泛化性好 ******/
 
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
 
/*******打出1-n的阶乘表*******/
int f[20];
void jie_cheng(int n)
{
    f[0] = f[1] = 1; // 0的阶乘为1
    for(int i = 2; i <= n; i++) f[i] = f[i - 1] * i;
}
 
/**************康托展开****************/
string str;
int kangtuo()
{
    int ans = 1;  //注意,因为 12345 是算作0开始计算的,最后结果要把12345看作是第一个
    int len = str.length();
    for(int i = 0; i < len; i++){
        int tmp = 0;//用来计数的
 
        for(int j = i + 1; j < len; j++){
            if(str[i] > str[j]) tmp++;
            //计算str[i]是第几大的数,或者说计算有几个比他小的数
        }
 
        ans += tmp * f[len - i - 1];
    }
    return ans;
}
 
int main()
{
    jie_cheng(10);
    string str = "52413";
    cout<<kangtuo()<<endl;
}

 

标签:int,序要,52413,康托,include,展开,字典
From: https://www.cnblogs.com/whatdo/p/17557465.html

相关文章

  • 2023-07-13:如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串
    2023-07-13:如果你熟悉Shell编程,那么一定了解过花括号展开,它可以用来生成任意字符串。花括号展开的表达式可以看作一个由花括号、逗号和小写英文字母组成的字符串定义下面几条语法规则:如果只给出单一的元素x,那么表达式表示的字符串就只有"x"。R(x)={x}例如,表达式"a"......
  • elment ui展开行嵌套表格 进行修改数据后展开行自动收起
    https://it.cha138.com/python/show-74200.html tags:篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElmentPlus表格展开行后,进行修改数据后展开行自动收起相关的知识,希望对你有一定的参考价值。ElmentPlus表格展开行后,进行修改数据后展开行自动收起场景:在......
  • el-tree树点击全选按钮,全部展开并且全选
    先看图:代码如下://全部选中qxClick(){this.isQx=!this.isQx;//判断按钮的状态this.expandAll();if(this.isQx){console.log(this.isQx,"-------------------------------",this.datas);//设置this.$r......
  • 前端Vue自定义精美悬浮菜单按钮fab button 可设置按钮背景颜色 菜单按钮展开条目
    前端Vue自定义精美悬浮菜单按钮fabbutton可设置按钮背景颜色菜单按钮展开条目,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13321效果图如下:cc-suspensionMenu使用方法<!--scrollShow:是否显示滑动到顶悬浮按钮 color:悬浮按钮背......
  • vue 兼容 展开语法
    js的展开语法最低兼容到chrome的60版本,客户端的chrome版本如果低于这个版本就需要做兼容项目根目录找到.browserslistrcn文件(有的项目是在package.json中配置browserslistrcn,配置内容是一样的),其后添加chrome最低兼容至哪个版本,如下>1%last2versionsnotdeadChro......
  • 记录--多行标签超出展开折叠功能
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言 记录分享每一个日常开发项目中的实用小知识,不整那些虚头巴脑的框架理论与原理,之前分享过抽奖功能、签字功能等,有兴趣的可以看看本人以前的分享。 今天要分享的实用小知识是最近项目中遇到的标签相关的功......
  • 展开语法和剩余语法(剩余参数)都是三个点...
    展开语法(Spreadsyntax),可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开;还可以在构造字面量对象时,将对象表达式按key-value的方式展开;剩余参数语法允许我们将一个不定数量的参数表示为一个数组。区别是展开语法是把一个变量展开,剩余参数是一个参数用来代......
  • 傅里叶展开作图
     原文地址:https://www.cnblogs.com/liqinglucky/p/fourier.htmlimportmatplotlib.pyplotaspltimportnumpyasnpt=np.arange(-2*np.pi,2*np.pi,0.01)s=(4*np.sin(t))/(np.pi)+(4*np.sin(3*t))/(3*np.pi)plt.plot(t,s)plt.xlabel('time(s)')plt.yla......
  • DevExpress GroupControl面板收缩展开
    1#regionGroupControl面板缩进展开绑定2privatevoidBindGroupControl(DevExpress.XtraEditors.GroupControlgroupControl)3{4DevExpress.XtraEditors.ButtonsPanelControl.ButtonImageOptionsbuttonImageOptions1=newDevExpres......
  • el-tree 树的全部展开和收起
      https://blog.csdn.net/weixin_46156770/article/details/122696483......