Ремесло программиста

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Ремесло программиста » Принципы » Хэш-таблицы


Хэш-таблицы

Сообщений 1 страница 15 из 15

Опрос

Используете ли вы хэш-таблицы в своём трансляторе компиляторе?
Да. Использую.

0% - 0
Да. Использую так как это увеличивает скорость.

0% - 0
Нет. Неиспользую.

100% - 2
Нет. Меня и так всё устраивает.

0% - 0
Голосов: 2

1

Мини опрос. Используете ли вы хэш-таблицы в своём трансляторе, компиляторе?

2

https://habr.com/ru/post/339160/

3

Лис, там совершенно другие требования к хеш-функции.

4

МихалНик, цитирую статью:

Базовый вариант t1ha является (самой) быстрой переносимой хэш-функцией для построения хэш-таблиц

5

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

Отредактировано БудДен (2019-01-31 10:41:15)

6

ВежливыйЛис написал(а):

цитирую статью

А теперь попробуйте с ней построить подстановку (завершения) слов в IDE.

7

Для завершения слов в IDE, начиная с начала слова, конечно, быстрее будет сортированный контейнер.
Но во многих случаях слов мало и разница между сортированным и несортированным незаметна.

8

Но во многих случаях слов мало и разница между сортированным и несортированным незаметна.

В более менее крупных проектах десятки-сотни тысяч разных идентификаторов.

9

Но разве не будет более удобной структурой "обратный индекс по буквам" (т.е. дерево)?

Тогда, спрашивается, зачем "t1ha"? Который не учитывает алфавит конкретного языка, избыточен по размеру - хватает 32 бит, а часто и 16. И вряд ли быстрее, точнее почти всегда будет медленее.

Отредактировано МихалНик (2019-01-31 19:11:11)

10

Думается, что отфильтровать сто тысяч строк должно занимать малые доли секунды. Но я не против деревьев, конечно же.

11

Думается,

БудДен написал(а):

Думается, что отфильтровать сто тысяч строк должно занимать малые доли секунды. Но я не против деревьев, конечно же.

Сколько времени на вскидку занимала пересборка BBCB?

12

1-2 минуты, но давайте не будем. Тут особо и обсуждать-то нечего. Есть хеш-таблицы и есть деревья. Одними деревьями, по-хорошему, обойтись нельзя.

13

Хотя если подумать, то может и можно. Но не так уж нужно.

14

БудДен написал(а):

Есть хеш-таблицы и есть деревья. Одними деревьями, по-хорошему, обойтись нельзя.<...>
Хотя если подумать, то может и можно. Но не так уж нужно.

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

15

Заметим в скобках, что в куче языков (Perl,JS,Lisp,Golang) хеш-таблица является примитивным типом, а чтобы дерево было примитивным типом - я нигде не видел. Разве только в Дельфи. Но, перейдя с Дельфи на Лисп, я почуствовал большое облегчение. Для хеша нужно понять, какие объекты идентичны, а какие - нет. Для дерева нужно знать, как их сравнивать. Может быть, требование к сравнимости - это более строгое требование, поэтому предпочитают более общую структуру. Хотя в хеше всё равно в итоге дело сводится к числу.


Вы здесь » Ремесло программиста » Принципы » Хэш-таблицы