Що означає "непатологічні дані"?


14

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

Щоправда, це те, що для непатологічних даних ви отримаєте постійні часові операції у правильно реалізованій хеш-таблиці.

Що означає "непатологічні дані"? Чи можете ви навести кілька прикладів?

Відповіді:


15

Патологічні дані повинні вважатись даними, які змушують дещо не вийти з-за намічених обчислень. Його можна назвати патологічним, коли він є досить рідкісним у фактичних цілях використання, так що все працює нормально. Іноді це може бути математично більш точним (наприклад, з ймовірностями), але вживання слова патологічне часто неформальне.

Наприклад, салат з помідорів і кетчуп - відмінна їжа, за винятком патологічних людей, маючи на увазі тих людей, у яких алергія на помідори. Це може насправді вбити в деяких випадках. Але люди з алергією на помідори дуже рідкісні, тому страви з томатів вважаються відмінними, за винятком патологічних випадків.

О(н2)О(нlgн)О(нlgн)О(lgн)О(н) для сортування злиття.

О(н2)


1
Як осторонь різновидів, також може бути важливо, щоб злиття було стабільним, а кваксор - ні.
wchargin

11

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

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

{"abcd", "dcba", "cbda", ...}. Будь-яка перестановка волевого "abcd"хешу на ту саму позицію, тож ви отримаєте пов'язаний список, якого ви намагалися уникнути в першу чергу.

Непатологічні дані - це дані, які не є патологічними.


-1

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

також існує багато інших алгоритмів, для яких може застосовуватися відмінність "патологічний проти непатологічного", в основному "патологічні" дані дозволяють алгоритму працювати в гіршому випадку (наприклад, концепція також використовується з алгоритмами сортування). як ви бачите його статистичне поняття. також для тієї ж проблеми, дані, які є "патологічними" для одного алгоритму, не можуть бути "трагічними" для іншого. тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.