【发布时间】:2011-10-26 01:35:18
【问题描述】:
我有一个长度为 175,000 的 char 指针数组。每个指针指向一个长度为 100 的 c 字符串数组,每个字符要么是 1 要么是 0。我需要比较字符串之间的差异。
char* arr[175000];
到目前为止,我有两个 for 循环,我将每个字符串与其他每个字符串进行比较。比较函数基本上采用两个 c 字符串并返回一个整数,该整数是数组的差异数。
这在我的 4 核机器上需要很长时间。上次我让它运行了 45 分钟,但它从未完成执行。请告知更快的解决方案或一些优化。
例子:
000010
000001
由于最后两位不匹配,因此相差 2。
在我计算出差异后,我将值存储在另一个数组中
int holder;
for(int x = 0;x < UsedTableSpace; x++){
int min = 10000000;
for(int y = 0; y < UsedTableSpace; y++){
if(x != y){
//compr calculates difference between two c-string arrays
int tempDiff =compr(similarity[x]->matrix, similarity[y]->matrix);
if(tempDiff < min){
min = tempDiff;
holder = y;
}
}
}
similarity[holder]->inbound++;
}
【问题讨论】:
-
"我有一个长度为 175,000 的 char 指针数组。每个指针指向一个长度为 100 的 c 字符串数组,每个字符为 1 或 0。"这个设计可以修改吗?这似乎极其效率低下。
-
答案完全取决于“比较字符串之间的差异”的确切含义。平等?更大?还有什么?
-
还有:C 还是 C++?它们不可互换。
-
第一:使用bitset/dynamic_bitset;第二:你在比较什么,结果在哪里? (无论如何,结果是什么?)根据这一点,您也许可以使用常见的优化全文搜索算法
-
你需要知道所有对之间的距离,还是别的什么?例如,找到与目标字符串的编辑距离为 n 的所有字符串的快速方法有用吗?
标签: c++ c performance algorithm optimization