簡要介紹康託展開
本篇文章並不會詳細講解康託展開的數學原理,有興趣的朋友可以另行尋找。
康託展開
作用:判斷這個數在其各個數字全排列中從小到大排第幾位。比如 132,在1、2、3的全排列中排第2位。
首先定義一個特殊的進位制:0! 1! 2! 3! 4! ...
即——1 1 2 6 24 ...
可類比其他進位制,如十進位制:
1 10 100 1000 ...
則312=(2*1 + 1*10 + 3*100)
某個排列的位置演算法: ∑(比這位上的數小的數的個數 * 這位數在排列中從右到左的位數) + 1 例子:
2431 = (1*6 + 2*2 + 1*1 + 0*1) + 1 = 12
312 = (2*2 + 0*1 + 1*1) +1 = 5
312的驗證:
①123
②132
③213
④231
⑤312
⑥321
程式碼:
//階乘0!~n!的陣列,此處n=9
static const int FAC[] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};
/*
康託展開
引數:存放某個全排列的num[]陣列,如:num[]={3,1,2};全排列數字的個數,像前面 的312的n就等於3
返回值:返回這個已知全排列在全排列中的位置名次
*/
int KT(int num[],int n)
{
int ans=1,temp; //temp為暫存前面比當前位小的個數
for(int i=0;i<n;i++)
{
if(i==0)
{
ans=ans+(num[i]-1)*FAC[n-1];
}
else
{
temp=num[i]-1;
for(int j=0;j<i;j++)
{
if(num[j]<num[i])
temp--;
}
ans=ans+temp*FAC[n-1-i];
}
}
return ans;
}
相關文章
- 洛谷 - 康託展開與逆康託展開
- P5367 【模板】康託展開
- 康託展開+逆展開(Cantor expension)詳解+優化優化
- Git發展簡單介紹Git
- Comodo Positive SSL證書簡要介紹
- [譯] 關於 React Motion 的簡要介紹React
- 微服務架構的特徵簡要介紹微服務架構特徵
- 版本管理工具Git(一)簡要介紹Git
- 關於 sap.ui.base.Object 的簡要介紹UIObject
- 簡要介紹Linux網路服務的種類Linux
- 目標追蹤(Object Tracking)概念的簡要介紹Object
- 康託の複習筆記筆記
- 甄視康新零售系統開發模式詳情介紹模式
- MongoDB資料庫建立的基本規範簡要介紹MongoDB資料庫
- BookKeeper 介紹(1)--簡介
- 簡單介紹資料庫技術發展階段!資料庫
- 從docker介紹及其簡介Docker
- HTTP介紹和HTML簡介HTTPHTML
- Map簡單介紹
- SVG簡單介紹SVG
- Clickjacking簡單介紹
- 【Pandas】簡單介紹
- ActiveMQ簡單介紹MQ
- JSON簡單介紹JSON
- RPC簡單介紹RPC
- Python簡單介紹Python
- KVM簡單介紹
- RMI簡單介紹
- HTML簡單介紹HTML
- HTML 簡單介紹HTML
- JavaScript 簡單介紹JavaScript
- CSS 簡單介紹CSS
- ajax簡單介紹
- 人臉識別的簡要介紹(附例項、Python程式碼)Python
- Flownet 介紹 及光流的簡單介紹
- 簡單介紹python中的mock介面開發PythonMock
- Oracle RAC簡介與要點Oracle
- AOP的簡單介紹