Народ помогите!!! Очень нужно реализовать быстрый поиск массива в массиве, обf масива имеют тип BYTE, причем вся сложность в том что:
1) Массив в котором происходит поиск имеет длинну до 5000000 эллементов, а массив который нужно найти имеет длинну до 255 эллементов...
2) Поиск проходит в цикле от 1 до 5000...
Я сделал так (но это ОООООчень долго):
Код:
...
type
buffer = array of byte;
...
var
Buf : buffer;
...
Function FindinArray(LINE: String): Boolean;
var
i,j: INTEGER;
InputArrayLength: INTEGER;
InputArray : Array [1..255] of byte;
err: BYTE;
begin
Result := False;
InputArrayLength := Length(LINE) div 2;
for I := 1 to InputArrayLength do
InputArray[i]:=StrToInt('$'+Copy(LINE, I * 2 - 1, 2));
for i := 0 to Length(buf)-InputArrayLength do begin
if buf[i+2] = InputArray[3] then
if buf[i+1] = InputArray[2] then
if buf[i] = InputArray[1] then begin
err := 0;
for j := 4 to InputArrayLength do begin
if buf[i+j-1] <> InputArray[j] then
begin
inc(err);
Break;
end;
end;
if err = 0 then begin
Result := true;
exit;
end;
end;
end;
end;
...
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
// Заполняю массив BUF
//...
// И начинаю цикл....
for i := 0 to 15000 do
FindinArray('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF');
//
Finalize(Buf);
end;
Пожалуйста помогите сделать поиск как можно быстрее.
Заранее благодарен.