【发布时间】:2012-07-07 17:25:06
【问题描述】:
在我正在编写的程序中,我想开发一种散列算法,它可以将 RGB 颜色、字符串或两者都映射到唯一且相对较小的索引。
这里的目标是尽可能减少冲突,同时保证没有两种颜色通过算法是相似的(在感知上;例如红色、蓝色、橙色)。
以我有限的知识,数组似乎是直接访问数据结构的最佳选择,但我不想创建一个非常大的数组。鉴于我必须在 C++ 中为数组分配内存,我在开发这样的算法时遇到了麻烦。
感谢任何提示!
【问题讨论】:
-
RGB 颜色每个颜色元素有 8 位吗? (共 24 位)。然后我看不到散列它的意义。另外,你为什么不直接使用 CRC32 呢?你可以用它散列任何数据。但如前所述,使用 CRC32 对小于或等于 32 位的数据进行散列是没有意义的。
-
每个元素确实有 8 位。请原谅我的问题,但为什么没有必要散列呢?如您所见,我仍在解决问题。
-
您能解释一下这一切的目的吗?我无法理解为什么需要散列。您是否只想通过某个随机值访问某个数组元素,例如您是否想执行以下操作:
elements["color_string_here"] = 1337和elements[0xFE63AA37CB] = 1337,然后访问该元素并获取1337值...? -
散列的目的是将较大的数据压缩成可以快速比较的简单值。例如,如果该值的大小为 32 位,则不需要对其进行散列,因为您可以轻松比较 32 位值。但我不知道您要做什么,也许您想要 16 位或 8 位哈希?我不知道。
-
我有一个“主题”类,它有两个与之关联的对象:一个字符串标签和一个颜色(8 位 RGB)。在我的程序中,我需要收集一些上述主题,从中我可以通过颜色或标签轻松快速地访问主题。
标签: c++ arrays string colors hash