如何在C ++中(尽可能有效地)10位以6位映射?

所以我知道我想发生这样的功能是什么,我只是不知道使计算机的最佳方式做到这一点...在C ++中...

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

没关系位代表什么,现在......有2 ^ 10 = 1024个可能的输入。 有2 ^ 6 = 64个不同的输出。 也许很多的模式。 显然,大量的模式。 但是,这是复杂的。 这是被称为SA映射,只是一个复杂的映射。

输出只是64的可能性之一。 也许他们都没有得到使用。 他们可能不会。 但是,假设他们做的。

现在,我在想一个四嵌套switch语句,只是照顾每个1024箱子,并采取内联企业的关心,我传递给这个函数指针无论到任何结构分配适当的值。 这似乎是幼稚和排序缓慢。 这并不是说我已经实现了它,但是这就是为什么我想先问你。

这个基本功能(映射)将在每一语句节点来运行,往往超过一次,为尽可能多的声明本系统希望支持。 我问你,我怎么10位C ++作为有效地映射到6位作为可能吗?

我知道的映射是什么,我知道其中有10位输入什么的6位输出去...我完全可以硬编码...不知何故? 多路开关是如此丑陋。 如何将我的10位映射到6位? 神经网络? 内存松饼? 你会怎么做?

提醒自己:所以这是为什么我不查找表的粉丝。 假设所有的输入都同样可能(当然他们都没有了,可以更有效地订购,但仍),那么它就会采取对数组来检索输出值的平均值512内存的进步......看来,如果你做(全局,为什么不)二叉树10级深,你盖了1024输入,如果有好的模式可以检索平均只有10步......输出,也许少...给出一个确定的函数,所以经常跑,如何才能最好地从已知输入检索称为输出?

--------------解决方案-------------

我会使用1024个元素的一个查找表。 所以硬编码和刚刚索引来访问它。

这节省了一个巨大的switch语句的需要,很可能会更具有可读性。

取决于你的效率定义。

  1. 省时高效:查找表。
  2. 空间高效:使用卡诺图。

使用大小为1024的查表。

如果你需要映射到某个特定的 6位值,使用大小64(而不是1024!)的查找表由16分这将适用于高速缓存更容易超过16倍的冗余1024项表后(并,对于右移2个额外的周期远远outweight可能的高速缓存未命中的成本)。

否则,如果一个简单的顺序映射是很好,只是由16做一个鸿沟。

1024年至1064年= 16,16分这样(用编译器优化右移开启),映射到6位(按顺序)。 它无法获得比更有效。

分类:C# 时间:2012-01-01 人气:0
分享到:

相关文章

  • 使用逻辑功能Clojure中“减少”或“应用” 2013-08-12

    我不能在Clojure的一系列布尔值(1.2),使用逻辑功能. 无论是由于逻辑功能是宏以下工作: (reduce and [... sequence of bools ...]) (apply or [... sequence of bools ...]) 该错误消息说我"不能从一个宏观的值#'clojure.core/and ". 如何在不编写样板代码应用这些逻辑功能(宏)? --------------解决方案------------- 不要-使用every?而some替代. 米哈

  • 写作电路的逻辑功能 2012-12-10

    正如我在前面提到的问题,我是相当新的编程和计算机的世界已经刚刚开始的大学课的. 我真的很挣扎来与术语编写逻辑功能的电路. 我不知道是否有人可能具有逻辑功能这些? http://www.flickr.com/photos/78651059@N07/7041822113/in/photostream http://www.flickr.com/photos/78651059@N07/7041821965/in/photostream/ http://www.flickr .COM /照片/ 7865

  • BLT()来创建一个图层效果。 不工作。 我使用了错误的逻辑功能还是什么? 2014-05-31

    我有一个由各种物体吸引到一个窗口创建分层的效果(认为抬起头,显示器,其中一个对象,绘制一个指南针,其他绘制网格线,另一种高度计读数等). 因此,每个对象都有它吸引到的黑色内存位图. 当我打电话的对象绘制功能,内存位图BitBlt到应用程序窗口. 内存位图是全黑开始与和对象绘制就可以了. 黑色是透明颜色,所以它被屏蔽掉. 其结果是一种覆盖效果. 所以,我用或作为BLT()函数,我的逻辑功能是,它已经奏效. 但是,我已经注意到,如果前一个层已经刷成白色,然后绘制在它的上面层找出来,就好像它是前一个层

  • 在gcc 4.2.2关掉优化特定功能 2014-09-30

    是否可以关闭特定功能的优化? 我的一个朋友有一个gcc的优化提出了一些问题(未知对我来说)μ控制器代码无法正常工作. 我们知道这是它的功能,但我们不知道代码本身,所以最简单,最安全的方式很可能是只将其关闭整个功能. 可悲的是http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html表明存在一个优化的功能属性/编译,但它需要的gcc 4.4,这是我们所没有的. 提前致谢 --------------解决方案------------- 如果编

  • 优化itoa功能 2012-02-10

    我想就如何落实一个整数(4字节,无符号),以字符串SSE指令的转换. 通常的程序是把数,并将其存储在局部变量,然后反转串(反转例程缺少在这个例子中): char *convert(unsigned int num, int base) { static char buff[33]; char *ptr; ptr=&buff[sizeof(buff)-1]; *ptr=''; do { *--ptr="0123456789abcdef"[num%base]; num/=base;

  • 帮助优化一些功能的jQuery 2012-05-02

    我有一些简单的jQuery,增加了一些标签功能. 这是基于什么我发现某处(不记得在哪里),但它可能是在这一点上大多是原来的. 我是有一些选择的麻烦,所以我不得不做一些东西,似乎尴尬(见.孩子().孩子的一部分). 尴尬的部分,从加来处理在单页上多套标签的能力干. 我是可能使用选择错了吗? 而且你可以看到任何其他改进的余地吗? 下面是jQuery的: // Create and manage tab blocks $('.tab-sections section').hide(); // Hide

  • 优化该功能(在C ++) 2012-06-05

    我有一个消耗CPU代码,其中多次执行一个循环部分功能. 在这个循环中每一个优化带来了明显的性能增益. 问:你将如何优化这个循环(没有太多的更多,虽然优化......)? void theloop(int64_t in[], int64_t out[], size_t N) { for(uint32_t i = 0; i < N; i++) { int64_t v = in[i]; max += v; if (v > max) max = v; out[i] = max; } } 我尝试了一些东

  • 我可以优化这些功能呢? 2013-12-09

    我有3个功能(它们minimalized所以他们可能很难读)如下 - I0,T0,并且是. 是()和T0()都从DOM这一行中提取数据 var c=document.forms[a].elements; 倒不如从DOM中提取数据的I0(),然后把它传递给的是()和T0()? 这样,我只从DOM拉一次数据,但我需要一个额外的变量将其存储在一个传递给两个功能. I0(): function i0() { if(t0()) { var a=is('f0'); s0('bi0.php',a,s2); }

  • 如何优化这个功能呢? 2014-05-26

    我创建了一个功能,生成和保存多个图像大小,当用户通过网络的形式上传的图像. 我在想,我怎么能更好地优化我的代码(减少的行数,同时仍然易于阅读) save_image($_FILES['image'], $_GET['member_id'], 250, 300, large) //usage example 该功能 function save_image($file, $id, $sizex, $sizey, $pre){ $image=$_FILES['image']['name']; $tmp

  • 是否有人有一个优化的功能,由阿尔法预乘的位图? 2014-09-20

    GDIPlus混合功能使用预乘RGB通道的α位图的效率. 因为你必须把每一个像素逐个然而由字母是左乘一个非常昂贵的. 它似乎,这将是一个很好的候选人SSE组装. 有没有人在这里,希望分享它的实施? 我知道,这是艰苦的工作所以这是我问的原因. 我并不想窃取你的工作. 你会因为如果你能分享这让我所有的考虑. 编辑:我并不想用软件做alpha混合. 我试图预乘每个像素的每种颜色分量通过其alpha的图像. 我这样做是因为α混合由以下公式进行:DST = SRC * src.alpha + DST *(

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.424 (s). 10 q(s)