A classificação de uma lista pode ser verificada sem comparar os vizinhos?

14

Uma lista de itens n pode ser verificada conforme classificada, comparando cada item ao seu vizinho. No meu aplicativo, não poderei comparar todos os itens com seus vizinhos: em vez disso, as comparações às vezes serão entre elementos distantes. Dado que a lista contém mais de três itens e também que a comparação é a única operação suportada, já existe uma "rede" de comparações que provam que a lista está classificada, mas falta pelo menos um vizinho direto para vizinho comparação?

Formalmente, por uma sequência de elementos eEu , I tem um conjunto de pares de índices (j,k) para os quais se conhecem eu ej>ek , ej=ek , ou ej<ek . Existe um par (eu,eu+1) que está faltando no conjunto de comparações. É sempre possível, então, provar que a sequência está classificada?

Nome em Exibição
fonte
1
Uma observação caso alguém encontre essa página posteriormente com a questão de saber se você pode verificar se uma lista está classificada sem comparar nada; Somente se você puder colocar alguns limites nas entradas e / ou saber algo sobre o formato das entradas; (por exemplo, classificação radix).
HammerN'Songs
Existe, no entanto, a possibilidade de otimizar o número de comparações usadas nos casos em que não são classificadas.
Acumulação 10/05/19
1
@ Acumulação Existe realmente essa possibilidade? Deve ser trivial usar qualquer programa desse tipo e elaborar uma lista contraditória de comprimento n que força o programa a fazer comparações n-1. Veja também A Killer Adversary for QuickSort , que leva essa idéia ainda mais longe para forçar a quicksort à parte ruim de sua análise assintótica.
Daniel Wagner
@DanielWagner Sim, essa otimização deve ser feita com relação à entrada esperada do aplicativo específico.
Acumulação de 11/05/19
Provavelmente não é possível. Mas, por favor, esclareça: você quis dizer que conhece apenas as comparações da forma (j, j + 1), e não geral (j, k)? Por exemplo, você já conhece a comparação de dois itens de índices (j, j + 3)?
1111 Ron

Respostas:

34

(Eu,Eu+1)

1,2,...,Eu-1,Eu,Eu+1,Eu+2,...,n1,2,...,Eu-1,Eu+1,Eu,Eu+2,...,n

Yuval Filmus
fonte