Что означает «непатологические данные»?

14

Я взял класс алгоритмов на Coursera. Профессор в видео о хеш-таблицах сказал, что

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

Что означает «непатологические данные»? Можете привести несколько примеров?

Александр Мышов
источник

Ответы:

15

Предполагается, что патологические данные - это данные, которые каким-то образом приводят к ошибкам для ваших предполагаемых вычислений. Его можно назвать патологическим, когда он достаточно редок в реальных условиях, так что в большинстве случаев все работает нормально. Иногда это можно сделать математически более точным (например, с вероятностями), но использование слова патологическое часто неформально.

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

О(N2)О(NЛ.Г.N)О(NЛ.Г.N)О(Л.Г.N)О(N) для сортировки слиянием.

О(N2)

Babou
источник
1
Помимо сортировки, также может быть важно, чтобы сортировка слиянием была стабильной, а сортировка с сортировкой - нет.
wchargin
11

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

Например, если ваш хэш - функция добавляет символы вместе: hash("abcd") = 'a' + 'b' + 'c' + 'd'. Тогда патологические данные выглядят так:

{"abcd", "dcba", "cbda", ...}, Любая перестановка "abcd"хэша в одну и ту же позицию приводит к тому, что в итоге вы получите связанный список, который вы в первую очередь пытались избежать.

Непатологические данные - это данные, которые не являются патологическими.

saadtaame
источник
-1

Еще один способ думать об этом: хэш-ключи похожи на отдельные «корзины», которые содержат данные. можно было бы ожидать / надеяться, что данные равномерно распределены между всеми бункерами, «сбалансированными». для непатологических данных каждый бин имеет / содержит примерно одинаковое количество данных. если данные являются патологическими (алгоритм хеширования ключа), все они «накапливаются» в меньшем количестве элементов, а в некоторых - гораздо меньше. это неэффективно, потому что время поиска увеличивается (и эффективность уменьшается / сходится к эффективности поиска несортированного списка), когда ячейки заполнены больше. обратите внимание, что простое изменение алгоритма хеширования ключа может превратить данные из «патологического» в «непатологический» или наоборот, отсюда важность алгоритма хеширования.

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

ВЗН
источник