国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

康托展開與逆康托展開

2019-11-08 20:09:17
字體:
供稿:網(wǎng)友

康托展開

康托展開就是指當(dāng)前n個元素的排列在這n個元素的全排列里的排名(從小到大) 逆康托展開就是已知某排列在全排列的排名,求這個排列

那么對于n個數(shù)來說,康托展開為:,在這個公式中an表示第i個元素在未出現(xiàn)的元素中排第幾。如:對于507來說,5在507中排第1(從0開始),0在07中排第0,7排第0即a3=1,a2=0,a1=0,這樣得到507在所有排列中ans=2(從零開始)

代碼實(shí)現(xiàn):

ll h[maxn]; //階乘數(shù)組void init(int n){ h[0] = 1; for(ll i=1;i<n;i++) h[i] = h[i-1]*i;}ll slove(char a[]){ //康托定理 int len = strlen(a); ll res = 0; for(int i=0;i<len;i++) { int tmp = 0; for(int j=i+1;j<len;j++) { if(a[i]>a[j]) tmp++; } res += tmp*h[len-i-1]; } return res;}

逆康托展開

void slove(ll n,ll m){ n--; vector<int> v; vector<int> a; for(int i=1;i<=m;i++) v.push_back(i); for(int i=m;i>=1;i--) { LL r = n % f[i-1]; LL t = n / f[i-1]; n = r; sort(v.begin(),v.end()); a.push_back(v[t]); v.erase(v.begin()+t); } vector<int>::iterator it; for(it = a.begin();it != a.end();it++) cout<<*it; cout<<endl; }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 台北县| 新余市| 镇坪县| 石河子市| 长白| 山阴县| 孝感市| 盐源县| 萍乡市| 鄂托克旗| 大余县| 从江县| 襄汾县| 湛江市| 晋州市| 饶河县| 龙门县| 北碚区| 新乐市| 阿勒泰市| 布尔津县| 天长市| 苏尼特左旗| 望奎县| 乌苏市| 泽州县| 尼玛县| 岑巩县| 平度市| 东乡| 简阳市| 遂昌县| 高陵县| 绥宁县| 淮阳县| 雅江县| 江油市| 翁源县| 沅陵县| 会昌县| 武清区|