如何优化重复除 [英] how to optimize repetitive addition

查看:81
本文介绍了如何优化重复除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

#define NULL 0

int main()
{
    int *array1=NULL,*array2=NULL;
    int x =add(array1[0],array2[0]);
    int y =add(array1[1],array2[7]); 
    int x =add(array1[2],array2[3]);
    int y =add(array1[3],array2[4]);
    int x =add(array1[4],array2[6]);
    int y =add(array1[5],array2[1]); 
    int x =add(array1[6],array2[5]);
    int y =add(array1[7],array2[2]);
    ................
    ................
    int x =add(array1[252],array2[0]);
    int y =add(array1[253],array2[7]); 
    int x =add(array1[254],array2[3]);
    int y =add(array1[255],array2[4]);
}

基本上指数数组1 由1递增开始从0到255为止
数组2 该指数是从0到7所以我想这个优化多个另外固定。如何优化呢?

Basically index for array1 is incrementing by 1 starting from 0 to till 255 but the index for array2 is fixed from 0 to 7. So I want to optimize this multiple addition. How to optimize this?

推荐答案

你可以为

int j = 0,order[] = {0,7,3,4,6,1,5,2};
for(int i = 0;i <256; i +=2)
{
    int x =add(array1[i],array2[order[j%8]]);
    j++;
    int y =add(array1[i+1],array2[order[j%8]]);
    j++;
}

更新

另一种解决方案可以(如果你不想使用I + = 2)

UPDATE
alternate solution can be (if you want without using i+=2)

int j = 0,order[] = {0,7,3,4,6,1,5,2};
for(int i = 0;i <256; i ++)
{
    int x =add(array1[i],array2[order[j%8]]);
    j++;
    i++; 
    if(i>=256) break;  //Improves it if you have non even condition
    int y =add(array1[i],array2[order[j%8]]);
    j++;
}

编辑由Sam

现在我想基于x和y的值选择这两个值来比较比较

     CurrentTre=256;
     if (x > y)
     {
     *array3[0]= x;
     *array4[CurrentTre +0] = 0;
     }
     else
     {
     *array3[i] = y;
     *array4[CurrentTre + 0] = 1;
     }
     ..........
     ..........
     if (x > y)
     {
     *array3[0]= x;
     *array4[CurrentTre +127] = 254;
     }
     else
     {
     *array3[i] = y;
     *array4[CurrentTre + 127] = 255;
     }
     /////////////
     my approach is this way

     if (x > y)
     {
     *array3[i]= x;
     *array4[int CurrentTre +i] = int number[i]<<1;
     }
     else
     {
     array3[i] = y;
     array4[int CurrentTre + i] = int number[i]<<1|1;
     }
} //end function main

我要优化code优化我下面给出
   请检查是否我该做的正确与否..?

uint32 even_number[255] ={0};
uint32 loop_index1=0;
uint32 loop_index2=0;

uint16 order[256]={0,7,3,4,6,1,5,2,4,3,7,0,1,6,2,5,7,0,4,3,2,5,1,6,3,4,0
,7,6,1,5,2,4,3,7,0,1,6,2,5,0,7,3,4,5,2,6,1,3,4,0,7,6,1,5,2,7,0,4,3,2,5
,1,6,5,2,6,1,0,7,3,4,1,6,2,5,4,3,7,0,2,5,1,6,7,0,4,3,6,1,5,2,3,4,0,7,1
,6,2,5,4,3,7,0,5,2,6,1,0,7,3,4,6,1,5,2,3,4,0,7,2,5,1,6,7,0,4,3,3,4,0,7
,6,1,5,2,7,0,4,3,2,5,1,6,4,3,7,0,1,6,2,5,0,7,3,4,5,2,6,1,7,0,4,3,2,5,1
,6,3,4,0,7,6,1,5,2,0,7,3,4,5,2,6,1,4,3,7,0,1,6,2,5,6,1,5,2,3,4,0,7,2,5
,1,6,7,0,4,3,1,6,2,5,4,3,7,0,5,2,6,1,0,7,3,4,2,5,1,6,7,0,4,3,6,1,5,2,3
,4,0,7,5,2,6,1,0,7,3,4,1,6,2,5,4,3,7,0}; //all 256 values



for(loop_index1;loop_index1<256;loop_index1++)
   {    
    m0= (CurrentState[loop_index1]+Branch[order[loop_index2]]);
loop_index2++;
loop_index1++;
if(loop_index1>=256) 
break;

m1= (CurrentState[loop_index1]+Branch[order[loop_index2]]);

loop_index2++;

if (mo > m1)
 {
 NextState[loop_index1]= m0;
 SurvivorState[CurrentTrellis + loop_index1] =
 even_number[loop_index1]<<1;
 }
else
{
 NextState[loop_index1] = StateMetric1;
 SurvivorState[CurrentTrellis + loop_index1] = 
  even_number[loop_index1<<1|1;
}
}

这篇关于如何优化重复除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆