¿Qué significa "datos no patológicos"?

14

Tomé una clase de algoritmos en Coursera. El profesor en el video sobre tablas hash dijo que

Lo cierto es que para los datos no patológicos, obtendrá operaciones de tiempo constante en una tabla hash implementada correctamente.

¿Qué significa "datos no patológicos"? ¿Puedes dar algunos ejemplos?

Alexander Myshov
fuente

Respuestas:

15

Se supone que los datos patológicos son datos que hacen que las cosas salgan mal de alguna manera para su cálculo previsto. Puede llamarse patológico cuando es bastante raro en usos reales, de modo que las cosas funcionan bien la mayor parte del tiempo. Esto a veces se puede hacer matemáticamente más preciso (por ejemplo, con probabilidades), pero el uso de la palabra patológico es a menudo informal.

Por ejemplo, la ensalada de tomate y el ketchup son excelentes alimentos, excepto para las personas patológicas, es decir, aquellas personas que son alérgicas a los tomates. En realidad, puede matar en algunos casos. Pero las personas alérgicas a los tomates son muy raras, por lo que los platos de tomate se consideran excelentes, excepto en casos patológicos.

Hay muchos algoritmos que, si bien tienen una peor complejidad del caso por encima del óptimo, en promedio son tan buenos o mejores que el algoritmo óptimo del peor de los casos. Si compara la ordenación rápida y la ordenación por fusión , la ordenación rápida es el tiempo mientras que la ordenación por fusión es O ( n lg n ) en el peor de los casos. Pero las personas a menudo usan quicksort, porque ambos son tiempo O ( n lg n ) en promedio, y la complejidad del espacio es O ( lg n ) para quicksort y O ( n )O(norte2)O(nortelgnorte)O(nortelgnorte)O(lgnorte)O(norte) para fusionar tipo.

O(norte2)

babou
fuente
1
Como un comentario aparte, también puede ser importante que mergesort sea estable mientras que quicksort no lo es.
wchargin
11

Los datos patológicos son datos que harán que el algoritmo funcione mal. Para las tablas hash, los datos patológicos son datos que causan colisiones. Eso, por supuesto, depende de la función hash que se utilice.

Por ejemplo, si su función hash añade los personajes juntos: hash("abcd") = 'a' + 'b' + 'c' + 'd'. Entonces los datos patológicos se ven así:

{"abcd", "dcba", "cbda", ...}. Cualquier permutación de "abcd"hash a la misma posición, por lo que terminará con una lista vinculada que intentaba evitar en primer lugar.

Los datos no patológicos son datos que no son patológicos.

saadtaame
fuente
-1

Otra forma de pensar en esto: las claves hash son como "contenedores" separados que contienen los datos. uno esperaría / esperaría que los datos se distribuyan uniformemente entre todos los contenedores, "equilibrados". para datos no patológicos, cada contenedor tiene / contiene aproximadamente la misma cantidad de datos. Si los datos son patológicos (algoritmo de hash de clave wrt), todo se "acumula" en menos contenedores, y algunos contenedores tienen muchos menos. Esto es ineficiente porque el tiempo de búsqueda aumenta (y la eficiencia disminuye / converge a la de buscar una lista sin clasificar) cuando los contenedores se llenan más. tenga en cuenta que el simple cambio del algoritmo de hash clave podría convertir los datos de "patológicos" a "no patológicos" o viceversa, de ahí la importancia del algoritmo de hash.

También hay muchos otros algoritmos para los cuales se podría aplicar la distinción de "patológico versus no patológico", con básicamente los datos "patológicos" que hacen que el algoritmo funcione en el peor de los casos (por ejemplo, el concepto también se usa con algoritmos de clasificación). como puedes ver es un concepto estadístico. También para el mismo problema, los datos que son "patológicos" para un algoritmo podrían no ser "patológicos" para otro. etc.

vzn
fuente