![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Народ помогите!!! Очень нужно реализовать быстрый поиск массива в массиве, об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; Пожалуйста помогите сделать поиск как можно быстрее. Заранее благодарен. |