Поиск сравнением с образцом

Автор: Пользователь скрыл имя, 22 Декабря 2012 в 08:16, курсовая работа

Описание работы

Целью данной курсовой работы является разработка приложения, реализующего алгоритмы поиска сравнением с образцом. Для решения данной задачи необходимо:
1) Проанализировать методы решения задачи;
2) Проанализировать алгоритмы поиска подстроки в строке;
3) Проанализировать структуры данных и выбрать необходимые;

Содержание

Введение
1 Описание и анализ поставленной задачи
2 Анализ метода решения задачи поиска подстроки в строке
2.1 Анализ алгоритма SF
2.2 Анализ алгоритма Боуэра-Мура
2.3 Анализ алгоритма Кнута-Мориса-Пратта
3 Анализ и выбор структур данных
4 Проектирование и реализация программного средства
5 Оценка эффективности
Заключение
Список литературы
Приложение А Листинг программы

Работа содержит 1 файл

Основная часть.docx

— 391.79 Кб (Скачать)

 

procedure TFind.SetWord1(const Value: string);

begin

  MyWord1:=Value;

end;

 

procedure TFind.SetWord2(const Value: string);

begin

  MyWord2:=Value;

end;

 

destructor TFind.Destroy;

begin

  inherited;

end;

 

function TFind.GetWord1: string;

begin

  Result:=MyWord1;

end;

 

function TFind.GetWord2: string;

begin

  Result:=MyWord2;

end;

 

function TFind.Search_Boyer_Moore(wrd1,wrd2:string):boolean;

var

  Posit: array ['a'..'z'] of byte;

  i, last, n, m: byte;

  s: char;

begin

  n:=length(Wrd1);

  m:=length(Wrd2);

  Result:=false;

  for s:='a' to 'z' do Posit[s]:=0;

  for i:=1 to n do Posit[Wrd1[i]]:=i;

  last:=n;

  while last<=m do

    if wrd1[n]<>wrd2[last]

      then last:=last+(n-Posit[wrd2[last]])

      else if wrd1 = Copy(wrd2,last-n+1,n)

        then begin

          Result:=true;

          exit;

        end

        else inc(last);

  Result:=false;

end;

 

function TFind.Search_Knuth_Morris_Pratt(wrd1,wrd2:string): boolean;

var

  FLINK : Array[1..255] of Byte;

  i,j,n,m: Byte;

begin

  Result:=false;

m:=Length(wrd1);

n:=Length(wrd2);

FLINK[1]:=0;

i:=2;

While i<=m do begin

j:=FLINK[i-1];

While (j<>0) AND (wrd1[j]<>wrd1[i-1]) do j:=FLINK[j];

FLINK[i]:=j+1;

i:=i+1

end;

i:=1;

j:=1;

While i<=n do begin

While (j<>0) AND (wrd1[j]<>wrd2[i]) do j:=FLINK[j];

  If j=m then begin

   result:=true;

   exit;

    end else begin

   i:=i+1;

   j:=j+1

  end

  end;

end;

 

function TFind.Search_Straight_Forward(wrd1,wrd2:string): boolean;

var

  i : Byte;

begin

Result:=false;

i:=1;

While (i<=Length(wrd2)-Length(wrd1)+1) and not Result do

   If Copy(wrd2,i,Length(wrd1))=wrd1 then begin

     Result:=true;

   end

   else i:=i+1;

end;

end.


Информация о работе Поиск сравнением с образцом