Лучшие устройства хеш таблиц 2

Apr 01, 2011 15:35

Сегодня был произведен небольшой эксперимент. Человеку, который должен был бы придти на собеседование через общих знакомых было сказано, что нужно повторить хеш таблицы. Как и ожидалось, никакой роли это не сыграло, ведь люди знают что хеш таблицы часто спрашивают на собеседованиях, и поэтому готовятся. В результате, у хеш таблицы было время работы ( Read more... )

Leave a comment

ext_8865 April 1 2011, 12:29:46 UTC
Нуу определение O(f) или предела оно не так уж нужно в повседневной жизни, я второе тоже например забыл, а первое помню исключительно с целью повые^W для общего развития.

А что не так с O(n) у хэш таблицы?

Reply

skavish April 1 2011, 13:03:57 UTC
у хэштаблицы какбэ постоянное время, то есть грубо говоря зависит от размера ключа и от того как вычисляется хэш функция. в самом плохом случае она может выродится в O(n) когда у нас вместо таблицы линейный список если все элементы залезли в один бакет, но с таким в реальнй жизни я не сталкивался

Reply

mehas April 1 2011, 13:08:41 UTC
А еще существуют хеш-таблицы с гарантированно константным get. Вроде Cuckoo и Hopscotch Hash. Вставка - амортизированно O(1).

Reply

ext_8865 April 1 2011, 13:15:57 UTC
Ето то понятно, но какбэ когда говорят "алгоритм X работает за O(f)", без уточнений (amortized там или че-то еще), обычно подразумевается как раз самый плохой случай.

Reply

skavish April 1 2011, 13:26:51 UTC
хз. я не уверен что существуют такие умолчания. обычно все же явно говорят там скажем что это worst case. но в любом случае я не думаю что корректно говорить про хэшмап что у нее O(n), потому как обычно оно не так. это нужно как то очень специально постараться чтобы она стала O(n). в жизни так не бывает

Reply

ext_8865 April 1 2011, 13:44:13 UTC
Ну как же не бывает, если таблица с ресайзом, то каждый раз при ресайзе, если без, то так вообще при каждой вставке после того как туда достаточно много элементов напихали -- но с маленьким множителем. Типа, время вставки будет t = С + n / 100500, что тем не менее есть O(n).

Т.е. на собеседовании ответ O(n) по-моему вполне ок, если человек понимает что имеет ввиду, да и если он O(1) ответил, лучше это уточнить.

Reply

krlz April 1 2011, 13:45:23 UTC
В таблице с ресайзом среднее время доступа O(1).

Reply

ext_8865 April 1 2011, 13:46:48 UTC
так я всё про worst case

Reply

mehas April 1 2011, 17:34:08 UTC
Нет, ну естественно, можно сказать, что у хеш-таблиц какая-то из операций в худшем случае работает за O(N), но ясно, что это не раскрывает их сути. Поэтому в таком контексте всем ясно, что говорят про ограничение сверху на матожидание количества операций.

Reply

109 April 1 2011, 18:28:06 UTC
количество операций при ресайзе O(N), частота ресайза ~1/N, так что amortized всё равно O(1) будет.

Reply

frotmnenogi April 2 2011, 15:10:34 UTC
Нефик - ищо как бывает! Во FreeBSD libalias (который для NAT) дает шанс увидеть воочию сей факт. Там есть всё, чего вы лично может нигде и не мечтали увидеть всё вместе:
- таблица неправильных, но статичных (непереконфигурируемых) размеров;
- плохая хеш функция с удачным выбраным профилем для получения максимального числа коллизий;
- single-linked list для удаления устаревших записей.

Reply

krlz April 1 2011, 13:28:15 UTC
Вообще, автор сказал конкретно такую фразу: время работы хорошее: O(n).

Reply

squadette April 1 2011, 14:23:28 UTC
я в особо запущенных случаях перехожу в стиль "давай споём песенку про грибок и солнышко", и спрашиваю "сколько операций требуется сделать компьютеру, чтобы узнать, есть ли нужный элемент"

помогает!

Reply


Leave a comment

Up