2

我需要根据以下内容创建快速 4D 查找表:1-它将接收 4 个输入变量(u、v、i、j),每个变量的范围从 0 到 15 2-查找表返回 8 位的预计算值如何我可以用 C 语言用非常快的代码实现这个 4D 查找表吗

4

1 回答 1

3

只需在堆栈上创建一个 4 维数组。16^4 字节的大小应该适合大多数平台上的堆栈,否则使其成为静态或全局的。它为编译器提供了有关布局的完整知识,它是一种众所周知且常用的语言结构,它应该可以很好地优化:

  uint8_t lookup[16][16][16][16];   // global table about 64KB 


  int main(int, char **)
  {
       ...

当然,您可以制作一维数组uint8_t lookup[16*16*16*16]并乘以您的值lookup[u*16*16*16 + v*16*16 + i*16 + j],但我非常怀疑您是否能够使其比 4-dim 数组具有更高的性能(编译器无论如何都会在内部进行这种乘法)

由于您要询问初始化,这里有一个如何初始化 4-dim 数组的示例。为简单起见,它只是[4][4][4][4],因此您必须将其增加到 16(16 个 16 行的块,16 个 16 个数字的系列。

uint8_t test[4][4][4][4]= {
       { // [0][x][y][z]
         { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, 
         { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, 
         { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, 
         { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }  },

       { // [1][x][y][z]
         { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, 
         { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, 
         { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, 
         { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }  },

       { // [2][x][y][z]
         { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, 
         { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, 
         { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, 
         { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 }  },                  

       { // [3][x][y][z]
         { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, 
         { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, 
         { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, 
         { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 }  }  
};
于 2013-06-13T09:04:43.297 回答