У меня есть массив char
указателей длиной 175 000.Каждый указатель указывает на массив к-строк длиной 100, каждый символ либо 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++;
}