Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

Поиск по текстовому файлу   Найти похожие ветки 

 
TG ©   (2005-11-18 15:49) [0]

У важаемые мастера. Помогите с написание алгоритма поиска по текстовому файлу. Мне нужен алгоритм более менее быстрый, а то у меня получаеться какойто уж тормознутый. Ну или хотябы где можно найти инфу на эту тему?


 
alex_*** ©   (2005-11-18 16:51) [1]

Ты опиши свой алгоритм для начала


 
Igorek ©   (2005-11-18 16:51) [2]

Ищем первый символ.. нашли - второй совпадает? да - третий... нашли подстроку; нет - ищем первый дальше.


 
Плохиш ©   (2005-11-18 16:54) [3]

Pos


 
Serg1981 ©   (2005-11-18 23:51) [4]

А может текстовый файл загрузить в TStringList ? Поиск в памяти происходит мгновенно.


 
TUser ©   (2005-11-19 09:10) [5]

См. например, алгоритм Кнута-Мориса-Прата.


 
TUser ©   (2005-11-19 09:33) [6]

Есть и более быстрые реализации такого алгоритма, но я привожу простейшую.

program kmp;
{$apptype console}
uses Classes, SysUtils;

function KMPPos (const Text: string; const Template: string): integer;
var sp: array of integer;
    i, j, k: integer;
begin
  result:=-1;

  SetLength (sp,length(Template));
  j:=0; sp[0]:=0;
  for i:=2 to length(Template) do begin
    inc (j);
    while j <> 0 do
      if Template[i] <> Template[j] then
        j:=sp[j-1]
        else break;
    sp[i]:=j;
    end;

  j:=1; k:=1;
  for i:=1 to length(Text) do
    if Text[i] = Template[j] then begin
      inc (j);
      if j = length(Template)+1 then begin
        result:=k;
        Break;
        end;
      end else begin
      k:=k+j-sp[j];
      j:=sp[j]+1;
      end;

  SetLength (sp,0);
end;

var List: TStrings;
   i: integer;
begin
 List:=TStringList.Create;
 List.LoadFromFile(ParamStr(1));
 i:=KMPPos(List.Text,ParamStr(2));
 if i = -1 then
   writeln ("not found")
   else
   writeln ("first entry in "+inttostr(i));
 List.Free;
end.


 
AlexWlad ©   (2005-11-19 11:37) [7]

Неплохая статья.

http://www.rsdn.ru/article/alg/textsearch.xml


 
TUser ©   (2005-11-19 11:41) [8]

На алголисте больше
http://algolist.manual.ru/search/esearch/index.php



Страницы: 1 вся ветка

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.037 c
14-1132302901
Rentgen
2005-11-18 11:35
2005.12.11
Д.Р. на работе


14-1132441218
тень отца Гамлета
2005-11-20 02:00
2005.12.11
Чемпион по AV


3-1130312080
oleggar
2005-10-26 11:34
2005.12.11
Clipper indexing


4-1128678334
Ботвин Дмитрий
2005-10-07 13:45
2005.12.11
Проблема с таймером


3-1130156501
Сержо
2005-10-24 16:21
2005.12.11
Некорректное отображение дат