首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算最大差分的并行算法

计算最大差分的并行算法
EN

Stack Overflow用户
提问于 2016-11-03 02:49:27
回答 1查看 260关注 0票数 0

我目前正在实现一种并行算法,用于计算两个元素之间的最大差值,以便较小的数字出现在较大的数字之前。我正在使用来自tbb库的parallel_invoke来实现这一点。我的实现如下

代码语言:javascript
复制
int calculateMaxDiff(int *src, int start, int end){
    int maxVal = -1;
    int maxRight = src[end -1];

    for(int i = end - 2; i >= start; i--){
        if(src[i] > maxRight){
            maxRight = src[i];
        }else{
            int diff = maxRight - src[i];
            if(diff > maxVal){
                maxVal = diff;
            }
        }
    }


    return maxVal;
};

int compute_max_diff(int *src, int size)
{
    int half1_diff;
    int half2_diff;

    parallel_invoke([&]{ half1_diff = calculateMaxDiff(src, 0, size/2);},
                    [&]{ half2_diff = calculateMaxDiff(src, size/2, size);});


    int maxDiff = half1_diff + half2_diff;

    return maxDiff;
}

现在,对于上面的代码段,我使用下面的示例数组

代码语言:javascript
复制
int src[] = {12, 9, 18, 3, 7, 11, 6, 15, 6, 1, 10};
int size = 11;

对于上述样本,输出或最大差为12,但我似乎得到了18。我按顺序运行了算法,并得到了预期的结果。但是,一旦我介绍了parallel_invoke,我似乎无法得到正确的结果。

EN

回答 1

Stack Overflow用户

发布于 2016-11-03 03:09:39

你得到的是上半部分的9和9( 18-9)和后半部分的9,也就是15-6。当您按顺序运行时,我确实假设您调用了calculateMaxDif(src, 0, size),这将很好地工作,因为它会遍历数组的所有元素。然而,当你调用两个函数的一半-它没有达到所需的对(3,15),因为3在上半场,15在另一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40393069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档