如何在C++中将10位映射到6位(尽可能高效)?

Jim*_*mmy 1 c++ optimization logic function neural-network

所以我在功能上知道我想要发生什么,我只是不知道让计算机做到最好的方法...在C++ ...

我想实现一个将10位序列映射到6位序列的C++函数.

没关系这些位现在是什么...有2 ^ 10 = 1024个可能的输入.有2 ^ 6 = 64种不同的输出.可能有很多模式.很明显很多模式.但它很复杂.这是一个已知的映射,只是一个复杂的映射.

输出只是64种可能之一.也许他们都没有被使用.他们可能不会.但假设他们这样做.

现在,我正在考虑一个四重嵌套的switch语句,它只处理1024个案例中的每一个并负责业务内联,为任何指向我传递给该函数的结构的指针分配适当的值.这似乎是天真的,有点慢.不是我已经实现了它,但这就是我想先问你的原因.

对于本系统希望支持的语句,这个基本函数(映射)必须在每个语句节点上运行,通常不止一次.我问你,如何在C++中尽可能高效地将10位映射到6位?

我知道映射是什么,我知道10位的哪些输入与6位的输出一起...我可以完全硬编码...不知何故?多开关是如此丑陋.如何将10位映射到6位?!神经网络?记忆松饼?你会怎么做?

自我注意:所以这就是为什么我不是查找表的粉丝.让我们假设所有输入都是同等可能的(当然它们不是,并且可以更有效地排序,但仍然是)然后它将平均需要数组的512个内存前进来检索输出值......看起来如果你做的话一个(全局的,为什么不是)二进制树10级深,你覆盖1024个输入并且可以平均只检索10步的输出......如果有好的模式可能会更少...给定一个确定性的函数是经常运行,如何最好地从已知输入中检索已知输出?

Mys*_*ial 6

我会使用1024个元素的查找表.所以硬编码,只需通过索引访问它.

这节省了对大量switch语句的需求,并且可能更具可读性.