有效地计算字典顺序中特定元素的索引

时间:2014-08-18 23:17:57

标签: c++ indexing element lexicographic

我有四个要素:

A B C D

我可以按字典顺序排列n elements的所有排列,因此n=2

0=AA 1=AB 2=AC 3=AD ... 15=DD

如果不依靠计算,我如何计算特定元素的排序中的索引?

当我枚举我的元素0=A 1=B 2=C 3=D并且有一个字符串string时,我可以为n=2

计算这样的索引
4 * val(string[0]) + val(string[1])
string="AC" -> 4*0 + 2 = 2
string="DD" -> 4*3 + 3 = 15

如何查找任何字符串和n > 2的索引?我只是真的需要它n=2,3,4,5,但感觉应该有一个我没有看到的一般解决方案?

2 个答案:

答案 0 :(得分:3)

不仅仅是

(4 ^ (n - 1)) * val(string[0])
+ (4 ^ (n - 2)) * val(string[1])
+ ...
+ (4 ^ (0)) * val(string[n-1])

你可能用循环编程。

答案 1 :(得分:1)

如果您将这些字母{A​​,B,C,D}更改为数字{0,1,2,3},您会发现它只是四元符号,或者假设您有10个字母{A,B, C,D,E,F,G,H,I,J}并将它们更改为0 - 9,它将类似于我们熟悉的十进制表示法。因此,在四元系统中,AA = 00,DD = 33,改为十进制将是3 * 4 + 3 = 15,BC的索引将是1 * 4 + 2 = 6.