Faktoradik
Faktoradik adalah sebuah sistem bilangan yang setiap posisi angka memiliki basis sesuai dengan faktorial dari posisinya. Sistem bilangan ini memungkinkan untuk membangkitkan permutasi dalam urutan leksikografik.
Faktoradik memiliki bentuk deretan bilangan
"a"..."a""a""a""a""a", dengan setiap bilangan "a" bersifat:
Nilai sebuah faktoradik "a"..."a""a""a""a""a" dapat dengan mudah didapat menggunakan formula:
Sebagai contoh, bilangan 2,1,1,1,0
Posisi setiap bilangan, sama seperti pada sistem bilangan posisional lainnya, dinomori mulai dari 0 dari sebelah kanan.
Sehingga nilainya adalah sebesar:
2×4! + 1×3! + 1×2! + 1×1! + 0×0! = 57
Di bawah ini adalah daftar 24 faktoradik pertama beserta nilainya:
Suatu faktoradik bisa diperoleh dari sembarang bilangan formula_4 dengan algoritme sebagai berikut:Ketika berakhir, algoritme ini akan menghasilkan deretan faktoradik "a"..."a""a""a""a""a".
Pertama-tama kita harus membuat kesepakatan mengenai indeks. Indeks untuk untai dimulai dengan indeks 0 dari kiri.
Disediakan sebuah untai formula_19, dan sebuah faktoradik formula_20, maka algoritme untuk menghasilkan sebuah permutasi dari formula_19 adalah:
Ketika algoritme ini selesai, formula_22 akan merupakan permutasi dari formula_19 yang sesuai dengan formula_20
Sebagai contoh, untuk menghasilkan permutasi dari abcdefg, dengan indeks faktoradik 5341200 dengan algoritme tersebut, diberikan:
Disediakan formula_33 (masih kosong).
Pertama, mulai dari formula_34, yaitu 5. Kemudian pindahkan huruf ke-5 (indeks 5) pada untai formula_19 ke untai formula_22, yaitu huruf f. Kondisi formula_19 dan formula_22 sekarang menjadi formula_39 dan formula_40
Dengan formula_19 sekarang menjadi:
Bilangan kedua dari formula_20, yaitu formula_43 adalah 3, maka pindahkan huruf ke-3 pada untai formula_19 ke untai formula_22. Maka kondisinya menjadi formula_46 dan formula_47
Dan seterusnya, yang jika dituliskan sekaligus adalah seperti ini:
FMax := CariFaktorialTerbesar(Bilangan);
function Permutasi(Untai: STRING; Faktoradik: array of INTEGER): STRING;Using Permutations in .NET for Improved Systems Security