Реферат: Алгоритмы поиска в тексте

Последний символ снова не совпадает с символом строки. В соответствии с таблицей смещений сдвигаем образец на 2 позиции:

Еще раз сдвигаем образец на 2 позиции:

Теперь, в соответствии с таблицей, сдвигаем образец на одну позицию, и получаем искомое вхождение образца:

Реализуем указанный алгоритм на языке ObjectPascal. Прежде всего следует определить тип данных «таблица смещений». Для кодовой таблицы, состоящей из 256 символов, определение этого типа будет выглядеть так:

type

TBMTable = array [0..255] of Integer;

Далее приводится процедура, вычисляющая таблицу смещений для образца P.

procedure MakeBMTable( var BMT : TBMTable; const P : String);

var

i : Integer;

begin

for i := 0 to 255 do BMT[i] := Length(P);

for i := Length(P) downto 1 do

if BMT[Byte(P[i])] = Length(P) then

BMT[Byte(P[i])] := Length(P) – i;

end;

Теперь напишем функцию, осуществляющую поиск.

function BMSearch( StartPos : Integer; const S, P : String;

const BMT : TBMTable) : Integer;

var

Pos, lp, i : Integer;

begin

lp := Length(P);

Pos := StartPos + lp –1;

while Pos < Length(S) do

if P[lp] <> S[Pos] then Pos := Pos + BMT[S[Pos]]

К-во Просмотров: 328
Бесплатно скачать Реферат: Алгоритмы поиска в тексте