二维字母数组的唯一键

时间:2016-11-24 08:18:17

标签: c arrays algorithm

我有一个二维数组的字母。任何字母都可能因某个字母而异。 我想根据字母及其位置为这个数组创建一个唯一的键。  例如,如果数组为3 * 3且字母为{0,a,b,c,*},则数组可以采用以下形式:

0 b c
b * a
a a 0

我已经为所有r和c尝试了Key = sum(code(letter)*(r*3+c)),其中r和c是行和列,但它仍然为我提供了不同数组形式的相同键。

我想念什么?

P.S。 code(letter)是一个映射函数,用于将字母转换为值。

1 个答案:

答案 0 :(得分:3)

您需要考虑字母表的大小。如果代码和索引都是零,那么它将是:

key = Sum(code(letter)*pow(L, r*C+c))

其中L是字母数,C是列数。但请注意数字溢出。对于较大的字母或矩阵,您需要使用以下之一:

  • 减少密钥唯一的要求并使用散列(散列组合器)。
  • 键的数字类型更大,甚至是无限的算术类型,例如GMP lib
  • 如果字母分布不均匀,则压缩如arithmetic coding。但是,您仍然存在无法将特定矩阵拟合/压缩到密钥中的风险。