![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Сверхбыстрый поиск |
|
|
Теория - Сверхбыстрый поиск
|
![]() Старожил Сообщения: 361 |
Добрый вечер!
Мне нужно реализовать очень быстрый поиск в маленькой таблице из сорока элементов. Поиск по таблице будет прогоняться десятки-сотни тысяч раз подряд, поэтому нужен быстрый алгоритм. Пораскинув мозгами я пришёл к выводу, что без хэш-таблицы тут не обойтись... (к правильному выводу пришёл я?) Каков наиболее быстрый алгоритм поиска в хэш-таблице? Что мне использовать? Или же есть что-то, работающее быстрее в данной ситуации, чем хэш-поиск. Таблица фиксированная, в процессе поиска меняться не будет, её можно изначально упорядочить наиболее удобным образом (рекомендации?). |
|
Отправлено: 18:36, 24-02-2010 |
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать Цитата ManHack:
Приведи пример записи таблицы. |
|
------- Отправлено: 20:52, 24-02-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Старожил Сообщения: 361
|
Профиль | Отправить PM | Цитировать В таблице два поля: строка и множество (паскалевский перечислимый тип).
Т.е. одна запись таблицы выглядит, например, так: DEFENITION | ccDef где DEFENITION - строка - ключ, по которой ведётся поиска, а ccDef - элемент множетства ( ccDef, ccTor, {...} , ccAss, ccOp ) - данные, которые мы ищем по ключу. |
Отправлено: 17:54, 25-02-2010 | #3 |
![]() Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать ManHack, думаю хэшь стоит использовать если строки большого размера.
|
------- Отправлено: 19:27, 25-02-2010 | #4 |
![]() Старожил Сообщения: 361
|
Профиль | Отправить PM | Цитировать Строки маленькие, до десяти символов.
Что можно сделать, чтобы не возникало коллизий? ganselo, а раз не хэш, тогда что? что будет работать быстрее поиска по хэш-таблице в такой ситуации? |
|
Отправлено: 01:04, 26-02-2010 | #5 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать кажись только хеш по самому различаемому (из 40 статичных строчек) символу + длина строчки (если различается)
|
Отправлено: 00:02, 28-02-2010 | #6 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата ManHack:
По хэшу тоже надо как-то искать - т.е. это не ответ на вопрос об алгоритме поиска. Тем более, хэш надо вычислять на каждом шаге. Есть большое подозрение, что на таком небольшом количестве данных тупой перебор со сравненим окажется самым выгодным. |
|
Отправлено: 11:47, 03-03-2010 | #7 |
![]() Старожил Сообщения: 361
|
Профиль | Отправить PM | Цитировать Нужно придумать идеальную хеш-функцию для слов ARRAY, BY, BEGIN, CASE далее по списку (чтобы значения хеш-функции для различных слов из списка не совпадали)
Цитата:
for i := 1 to length (Stroka) do result := result + Stroka[i]*31; (символы строки складываются и каждый раз домножается на 31) hash := result mod SizeOfHashTable; но в таком случае у меня совпали значение хеш-функции для DIV и NIL. Что можно придумать лучшее, чтобы значения не совпадали? Как использовать повторное хеширование? |
|
Последний раз редактировалось ManHack, 04-03-2010 в 23:44. Отправлено: 23:23, 04-03-2010 | #8 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать ИМХО первая буква XOR вторая
а сочетание {первая, втроая, последняя} - вобще уникальное |
Отправлено: 07:56, 05-03-2010 | #9 |
![]() Старожил Сообщения: 361
|
Профиль | Отправить PM | Цитировать Цитата pva:
первая XOR последняя, первая XOR вторая XOR последняя, длина слова XOR первая XOR последняя, длина слова XOR вторая XOR последняя, XOR всех букв - все они дают коллизии на данном множестве из 34 слов. Пишу так: Какие ещё будут идеи? |
|
Отправлено: 12:33, 06-03-2010 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
IBM представляет сверхбыстрый процессор на графеновых транзисторах | OSZone News | Новости железа | 0 | 06-02-2010 04:30 | |
Поиск в IE | Guest | Хочу все знать | 21 | 03-03-2004 09:52 |
|