康託展開筆記
阿新 • • 發佈:2021-07-06
變進位制數
定義
所謂變進位制數,就是每一位進位制不一定相同的數,形式化的來講:
對於一個變進位制 \(A =\{a_1,a_2, a_3 ... a_n\}\) , \(a_i\) 表示第 \(i\) 位的一個 \(1\) 相當於第 \(i-1\) 位的一個 \(a_i\) .特別的, \(a_1 = 1\)
變進位制數轉十進位制數
就像 \(k\) 進位制數轉十進位制數一樣, 設變進位制數第 \(i\) 位是 \(b_i\), 那麼轉成十進位制就是 \(\sum_{i=1}^{n}b_i\prod_{j=1}^{i}a_j\)
十進位制數轉變進位制數
就像十進位制數轉 \(k\) 進位制數一樣, 設變進位制數第 \(i\)
康託展開
用於求一個排列的排名.
對於排列的每一位,分別考慮有多少排列之前位和這個排列一樣,這一位比這個排列小, 顯然這樣可以做到不重不漏
設排列是一個 \(1-n\) 的排列,對於排列的第 \(i\) 位,比它小的排列的數量就是 \(1-n\) 中第 \(i\) 位以及之前沒有出現的比第 \(i\) 位的數小的數的數量, 再乘上 \((n-i)!\)
就是先使這一位比原來小,後面幾位隨便排。
最後把答案加起來就行。
通過樹狀陣列維護比當前數小的沒有出現的數的數量可以優化到 \(O(n\lg n)\)