用户
 找回密码
 立即注册
huanhuan 该用户已被删除
发表于 2013-9-24 12:10:33
57692
我的代码如下:
for(int i = 0; i < count; i++)
  {
        for(int next = i++; i < count; next++)
             {
                    int pos = -1;
                    if(canMerge(imp[next].info,imp[i].info,pos))
                            {
                                    merge(imp[i],imp[next],pos,ttemp);
                                    imp[i].mark = imp[next].mark =false;
                             }
               }
  }

其中imp是结构体指针;

bool canMerge(string str1,string str2,int &pos)
{
unsigned int p1 = 0, p2 = 0;
while(p1 < str1.size() && str1[p1] == str2[p2])
  p1++,p2++;
pos = p1;//记录第一次不同的位置
p1++,p2++;
while(p1 < str1.size() && str1[p1] == str2[p2])//看是否只有一个地方不同
  p1++,p2++;
if (p1 == str1.size())
  return true;
return false;
}
void merge(const implicant &a1,const implicant &a2,int pos,implicant &goal)
{
goal.info = a1.info;
goal.info[pos] = '*';//除了不同处,其他位置都一样,不同处用*表示
goal.weight = a1.weight;//重量和轻的那个的总量相同
goal.includes = a1.includes + ':' + a2.includes;//包含的蕴涵项是两个被合并的蕴涵项包含的总和
goal.mark = true;
cout<<"目标蕴涵项为"<<goal.info<<"\t";
cout<<"目标蕴涵项重量为"<<goal.weight<<"\t";
cout<<"目标蕴涵项包含的最小项为"<<goal.includes<<"\n";
}


望会的人给点思路,谢谢。

使用道具 举报 回复
发表于 2013-9-24 12:16:10
(1)请勿重复发帖
(2)请不要直接给出CPU代码求GPU版实现。
使用道具 举报 回复 支持 反对
发表于 2013-9-24 12:22:30
横扫千军 发表于 2013-9-24 12:16
(1)请勿重复发帖
(2)请不要直接给出CPU代码求GPU版实现。

我就是想获取点思路,你何必这么严厉?
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册