Computing the Factoradic Rank of a Permutation (N choose K)

岁酱吖の 提交于 2019-11-29 08:12:26

After a good night sleep and a little help from pen & paper, I figured it out. In case anyone is interested:


For instance, the 42nd 5 choose 3 permutation is 4-2-5, but if you look at Pr_Unrank(), where array_slice() is called, you'll notice that the actual permutation (in lexicographic order) is actually 4-2-5[-1-3], the last two elements are discarded so that you only end up with k elements.

This is very important to compute the decimal representation of the factoriadic (3-1-2[-0-0]):

  • 4-2-5 = (2! * 3) + (1! * 1) + (0! * 2) = 9
  • 4-2-5-1-3 = (4! * 3) + (3! * 1) + (2! * 2) + (1! * 0) + (0! * 0) = 82

Still, 82 is not the right answer. To get it, we must divide it by the result of:

  • Pr(5, 5) / Pr(5, 3) (=) (5 - 3)! = 120 / 60 = 2

So 82 / 2 is 41, all that I need to do is add 1 to get the ranking starting at 1.


Array // 5 choose 3 permutations
(
    [1] => 1-2-3
    [2] => 1-2-4
    [3] => 1-2-5
    [4] => 1-3-2
    [5] => 1-3-4
    [6] => 1-3-5
    [7] => 1-4-2
    [8] => 1-4-3
    [9] => 1-4-5
    [10] => 1-5-2
    [11] => 1-5-3
    [12] => 1-5-4
    [13] => 2-1-3
    [14] => 2-1-4
    [15] => 2-1-5
    [16] => 2-3-1
    [17] => 2-3-4
    [18] => 2-3-5
    [19] => 2-4-1
    [20] => 2-4-3
    [21] => 2-4-5
    [22] => 2-5-1
    [23] => 2-5-3
    [24] => 2-5-4
    [25] => 3-1-2
    [26] => 3-1-4
    [27] => 3-1-5
    [28] => 3-2-1
    [29] => 3-2-4
    [30] => 3-2-5
    [31] => 3-4-1
    [32] => 3-4-2
    [33] => 3-4-5
    [34] => 3-5-1
    [35] => 3-5-2
    [36] => 3-5-4
    [37] => 4-1-2
    [38] => 4-1-3
    [39] => 4-1-5
    [40] => 4-2-1
    [41] => 4-2-3
    [42] => 4-2-5
    [43] => 4-3-1
    [44] => 4-3-2
    [45] => 4-3-5
    [46] => 4-5-1
    [47] => 4-5-2
    [48] => 4-5-3
    [49] => 5-1-2
    [50] => 5-1-3
    [51] => 5-1-4
    [52] => 5-2-1
    [53] => 5-2-3
    [54] => 5-2-4
    [55] => 5-3-1
    [56] => 5-3-2
    [57] => 5-3-4
    [58] => 5-4-1
    [59] => 5-4-2
    [60] => 5-4-3
)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!