Поиск подпоследовательности в массиве (алгоритм СДВИГ-И)

Описание

Функция осуществляет поиск первого вхождения массива W в массив T, в результате функция выдает номер первого элемента в массиве T, начиная с которого встречается массив W. В случае, если массив W не встречается в массиве T результат функции равен -1.

Исходный код

Const
   Max = 32;
 
Function ExactShiftAND (W, T: Array of Byte; m, n: Longint): Longint;
var
   {Result,}
   BitT: Longint;
   Bit: array[0..Max] of Longint;
   CVTab: array [0..255] of Longint;
   i, R: word;
 
begin
     BitT := 1;
     Result := -1;
 
     for i := 0 to Max - 1 do Bit[i] := 1 shl i;
 
     FillChar (CVTab, SizeOf (CVTab), 0);
 
     for i := 0 to M - 1 do
         CVTab[W[i]] := CVTab[W[i]] OR Bit[i];
 
     i := 0;
     R := 0;
     While (Result = -1) AND (i < n) do
     begin
          R := R shl 1;
          R := R OR 1;
          R := R AND CVTab[T[i]];
          If (R AND Bit[m - 1] <> 0) then
             Result := i - m + 1;
          inc (i);
     end;
 
     ExactShiftAND := Result;
end;
 
const
     Asize = 2;
     Bsize = 4;
     A: array [0 .. Asize - 1] of byte = (4,8);
     B: array [0 .. Bsize - 1] of byte = (3,4,4,8);
 
begin
     writeln (ExactShiftAND (A, B, Asize, Bsize));
     readln;
end.
 
pascal/search/shift_and.txt · Последние изменения: 2009/10/30 21:03 От romtek
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki