c - 二维字母数组的唯一键

标签 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 是行和列,但它仍然为我提供了不同数组形式的相同 key 。

我错过了什么?

附注code(letter) 是将字母转换为值的映射函数。

最佳答案

您需要考虑字母表的大小。如果代码和索引全部从零开始,则为:

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

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

  • 降低 key 唯一性的要求并使用哈希(哈希组合器)。
  • 键的更大数字类型,甚至无限的算术类型,例如 GMP lib .
  • 压缩,例如 arithmetic coding如果字母分布不均匀。但是,您仍然面临无法将特定矩阵安装/压缩到 key 中的风险。

关于c - 二维字母数组的唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40781123/

相关文章:

c - 在 C 中将字符串转换为小写/计算单词时出现问题

C++ 从 'char' 到 'const char' 的无效转换

c - 如何检查C中结构体数组中的数字是否存在

c - 返回 char* 的空数组

在 MVSC 中为 cURL 创建字符串流

c - 在 c 的子函数中分配内存时出现奇怪的段错误

android - 使用 strings.xml 中的字符串数组填充 string[] 时出现问题

algorithm - 逆霍夫曼编码

algorithm - 不。从 1 到 n 的数字排列,其中 i >i+1 和 i-1

python - 嵌套 while 循环的运行时间