1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
| a3boot |
22.03.2007 17:58
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: 0 |
Всё ещё занимаюсь поиском в таблице служебных слов...
--- Пока что я пользуюсь чем-то подобным trunc(a*(ord(s[1]))+b*(ord(s[length(s)])))-k Такая функция не имеет коллизий, занимает не много памяти (134 ячейки на 34 слова), но, как мне кажется работает медленно. --- Может, кто сталкивался с разработкой хэш - функций для строк и готов поделиться опытом. Таблица слов известна (см. table.txt) Прикрепленные файлы
table.txt ( 204 байт )
Кол-во скачиваний: 219 |
![]() ![]() |
| a3boot |
25.03.2007 15:31
Сообщение
#2
|
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: 0 |
Malice, спасибо за помощь.
--- У меня ещё вопрос : нельзя ли сделать более простую функцию, не использующую код последней буквы? --- Дело в том, что как бы мы не изворачивались, всё равно при обращении к трём элементам массива (нулевому, первому и последнему), и взятию от них ord тратится некое постоянное время, быстрее которого хэш - функцию не вычислить! --- Видимо придётся оперировать только кодом первого и второго символа(минимальная длина слова - 2), или например кодом первого(второго) символа и длинной... |
| Malice |
25.03.2007 18:50
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Только 1-го и 2-го нельзя, т.к. они повторяются в твоем словаре (Else, ElseIF) и хеши одинаковые будут, длина+1+2-ой тоже (RECORD,REPEAT,RETURN).
А так, можно все, экспериментируй и сравнивай результаты.. Могу сказать только, что ни на Length ни на Ord время не тратится. Попробуй переложить на Asm, может сделаешь оптимальнее компилятора паскаля, не вызывай этот код (подсчет хеша) как функцию (на вызов тратится время тоже). |
a3boot Хэш - функция для строк 22.03.2007 17:58
Malice
занимает не много памяти (134 ячейки на 34 слова)... 22.03.2007 20:20
a3boot Я, наверно, не корректно высказался по поводу ячее... 22.03.2007 22:09
Malice
Время для меня в данный момент является более важ... 23.03.2007 0:54![]() ![]() |
|
Текстовая версия | 10.12.2025 16:14 |