我有一个无符号整数数组,每个整数对应一个包含12个字符的字符串,该字符串可以包含4种不同的字符,即'A'、'B'、'C'和'D'。因此,数组将包含4^12 = 16777216个元素。数组中元素的顺序是任意的,我可以选择哪个元素与哪个字符串相对应。到目前为止,我已经简单地实现了以下内容:
unsigned int my_array[16777216];
char my_string[12];
int index = string_to_index(my_string);
my_array[index] = ...;
string_to_index()
函数每个字符分配2位,具体如下:
A --> 00, B --> 01, C --> 10, D --> 11
例如,ABCDABCDABCD对应的索引为(000110110001101100011011)2 = (1776411)10
但是,我知道用于访问数组的每个字符串都是前一个字符串向左移动一位并带有一个新的最后字符。例如,在使用ABCDABCDABCD访问后,下一次访问将使用BCDABCDABCDA、BCDABCDABCDB、BCDABCDABCDC、BCDABCDABCDD。因此,我的问题是: 是否有更好的方法来实现
string_to_index
函数,以考虑这个事实,使连续访问的元素在数组中更接近?我希望通过这样做来提高缓存性能。编辑:也许我表达不太清楚:我正在寻找完全不同的字符串索引对应方案,使ABCDABCDABCD和BCDABCDABCDA的索引更接近。