Artisan

Artisan
Рейтинг
377
Регистрация
04.03.2005
Пишу программы для вычислительных машин, от драйверов устройств, до сложных систем для работы с большим количеством знаний. Умею бережно использовать железо, и другие ресурсы.
Как писал lagif
Artisan,
Cпасибо. Я над этим думала. Это, на мой взгляд, половинчатый выход из положения. Подумаю еще - обязательно расскажу, что придумала.

Все зависит от точной постановки задачи, можно вообще обойтись без явных идентификаторов и вместо них использовать номера слов в массивах отдельно для каждой длины слова.

Как писал lagif
В каком массиве? Тут поиск будет по слову, а это дольше, чем по идентификатору, разве нет?
И нет разницы, как искать - хоть дихотомией, хоть прямым перебором. Все равно дольше, чем в БД по ключу.

@---,---`-----

Массивов может быть несколько для каждой длины слова отдельно что позволит как лучше использовать память при этом ускоряя поиск и обновление так возможно и обойтись 16 бит идентификаторами для слов при этом используя длину слова в качестве неявного расширения пространства идентификаторов. А если для Вашей задачи достаточно скорости последовательного поиска то словарь можно даже сжать причем намного плотнее чем обычный текст.

Как писал Maxim Golubev
Простое и банальное решение, весь словарь грузить в память. Размер позволяет. Скорость работы с памятью в сотни раз быстрее, чем с винтом.

И при этом использовать двоичный поиск в массиве без всякого хэширования.

2^19 = 524288

То есть за 20 простых сравнений слово будет найдено что быстрее чем вычислить хэш функцию и потом разбираться с совпадениями.

Как писал lagif
AlexA,
10 тыс. - капля в море. Где вы видели такие словари? При одном только русском... если бы только десять тысяч, зачем бы было все это городить...

Действительно, зачем все это городить? Если Вы уточните задачу то возможно еще идеи появятся.

Как писал lagif
Joy,
Вас не поймут.

Я и не старался быть понятным. А по теме можно вспомнить о том что великий Кнут явно пишет о непригодности чистого хэширования для серьезных задач потому что у этого способа индексации очень плохая производительность в наихудшем случае. Возможно что то что предлагает euhenio по поводу дополнения хэширования деревом будет оптимальным решением. Только я бы хэшировал не часть слова а все слово полностью чем нибудь типа md5 для лучшего распределения при этом не обращая внимания на совпадения и брал бы столько бит что их бы хватило на хэширование без совпадений при идеальном случае то есть дерево было бы только страховкой для наихудшего случая при совпадениях.

Всего: 5925