====== Поиск подпоследовательности в массиве (алгоритм СДВИГ-И) ====== ===== Описание ===== Функция осуществляет поиск первого вхождения массива ''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.