Knuth-Morris-Pratt算法中分割字符串的大小

时间:2017-04-02 05:40:23

标签: c multithreading opencl knuth-morris-pratt

int num = 0;
char tmp_string[32000];

if(l_length * lsize > 32000){
    if (l_length * lsize % 32000 == 0) {
        num = l_length * lsize / 32000;
    } else{
        num = l_length * lsize / 32000 + 1;
    }
    ...
    if ( (l_length * lsize) % num == 0) {
        size = l_length * lsize / num;
    } else{
        size = l_length * lsize / num + 1;
    }
} else {
    num = 1;
    size = l_length * lsize;
}

for (y = 0; y < num; y++) {
    if (size % lsize == 0) {
        tmp_size = size / lsize;
    } else {
        tmp_size = size / lsize + 1;
    }
    .....find the matched pattern code.....
}
.....find the matched pattern between divided string.....

此代码是在字符串中查找匹配模式的一部分。(KMP算法)

我想一次只使用32000字节的字符串。

因此,如果字符串的大小大于32000,我将它们拆分并计算“num”,这是循环的数量。 (例如,当大小为64000时,我必须运行该函数两次以搜索整个字符串)

lsize是线程号(实际上使用openCL),l_length是每个线程将搜索的分割字符串的大小。

问题是必须搜索某些字符串,因为在分割功能期间会丢失大小。 (例如,size = l_length * lsize / num&amp;&amp; tmp_size = size / lsize)

我尝试更改代码但找不到每个线程的适当长度。 (找到分割字符串之间的模式的另一个代码已经存在。)

我该如何解决?

0 个答案:

没有答案