Var
l:boolean;
c,leng:byte;
s:string;
i:integer;
m1,m2:array [0..255] of byte;
f:file of byte;
Begin
readln(s);
leng:=length(s);
For i:=1 to length(s) do
inc(m1[ord(s[i])]);
assign(f,'words_db.txt');
reset(f);
s:='';
While not(eof(f)) do
Begin
Read(f,c);
If (c=32) or (c=13) or( eof(f)) Then
Begin
If (length(s) = leng) then
Begin
For i:=1 to length(s) do
inc(m2[ord(s[i])]);
For i:=0 to 255 do
If m1[i]<>m2[i] then l:=true;
If not(l) then begin writeln(s);
readkey; close(f); exit; end;
End;
l:=false;
For i:= 0 to 255 do
m2[i]:=0;
s:='';
End else
s:=s + chr(c);
End;
readkey;
close(f)
End.
Короче вот такая вот фигня у меня получилась . Трохи лишнего... Но, в общем работает. Если слова в words_db.txt разделены пробелами.
А скорость какая ? У мну вообще то linux так не могу запустить твой код хотя если помучаться можно будет.
Дык, у нас ведь разные компы семпром 2.2 и пень 3000 как можно сравнивать... И словаря у меня вообще нет, хотя с этим разберусь. Ладно, в эту субботу присяду, займусь.
2. Кстати... У нас в универе все машины под линуху. Паскаль учили, все норм работает. TPascal в эмуляторе ДОСа запусти... Вообще лучше всего было бы на одной машине тестить. Так что если время будет попробуй Хотя я там таймер не прописал
Ух... :|
Прописал в коде таймер и создал словарь из 163 294 одинаковых слов (типа: "любоеслово", я так прикинул в среднем слова в словаре где-то из 10 букв) и добавил одно слово искомое. Результат :
1. Искомое слово стоит в начале, на десятой позиции. Найдено за 0 секунд, 0 сотых секунд, короче системный таймер даже не успел обновить время.
2. Искомое слово стоит в середине на 80 000-й позиции... Найдено за 24,00 секунды!
3. Искомое слово в конце на 163 294-й позиции... Найдено за 48,00 секунд!!!
Короче вывод: Хотя во время тестирования на компе были запущены Тв-тюнер и еще горстка программ, должен признать, что моя программа сработает быстрее твоей, только в том случае если слово-ответ стоит где-то в начале словаря. А так... победа за тобой
Спасибо я польщен.
Кстати я прохожусь по всему словарю дабы найти все совпадения. К примеру слово выход даст 2 варианта: выдох и выход. Ну это так к слову.
Интересно если у кого-то еще вариант решения данной задачи ?!
Сделал то что хотел -- увеличил скорость поиска от 0.0x до 0,00x секунды. Пришлось сделать что-то вроде БД с древовидным индексом. Размер файла индекса увеличился до 6-7 Mb. Скорость поиска анаграммы линейная (одна-две десятитысячных секунды на один символ в анаграмме)
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах