O que significa um algoritmo de classificação ser "estável"?


43

Ao ler sobre vários algoritmos de classificação, vi mencionar que alguns são "estáveis" e outros não. O que isso significa e quais compensações estão envolvidas nessa base ao selecionar um algoritmo?


32
Esta pergunta seria facilmente respondida dentro de um minuto com a wikipedia. pt.wikipedia.org/wiki/Sorting_algorithm
Mare Infinitus


4
Esta é uma pergunta que não possui pesquisa própria. Respondeu com uma imagem da Wikipedia. E recebe um feedback muito bom, o que de alguma forma me deixa triste. IMHO deve ser fechado, e não obter votos.
Mare Infinitus

4
Por outro lado, acabei de ver isso e aprendi algo novo. Se eu soubesse que não sabia disso, poderia ter pesquisado, mas, como o OP fez a pergunta, agora sei o que não sabia que não sabia.
Kazark

4
Geralmente, "apenas pesquise no google" ou "procure na wikipedia" não são respostas aceitáveis ​​consideráveis ​​nos sites StackExchange. Porque eles não fornecem uma resposta para o que o reclamante está verificando como uma pergunta válida com a chamada para as autoridades do google e da wikipedia. Se a pergunta for facilmente uma duplicata de outra ou perguntas dentro de programmers.stackexchange, você poderá reclamar.
Michael Paulukonis

Respostas:


88

Uma classificação estável é aquela que preserva a ordem original do conjunto de entradas, em que o algoritmo de comparação não distingue entre dois ou mais itens.

Considere um algoritmo de classificação que classifique as cartas por classificação , mas não por naipe. A classificação estável garantirá que a ordem original de cartões com o mesmo valor seja preservada; o tipo instável não.

insira a descrição da imagem aqui


38
Correção: O algoritmo instável exibe um comportamento indefinido quando dois elementos são iguais, é perfeitamente possível que a ordem às vezes seja preservada.
Aaaaaaaaaaaa

9
Bela imagem, muito semelhante à wikipedia pt.wikipedia.org/wiki/Sorting_algorithm
Mare Infinitus

9
@MareInfinitus: É de domínio público. Verifique a atribuição na imagem original.
Robert Harvey

2
Uma boa imagem explica mais rápido e mais profundo do que muitas palavras no caso médio. Questões legais não eram o que eu queria falar.
Mare Infinitus

3
@RobertHarvey Na verdade, acredito que o editor está correto. Atualmente, sua postagem diz que uma classificação estável preserva a ordem das cartas no mesmo naipe, mas as cartas no mesmo naipe terão diferentes classificações e, portanto, devem ser reorganizadas para obter a ordem classificada. Por exemplo, a classificação não preserva a ordem dos 2 e 5 dos corações. É a ordem das cartas com o mesmo grau (e naipes diferentes) que faz a diferença entre estável e instável.
David Z

26

Algoritmos estáveis ​​preservam a ordem relativa dos elementos.

Portanto, um algoritmo de classificação estável manterá a ordem relativa dos valores que se comparam como iguais.

Considere um algoritmo de classificação em que classificamos uma coleção de pontos 2D com base em sua dimensão X.

Coleção a ser classificada: {(6, 3), (5, 5), (6, 1), (1, 3)}

Estável Classificado: {(1, 3), (5, 5), (6, 3), (6, 1)}

Regular Ordenado: Qualquer um {(1, 3), (5, 5), (6, 3), (6, 1)}, ou{(1, 3), (5, 5), (6, 1), (6, 3)}


Quanto à troca ... bem, a classificação estável é menos eficiente, mas às vezes você precisa.

Por exemplo, quando um usuário clica no cabeçalho de uma coluna para classificar valores em uma interface do usuário, é razoável esperar que sua ordem de classificação anterior seja usada no caso de valores iguais.


2
É menos eficiente? Parece "óbvio", mas alguns dos melhores algoritmos de classificação são estáveis ​​por natureza (por exemplo, qualquer coisa baseada na classificação por mesclagem, como a classificação Tim), eles não precisam fazer nenhum trabalho extra explícito para serem estáveis.

9
Estável não tem nada a ver com desempenho em geral. O mergesort é executado em O (n * log n) e é estável. O Heapsort tem desempenho semelhante, mas não é estável.
Mare Infinitus

2
"Estável" também pode se aplicar a estruturas de dados, por exemplo. um "heap estável" é um heap que remove da fila os itens que têm a mesma prioridade na mesma ordem em que foram colocados na fila. Isso é muito importante para algoritmos eficientes de localização de caminhos.
BlueRaja - Danny Pflughoeft

1
Não há classificações estáveis ​​que são comparações O (n ln n) e também O (1) na memória. A velocidade não é a única medida de eficiência. O fato de você não conseguir classificar de maneira estável é importante.
QuestionC

3
@QuestionC Parece que a classificação de blocos é estável e se encaixa nesses limites.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.