PDA

Просмотр полной версии : Поиск в массиве. Оптимальный алгоритм.



_Pavel_
21.09.2014, 21:26
Господа, подскажите наиболее оптимальный (быстрый) алгоритм для поиска данных в массиве.
Пример задачи: имеется массив, каждый элемент которого - BYTE. Требуется найти в этом массиве DWORD, WORD, STRING.
Вот мои варианты:
Если требуется найти STRING, то, видимо, лучший вариант воспользоваться OSCAT-овской функцией BUFFER_SEARCH.
В случае WORD, DWORD: создаём соответствующий указатель, позиционируем его на стартовый элемент массива, сравниваем с требуемым словом, позиционируем указатель на следующий байт массива, опять сравниваем и т.д.

lara197a
21.09.2014, 21:50
Поиск по дате(пример)
имеется структура содержащая помимо переменных еще и дату
Структура записывается в массив из 0-31 (хватает на месяц)

IF Q THEN (*Поиск разрешен*)

cN:=0; (*сбрасываю счетчик*)

FOR cN:=0 TO 30 DO (*В массиве у нас 31 переменая*)
IF in_arx_God=ARX[cN].God AND
in_arx_Mes=ARX[cN].Mesiac AND
in_arx_Den=ARX[cN].Den THEN (*проверяем совпадение *)

Out_arx_D1:=ARX[cN].Dnevnaia1; (если совпадение найдено, то выводим переменные)
Out_arx_D2:=ARX[cN].Dnevnaia2;
Out_arx_D3:=ARX[cN].Dnevnaia3;
Out_arx_D4:=ARX[cN].Dnevnaia4;
Out_arx_D5:=ARX[cN].Dnevnaia5;

Out_arx_N1:=ARX[cN].Nochnaia1;
Out_arx_N2:=ARX[cN].Nochnaia2;
Out_arx_N3:=ARX[cN].Nochnaia3;
Out_arx_N4:=ARX[cN].Nochnaia4;
Out_arx_N5:=ARX[cN].Nochnaia5;

cn:=cN+1;

EXIT; (*Прекращаем поиск*)

END_IF
END_FOR
END_IF

Yegor
22.09.2014, 08:08
ПОИСК: Если массив отсортирован, то двоичный поиск, например. Если не отсортирован и искать надо нечасто, то тупо перебирать. Если не отсортирован и искать надо часто, то предварительно отсортировать. GOTO ПОИСК.