У меня проблема со сбором данных для алгоритмов поиска по шаблону.
Алгоритм измерения:
double PCFreq = 0.0;
__int64 CounterStart = 0;
void StartCounter()
{
LARGE_INTEGER li;
if(!QueryPerformanceFrequency(&li))
cout << "QueryPerformanceFrequency failed!\n";
PCFreq = double(li.QuadPart)/1000.0;
QueryPerformanceCounter(&li);
CounterStart = li.QuadPart;
}
double GetCounter()
{
LARGE_INTEGER li;
QueryPerformanceCounter(&li);
return double(li.QuadPart-CounterStart)/PCFreq;
}
В каждой итерации я увеличиваю количество символов в шаблоне.
В каждой итерации, пока я читаю 2048 символов в буфере из файла, который содержит 500000 случайных символов из алфавита, я использую алгоритм поиска по шаблону.
for (int i = 0; i <= 15; i++) {
cout << pat << endl;
file_1 = fopen("alphabet_1.txt", "a+");
file_2 = fopen("alphabet_2.txt", "a+");
file_3 = fopen("alphabet_3.txt", "a+");
StartCounter();
while (!feof(file_1)) {
const size_t nchars = fread(buffer, 1, sizeof(buffer) - 1, file_1);
buffer[nchars] = '\0';
BM(buffer, pat);
}
time1 = GetCounter();
cout << time1 << endl;
StartCounter();
while (!feof(file_2)) {
const size_t nchars = fr
StartCounter();
while (!feof(file_3)) {
const size_t nchars = fread(buffer, 1, sizeof(buffer) - 1, file_3);
buffer[nchars] = '\0';
SUNDAY(buffer, pat_a);
}
time3 = GetCounter();
cout << time3 << endl;
size_of = pat.size();
abc_pat << left << setw(15) << size_of << left << setw(15) << time1 << left << setw(15) << time2 << left << setw(15) << time3 << endl;
pat += random_PAT(2);
cout << pat << endl;
}
}
Вот данные, собранные, но, похоже, они неправильные:
Pattern Size Boyer KMP Sunday
1 7.29172 4.09554 5.29126
4 3.42968 4.03492 4.81207
7 2.32056 4.24628 4.7306
10 2.25833 4.26425 4.89514
13 1.56521 4.38645 4.63406
16 1.80224 4.21196 4.69468
19 1.65085 4.25847 4.97276
22 1.40548 3.97077 4.62123
25 1.52448 4.11863 4.77454
28 1.81347 4.38837 4.77743
31 2.02291 4.06378 4.91791
34 1.75894 4.26457 4.84318
37 1.59119 4.27419 4.74985
40 1.62615 4.24853 4.60231
43 1.65149 4.20202 4.86948
46 1.76664 4.0965 4.84671
49 1.47316 4.34154 4.92882
52 1.41511 4.44226 4.91374
55 1.33011 4.42333 4.79796
58 1.42569 4.06956 4.48459
61 1.4536 4.12536 4.87269
Коды поиска шаблонов не мои, я собрал их здесь, чтобы собрать данные.
Когда я их проверял, они работали правильно, возвращали то же количество найденных шаблонов и т. Д.