Текущий архив: 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.46 MB
Время: 0.045 c