Cosa significano "dati non patologici"?


14

Ho seguito un corso di algoritmi su Coursera. Lo ha detto il professore nel video sui tavoli di hash

Ciò che è vero è che per i dati non patologici otterrete operazioni a tempo costante in una tabella hash correttamente implementata.

Cosa significano "dati non patologici"? Puoi fare qualche esempio?

Risposte:


15

I dati patologici dovrebbero essere dati che rendono le cose sbagliate in qualche modo per il calcolo previsto. Può essere chiamato patologico quando è abbastanza raro negli usi reali, in modo che le cose funzionino bene la maggior parte delle volte. Questo a volte può essere reso matematicamente più preciso (ad esempio con probabilità), ma l'uso della parola patologica in spesso informale.

Ad esempio, l'insalata di pomodori e il ketchup sono un cibo eccellente, ad eccezione delle persone patologiche, il che significa che sono allergiche ai pomodori. Può effettivamente uccidere in alcuni casi. Ma le persone allergiche ai pomodori sono molto rare, quindi i piatti a base di pomodoro sono considerati eccellenti, tranne in casi patologici.

Esistono molti algoritmi che, pur avendo una complessità nel caso peggiore superiore a quella ottimale, sono in media buoni o migliori dell'algoritmo ottimale nel caso peggiore. Se si confronta quicksort e unisci ordinamento , quicksort è il tempo mentre unisci ordinamento è nel peggiore dei casi. Ma le persone useranno spesso quicksort, perché entrambi sono in media e la complessità dello spazio è per quicksort e per unire l'ordinamento.O(n2)O(nlgn)O(nlgn)O(lgn)O(n)

Il fatto che quicksort sia in media buono può essere attribuito al fatto che la complessità temporale realtà si verifica solo su casi patologici (che implicano cattivi ma rari).O(n2)


1
A parte questo, può anche essere importante che il fusesort sia stabile mentre quicksort non lo è.
wchargin,

11

I dati patologici sono dati che comprometteranno l'esecuzione dell'algoritmo. Per le tabelle hash, i dati patologici sono dati che causano collisioni. Ciò ovviamente dipende dalla funzione hash utilizzata.

Ad esempio, se la funzione di hash aggiunge i caratteri insieme: hash("abcd") = 'a' + 'b' + 'c' + 'd'. Quindi i dati patologici si presentano come:

{"abcd", "dcba", "cbda", ...}. Qualsiasi permutazione di "abcd"hash nella stessa posizione, quindi finirai con un elenco collegato che stavi cercando di evitare in primo luogo.

I dati non patologici sono dati non patologici.


-1

un altro modo di pensare a questo: le chiavi hash sono come "bin" separati che contengono i dati. ci si aspetterebbe / sperare che i dati siano distribuiti uniformemente tra tutti i contenitori, "bilanciati". per i dati non patologici ogni contenitore ha / contiene all'incirca la stessa quantità di dati. se i dati sono patologici (algoritmo di hashing chiave wrt), tutto si "accumula" in meno bin e alcuni bin ne hanno molto meno. questo è inefficiente perché il tempo di ricerca aumenta (e l'efficienza diminuisce / converge a quella di cercare un elenco non ordinato) quando i contenitori sono pieni. si noti che la semplice modifica dell'algoritmo di hashing chiave potrebbe trasformare i dati da "patologici" a "non patologici" o viceversa, da qui l'importanza dell'algoritmo di hashing.

inoltre ci sono molti altri algoritmi per i quali potrebbe essere applicata la distinzione tra "patologico e non patologico", con fondamentalmente i dati "patologici" che rendono l'algoritmo peggiore (ad esempio il concetto viene utilizzato anche con algoritmi di ordinamento). come puoi vedere è un concetto statistico. anche per lo stesso problema, i dati "patologici" per un algoritmo potrebbero non essere "patologici" per un altro. eccetera.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.