算法从整数集中的元素组合中获取唯一的组ID

时间:2012-03-15 15:34:48

标签: algorithm

假设我有一行包含3 +属性A,B,C和其他Attrs

row1: A=1, B=5, C=10, Other Attrs
row2: A=1, B=5, C=10, Other Attrs
row3: A=2, B=5, C=10, Other Attrs
row4: A=2, B=5, C=10, Other Attrs
row5: A=3, B=6, C=11, Other Attrs
row6: A=3, B=6, C=11, Other Attrs

因此,如果我想通过A,B,C,row1的组合为每一行分配组ID,则row2具有相同的组id x,第3行第4行具有组id y,第5行第6行具有组id z。

一个简单的解决方案是:

group id = A * S + B * S^2 + C * S^3 (S is the max integer number)

但我的问题是我需要一个算法来从组ID

中退出每个A,B,C值

例如,我需要能够从组ID x中退出A = 1,B = 5,C = 10

2 个答案:

答案 0 :(得分:6)

首先,这就足够了:

group id = A + B * S + C * S^2;

要回到A,B和C:

A = id % S;

B = (id / S) % S;

C = (id / S^2);

其中/是整数除法,%是模数。

答案 1 :(得分:0)

根据您的示例,更简单的方法是:

a * 10^6 + b*10^3 + c

会给你

001005010
001005010
002005010
002005010
003006011
003006011

和此函数的反函数非常简单。如果您的号码可能超过3位数,请相应调整。