所以我从功能上知道我想要发生什么,我只是不知道让计算机做到这一点的最佳方法......在 C++ 中......
我想实现一个 C++ 函数,将 10 位序列映射到 6 位序列。
现在不要管这些位代表什么......有 2^10 = 1024 个可能的输入。有 2^6 = 64 个不同的输出。应该有很多花样。显然有很 multimap 案。但这很复杂。这是一个已知的映射,只是一个复杂的映射。
输出只是 64 种可能性中的一种。也许他们都不习惯。他们可能不会。但假设他们这样做。
现在,我在想一个四重嵌套的 switch 语句,它只处理 1024 种情况中的每一种,并处理内联业务,为指向我传递给此函数的任何结构的任何指针分配适当的值。这似乎很幼稚,而且有点慢。并不是说我已经实现了,但这就是我想先问你的原因。
这个基本功能(映射)必须在每个语句节点运行,通常不止一次,因为系统希望支持尽可能多的语句。我问你,如何在 C++ 中尽可能高效地将 10 位映射到 6 位?
我知道映射是什么,我知道 10 位的哪些输入与 6 位的输出对应......我完全可以硬编码......不知何故?多开关太丑了。我怎样才能将我的 10 位映射到 6 位?!神经网络?内存松饼?你会怎么做?
自言自语:这就是我不喜欢查找表的原因。让我们假设所有输入的可能性均等(当然它们不是,并且可以更有效地排序,但仍然如此)然后平均需要数组的 512 内存前进来检索输出值......似乎如果你让一棵(全局的,为什么不)二叉树 10 层深,你覆盖了 1024 个输入,平均只需 10 步就可以检索输出......如果有好的模式,可能会更少......给定一个确定性函数运行如此频繁,如何最好地从已知输入中检索已知输出?
最佳答案
我会使用包含 1024 个元素的查找表。所以硬编码并通过索引访问它。
这节省了对大量 switch 语句的需求,并且可能更具可读性。
关于c++ - 如何在 C++ 中将 10 位映射到 6 位(尽可能高效)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7593646/