Форум Фотогалерея Деловой мир Мелитополя
Мелитополь
Мелитопольский форум
 
 RSS  FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Алгоритм решения игры "Что за слово"
На страницу Пред.  1, 2, 3
 
Начать новую тему   Ответить на тему    Список форумов Мелитополь -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Максмел

Горожанин


Пол: Пол: Он
Зарегистрирован: 31.01.2006
Сообщения: 113

Репутация: 17.2
голосов: 1

СообщениеДобавлено: Пт Сен 29, 2006 16:52 pm    Заголовок сообщения: Ответить с цитатой

Код:
Uses crt;

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.

Короче вот такая вот фигня у меня получилась Shocked . Трохи лишнего... Но, в общем работает. Если слова в words_db.txt разделены пробелами.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение  
Thomas
В настоящее время запрещен

Бывалый


Пол: Пол: Он
Зарегистрирован: 29.03.2006
Сообщения: 3169
Откуда: /dev/null
Репутация: 138.5
голосов: 31

СообщениеДобавлено: Пт Сен 29, 2006 17:13 pm    Заголовок сообщения: Ответить с цитатой

А скорость какая ? У мну вообще то linux так не могу запустить твой код хотя если помучаться можно будет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение [ скрыт ] Посетить сайт автора
Максмел

Горожанин


Пол: Пол: Он
Зарегистрирован: 31.01.2006
Сообщения: 113

Репутация: 17.2
голосов: 1

СообщениеДобавлено: Пт Сен 29, 2006 18:34 pm    Заголовок сообщения: Ответить с цитатой

Thomas писал(а):
А скорость какая ? У мну вообще то linux так не могу запустить твой код хотя если помучаться можно будет.

Дык, у нас ведь разные компы семпром 2.2 и пень 3000 как можно сравнивать... И словаря у меня вообще нет, хотя с этим разберусь. Ладно, в эту субботу присяду, займусь.

2. Кстати... У нас в универе все машины под линуху. Паскаль учили, все норм работает. TPascal в эмуляторе ДОСа запусти... Вообще лучше всего было бы на одной машине тестить. Так что если время будет попробуй Wink Хотя я там таймер не прописал Sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение  
Максмел

Горожанин


Пол: Пол: Он
Зарегистрирован: 31.01.2006
Сообщения: 113

Репутация: 17.2
голосов: 1

СообщениеДобавлено: Сб Сен 30, 2006 14:29 pm    Заголовок сообщения: Ответить с цитатой

Ух... :|
Прописал в коде таймер и создал словарь из 163 294 одинаковых слов (типа: "любоеслово", я так прикинул в среднем слова в словаре где-то из 10 букв) и добавил одно слово искомое. Результат Smile :

1. Искомое слово стоит в начале, на десятой позиции. Найдено за 0 секунд, 0 сотых секунд, короче системный таймер даже не успел обновить время.

2. Искомое слово стоит в середине на 80 000-й позиции... Найдено за Shocked Shocked Shocked 24,00 секунды!

3. Искомое слово в конце на 163 294-й позиции... Найдено за Twisted Evil 48,00 секунд!!!

Короче вывод: Хотя во время тестирования на компе были запущены Тв-тюнер и еще горстка программ, должен признать, что моя программа сработает быстрее твоей, только в том случае если слово-ответ стоит где-то в начале словаря. А так... Applause победа за тобой Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение  
Thomas
В настоящее время запрещен

Бывалый


Пол: Пол: Он
Зарегистрирован: 29.03.2006
Сообщения: 3169
Откуда: /dev/null
Репутация: 138.5
голосов: 31

СообщениеДобавлено: Сб Сен 30, 2006 17:52 pm    Заголовок сообщения: Ответить с цитатой

Спасибо я польщен. Smile Smile Smile
Кстати я прохожусь по всему словарю дабы найти все совпадения. К примеру слово выход даст 2 варианта: выдох и выход. Ну это так к слову.
Интересно если у кого-то еще вариант решения данной задачи ?!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение [ скрыт ] Посетить сайт автора
Thomas
В настоящее время запрещен

Бывалый


Пол: Пол: Он
Зарегистрирован: 29.03.2006
Сообщения: 3169
Откуда: /dev/null
Репутация: 138.5
голосов: 31

СообщениеДобавлено: Пн Апр 09, 2007 12:21 pm    Заголовок сообщения: Ответить с цитатой

http://rssnews.org.ua/dist.tar.gz

Распаковываете архив. Чтобы запустить нужно выполнить:

java -jar RevAnagram.jar

У кого стоит java машина конечно. время поиска пишется в консоли. В среднем время поиска 0.3-0.4 секунды.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение [ скрыт ] Посетить сайт автора
Thomas
В настоящее время запрещен

Бывалый


Пол: Пол: Он
Зарегистрирован: 29.03.2006
Сообщения: 3169
Откуда: /dev/null
Репутация: 138.5
голосов: 31

СообщениеДобавлено: Чт Апр 12, 2007 08:12 am    Заголовок сообщения: Ответить с цитатой

Решил еще больше увеличить скорость буду пробовать увеличить скорость поиска до 0,01 или даже до 0,001 сек. Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение [ скрыт ] Посетить сайт автора
Thomas
В настоящее время запрещен

Бывалый


Пол: Пол: Он
Зарегистрирован: 29.03.2006
Сообщения: 3169
Откуда: /dev/null
Репутация: 138.5
голосов: 31

СообщениеДобавлено: Пн Апр 16, 2007 08:11 am    Заголовок сообщения: Ответить с цитатой

Сделал то что хотел -- увеличил скорость поиска от 0.0x до 0,00x секунды. Пришлось сделать что-то вроде БД с древовидным индексом. Размер файла индекса увеличился до 6-7 Mb. Very Happy Скорость поиска анаграммы линейная (одна-две десятитысячных секунды на один символ в анаграмме)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение [ скрыт ] Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Мелитополь -> Программирование Часовой пояс: GMT + 2
На страницу Пред.  1, 2, 3
Страница 3 из 3

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Р: 537485

База отдыха «Белый парус» пгт Кирилловка Азовское море.

Рейтинг Мелитопольских сайтов на Melitopol.org Hosting by VivaNET