【发布时间】:2011-11-27 11:06:42
【问题描述】:
所以我从功能上知道我想要发生什么,我只是不知道让计算机做到这一点的最佳方法......在 C++ 中......
我想实现一个将 10 位序列映射到 6 位序列的 C++ 函数。
别管这些位现在代表什么...有 2^10 = 1024 种可能的输入。有 2^6 = 64 个不同的输出。应该有很多图案。显然有很多图案。但这很复杂。这是一个已知的映射,只是一个复杂的映射。
输出只是 64 种可能性之一。也许他们都没有习惯。他们可能不会。但假设他们这样做。
现在,我正在考虑一个四重嵌套的 switch 语句,它只处理 1024 个案例中的每一个,并处理内联业务,为指向我传递给此函数的任何结构的任何指针分配适当的值。这似乎很幼稚,而且有点慢。并不是说我已经实现了,但这就是为什么我想先问你。
这个基本功能(映射)必须在每个语句节点上运行,通常不止一次,因为该系统希望支持尽可能多的语句。请问大家,如何在C++中尽可能高效地将10位映射到6位?
我知道映射是什么,我知道哪些 10 位输入与哪些 6 位输出相匹配……我完全可以对它进行硬编码……不知何故?多功能开关太丑了。如何将我的 10 位映射到 6 位?!神经网络?记忆松饼?你会怎么做?
自我说明:这就是我不喜欢查找表的原因。让我们假设所有输入的可能性相同(当然它们不是,并且可以更有效地排序,但仍然如此)然后平均需要 512 个数组的内存推进来检索输出值......似乎如果你让一棵(全局,为什么不)二叉树 10 级深,您可以覆盖 1024 个输入,并且平均只需 10 步即可检索输出……如果有好的模式,可能更少……给定一个确定性函数运行如此频繁,如何最好地从已知输入中检索已知输出?
【问题讨论】:
-
只使用 & 有什么问题。你不能只做
number & 0x3f,它应该只删除第一位。 -
输入的数据类型是什么?如果它只是一个整数,那么查找表是完美的。如果不是,那么是的,无论如何您都必须进行多达 10 次比较。在这种情况下,它可能与大量 switch 语句的速度相同。但是我无法想象构建一个 1024 入口 switch 语句需要多长时间......
标签: c++ function optimization logic neural-network