当前位置: 首页 > news >正文

康托展开

康托展开:求一组数在全排列中第几小

例如:{1 ,2, 3, 4, 5, 6} 求 135264 在全排列中的第几小?

时间复杂度:

康托展开 O(n)

原理: 康托展开的公式是 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 其中,ai为当前未出现的元素中是排在第几个(从0开始)。

1是当前未出现的数字中最小(第0小)所以 0*5! 因为1排在第一个位置 后面有5个数 所以是5!

3是当前未出现的数字中第一小 所以1*4!

5是当前未出现的数字中第二小 所以2*3!

下面依次类推

X=0*5! + 1*4! + 2*3! + 0*2! + 1*1! + 0 =37

也就是说 135264 在全排列中 它的前面还有37个比它小的数字

所以 它是第38小的数字。

sizeof(s)/sizeof(*s) s为数组名 这个式子是求数组的长度。

代码:

 1 #include <cstdio>
 2 
 3 const int fac[] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320};//阶乘
 4 
 5 int KT(int a[],int n)
 6 {
 7     int i, j, cnt, sum;
 8     sum = 0;
 9     for(i=0;i<n;i++)
10     {
11         cnt = 0;
12         for(j=i+1;j<n;j++)
13         {
14             if(a[i]>a[j]) cnt++;
15         }
16         sum = sum + cnt * fac[n-i-1]; 
17     }
18     return sum;
19 }
20 
21 int main()
22 {
23     int s[] = {1,3,5,2,6,4};
24     int re;
25     re = KT(s,sizeof(s)/sizeof(*s));
26     printf("%d",re+1);
27     return 0;
28 }

 

转载于:https://www.cnblogs.com/16-CHQ/p/6404215.html

相关文章:

  • CC254x/CC2540/CC2541库函数速查(转)
  • Netscaler的超高端口复用助力应对公网地址紧张
  • HTML页面跳转的5种方法
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • 应该知道的Linux技巧(转载)
  • Oracle如何查看执行计划
  • python 图片上添加文字
  • 面试题35-第一个值出现依次的字符
  • VIM空格和TAB转换
  • redhat 6 配置 yum 源的两种方法
  • 算法笔记_041:寻找和为定值的多个数(Java)
  • 用外部表的方式查询当天数据库alert日志文件
  • css 如何让背景图片拉伸填充避免重复显示
  • github常用操作
  • Codeforces 768C:Jon Snow and his Favourite Number
  • 「译」Node.js Streams 基础
  • Asm.js的简单介绍
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • jQuery(一)
  • Laravel 中的一个后期静态绑定
  • Mithril.js 入门介绍
  • ng6--错误信息小结(持续更新)
  • passportjs 源码分析
  • PHP面试之三:MySQL数据库
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 深度学习中的信息论知识详解
  • 新版博客前端前瞻
  • 新手搭建网站的主要流程
  • 一道闭包题引发的思考
  • 一些关于Rust在2019年的思考
  • 在Unity中实现一个简单的消息管理器
  • 1.Ext JS 建立web开发工程
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (搬运以学习)flask 上下文的实现
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (转)平衡树
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net 4.0发布后不能正常显示图片问题
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .net经典笔试题
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [ActionScript][AS3]小小笔记
  • [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算
  • [C语言]编译和链接
  • [hdu1561] The more, The Better 【树形DP】