Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Анализ последовательности символов, является ли словом 
:(
    Опции темы
Sosed
Дата 22.5.2010, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 18.8.2009

Репутация: нет
Всего: 1



Доброго времени суток
Может вопрос несколько не по алгоритмам но все-же

Задача выяснить является ли некая последовательность символов словом. Для этого сравниваю последовательность с хешированным словарем.
Последовательностей много.
Основная задача уменьшить их количество до момента, когда нужно сравнивать.
Например можно сразу сказать что слово не является последовательность содержащая "ЪЬ","[гласная]Ь" и т.д. Где можно раздобыть подобные "подстроки" или может есть другие способы определения слов без использования словаря?
PM MAIL   Вверх
VictorTsaregorodtsev
Дата 24.5.2010, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 3
Всего: 8



Если при выделении последовательности считается и её длина (например, для каких-то иных нужд), т.е. если длину строки дополнительно считать не надо будет, то можно словарь разделить на подсловари, в каждом из которых будут слова одинаковой длины, и поиск запускать на подсловаре со словами совпадающей длины. И, думаю, если подетальнее залезть в потроха Вашей задачи, то можно будет придумать другие способы ускорения поиска, если не сработает этот.

Ну а по выделению недопустимых буквосочетаний. На хорошо вычитанном корректорами корпусе текстов (например, на старых текстах из библиотеки Мошкова) можно построить матрицу частот переходов от буквы к букве, и клетки матрицы с нулевыми значениями частот будут соответствовать нереализовавшимся в русском языке буквосочетаниям из двух букв. Для трехбуквенных сочетаний - всё делается аналогично, но на трехмерной матрице. 

Но думаю, что добавленные условия на предварительную проверку на корректность слова в среднем съедят весь выигрыш от отказа от словарного поиска для некорректных слов.

PS. Вообще-то, Ваша задача кажется настолько быстро считаемой, что надо просто привлечь квалифицированного программиста и понять, где и что можно экономить, и за счет чего. Ибо я часто сталкивался с примерами "ошибок в ДНК". Например, для некоторой задачи обработки текстов одна девушка вместо алгоритма сложностью О(N), требующего, правда, удвоения объема используемой памяти по сравнению с минимумом, взяла обходящийся минимумом памяти алгоритм сложностью О(N^2) - а в итоге получила тормоза расчетов, что было бы изначально очевидно любому грамотному алгоритмисту-программисту.
PM MAIL WWW   Вверх
Sosed
Дата 25.5.2010, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 18.8.2009

Репутация: нет
Всего: 1



Делается алгоритм хода компьютера в игре Балда. 
Хм, насчет разделения словаря интрересно, как-то крутилось в голове, но казалось очень накладным, попробую. У меня в основном вся оптимизация во время рекурсивного поиска этих подстрок, останавливаю поиск на несложных правилах типа "если несколько согласных/гласных подряд", "начинается не так", "длинна цепочки больше N символов" и другие очевидные варианты, также пытаюсь соптимизировать на таскаемых за собой координатах клеток доски для проверки некоторых условий(исходя из правил игры). На небольшом словаре(10к слов) работает довольно быстро(2-3 секунды при полной доске), но поглядывая на различные "решалки Балды" хочу чтобы компьютер думал не более секунды.

Это сообщение отредактировал(а) Sosed - 25.5.2010, 16:32
PM MAIL   Вверх
VictorTsaregorodtsev
Дата 26.5.2010, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 3
Всего: 8



Профилировщиком пользовались? Или методом тыка самое тормознутое место программы пытаетесь вычислить?

Попытайтесь без рекурсии обойтись - зачем тратить лишнее время на кучу вызовов функции с передачей ей аргументов? 
PM MAIL WWW   Вверх
Void
Дата 26.5.2010, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 3
Всего: 173



Найти все вхождения строки S длиной m во множество строк можно с помощью обобщённого суффиксного дерева (generalized suffix tree) за O(m+k), где k — количество таких вхождений. При этом алгоритм можно сделать инкрементальным: допустим, вы получили положительный результат для последовательности из n символов на предполагаемом маршруте, тогда проверка следующего символа будет значительно быстрее, чем проверка строки из n+1 символов «с нуля».


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0625 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.