O que significa "dados não patológicos"?

14

Tomei uma aula de algoritmos no Coursera. O professor no vídeo sobre tabelas de hash disse que

O que é verdade é que, para dados não patológicos, você obterá operações de tempo constante em uma tabela de hash implementada corretamente.

O que significa "dados não patológicos"? Voce pode dar alguns exemplos?

Alexander Myshov
fonte

Respostas:

15

Dados patológicos devem ser dados que dão errado de alguma forma para o cálculo pretendido. Pode ser chamado de patológico quando é bastante raro em usos reais, para que as coisas funcionem bem na maioria das vezes. Às vezes, isso pode ser matematicamente mais preciso (por exemplo, com probabilidades), mas o uso da palavra patológico geralmente é informal.

Por exemplo, salada de tomate e ketchup são excelentes alimentos, exceto para pessoas patológicas, ou seja, pessoas alérgicas a tomates. Na verdade, pode matar em alguns casos. Mas as pessoas alérgicas ao tomate são muito raras, de modo que os pratos são considerados excelentes, exceto em casos patológicos.

Existem muitos algoritmos que, apesar de terem uma complexidade de pior caso acima do ideal, são em média tão bons ou melhores quanto o algoritmo de pior caso ideal. Se você comparar a classificação rápida e a mesclagem , a classificação rápida é o tempo enquanto a classificação mesclada é O ( n lg n ) no pior caso. Mas as pessoas costumam usar o quicksort, porque ambos têm o tempo O ( n lg n ), em média, e a complexidade do espaço é O ( lg n ) para o quicksort e O ( n )O(n2)O(nlgn)O(nlgn)O(lgn)O(n) para mesclar classificação.

O(n2)

babou
fonte
1
Como uma parte à parte, também pode ser importante que o mergesort seja estável e o quicksort não.
wchargin
11

Dados patológicos são dados que farão com que o algoritmo tenha um desempenho ruim. Para tabelas de hash, dados patológicos são dados que causam colisões. Isso, obviamente, depende da função de hash que está sendo usada.

Por exemplo, se a sua função hash adiciona os personagens juntos: hash("abcd") = 'a' + 'b' + 'c' + 'd'. Então os dados patológicos se parecem com:

{"abcd", "dcba", "cbda", ...}. Qualquer permutação de "abcd"hash na mesma posição, assim você terminará com uma lista vinculada que você estava tentando evitar em primeiro lugar.

Dados não patológicos são dados que não são patológicos.

saadtaame
fonte
-1

Outra maneira de pensar sobre isso: chaves de hash são como "compartimentos" separados que contêm os dados. seria de esperar / esperar que os dados sejam distribuídos igualmente entre todos os compartimentos, "equilibrados". para dados não patológicos, cada compartimento possui / contém aproximadamente a mesma quantidade de dados. se os dados são patológicos (algoritmo de hash de chave wrt), tudo "se acumula" em menos posições, e algumas posições têm muito menos. isso é ineficiente porque o tempo de pesquisa aumenta (e a eficiência diminui / converge para a pesquisa de uma lista não classificada) quando os compartimentos são preenchidos maiores. observe que a simples alteração do algoritmo de hash chave pode transformar os dados de "patológico" para "não patológico" ou vice-versa, daí a importância do algoritmo de hash.

também existem muitos outros algoritmos para os quais a distinção entre "patológico e não patológico" pode ser aplicada, com basicamente os dados "patológicos" fazendo com que o algoritmo funcione na pior das hipóteses (por exemplo, o conceito também é usado com algoritmos de classificação). como você pode ver, é um conceito estatístico. também para o mesmo problema, dados "patológicos" para um algoritmo podem não ser "patológicos" para outro. etc.

vzn
fonte