Artisan

Artisan
Рейтинг
377
Регистрация
04.03.2005
Пишу программы для вычислительных машин, от драйверов устройств, до сложных систем для работы с большим количеством знаний. Умею бережно использовать железо, и другие ресурсы.
Как писал Kostya
ну какая это реклама? если каталог с прямой ссылкой и не требует обратной :) за это, думаю, вам все только спасибо скажут

Я раньше тоже так думал, попробовал рассказать про один из моих сайтов с белым и пушистым каталогом, начислили 7 баллов штрафа за рекламу, а сам рассказ почистили.

Как писал lagif
что-то я не совсем поняла, чем неявные идентификаторы лучше...

Проще реализовать, быстрее искать, экономится память, но их не всегда есть смысл использовать.

Как писал lagif
а насчет того, что "идентификаторы нужны только для восстановления текста из прямого индекса" - вот тут я крупно сомневаюсь. :)

У меня написано "самим словам идентификаторы нужны только для восстановления текста из прямого индекса" причем для поисковой системы а не про общий случай.

Как писал lagif
Может вы того... знаков препинания бы больше ставили для разнообразия. А то мысль нечитабельна.

Может Вы того, объясните что значит слово "нечитабельна" по поводу мысли, а то я такого слова в словаре не нашел.

Как писал lagif
Об учебниках: там вообще много чего понаписано. Практика же отличается от теории во многом.

Вы вечный двигатель еще случаем не изобрели?

Как писал lagif
А если точно - какие вообще учебники вы имеете в виду?

Любой нормальный учебник по проектированию баз данных причем самое его начало, декомпозиция, нормальная форма Бойса-Кодда, нормализация, почитайте внимательно для чего все это делается.

Как писал lagif
Насчет же задачи - мне, по крайней мере, она ясна очень даже сильно. Маячит уже вторую неделю.

Мне Ваша путеводная задача пока что даже слабо не ясна.

Как писал lagif
Artisan,
Ну так это и будут идентификаторы :)

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

Как писал lagif
Artisan,
Кстати, а вы пробовали? :/

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

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

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

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

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

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

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

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

2^19 = 524288

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

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

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

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

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

Всего: 5938