小编Ale*_*nch的帖子

Levenshtein 算法并行

我已经使用parallel_for 实现了该算法。但大多数情况下我使用同步部分,所以我没有利润。也许有更好的选择?

    tbb::parallel_for (tbb::blocked_range<int>(1, m * n), apply_transform(d, j, this, m, n));

    void apply_transformation(int * d, int i, int j, int n){
        int elem1 = (*v1)[i];
        int elem2 = (*v2)[j];
        if(elem1 == elem2){
            dLock.acquire(dMutex);
            d[i*n + j] = d[(i-1)*n + j-1];       // no operation required
            dLock.release();
        } else {
            dLock.acquire(dMutex);
            d[i*n + j] = std::min(std::min(d[(i-1)*n + j] + 1, //deletion
                    d[i*n + j-1] + 1), //insertion
                    d[(i-1)*n + j-1] + 1); //substitution
            dLock.release();
        }
    }

    class apply_transform{
        int * array; …
Run Code Online (Sandbox Code Playgroud)

parallel-processing tbb levenshtein-distance

0
推荐指数
1
解决办法
1361
查看次数