Como posso saber se uma rede de comparação é classificada?


9

Eu sou apresentado com uma rede de comparação. Como posso determinar se a rede de comparação é uma rede de classificação? Na imagem abaixo, há um exemplo de uma rede de classificação por seleção e inserção. A intenção é ter uma rede de comparação e classificar valores numéricos. Se eu testar 2 ^ n valores neste caso 2 ^ 8. Isso é muito trabalho | maneira não eficiente de testá-lo. Estou procurando um modelo / prova matemática para verificar se é uma rede de classificação válida. Uma rede de classificação com base na classificação por inserção


2
O que você pesquisou, leu ou tentou? O que te bloqueou? Quanto mais precisa a pergunta, melhor a resposta. Sua pergunta é sobre uma rede de comparação arbitrária, ou seja, um procedimento geral para determinar se uma rede de comparação arbitrária é uma rede de classificação? Ou é sua pergunta sobre o disgram fornecido.
26415

2
Você pode usar o princípio zero um: uma rede de classificação está correta se funcionar em todas as entradas zero um.
Yuval Filmus

@YuvalFilmus Esse é um teste exponencial (em número de entradas). É um problema completo do NP.?
babou 26/07/2015

@babou não faço ideia. Nesse caso, é prático.
Yuval Filmus

uma idéia óbvia é uma abordagem empírica, apenas considere sua ação em permutações aleatórias de [1..n], observe seu resultado, ou ela falhará ou será bem-sucedida, se for bem-sucedida, você tem uma abordagem quase à prova ...
vzn

Respostas:


10

Em geral, verificar se uma rede de comparação específica é realmente uma rede de classificação correta é um problema completo da Co-NP. Se você deseja verificar pelo teste, precisará tentar exponencialmente vários testes.

Em particular, existem redes de classificação que classificam todos, exceto um único valor corretamente, então você não pode esperar testar se a rede está correta ou não, simplesmente alimentando algumas entradas.

Um método padrão é testar se classifica corretamente todas as entradas compostas exclusivamente por zeros e uns. Se isso acontecer, será possível ordenar todas as entradas (mesmo as que não estão limitadas a zeros e outras). No entanto, isso requer muitos testes exponencialmente. Além disso, o número de testes não pode ser reduzido significativamente: para entradas zero um, é possível provar que são necessários pelo menos testes, muito para que a rede de classificação esteja correta.2n2nn1

Como alternativa, pode-se usar testes em que as entradas são permutações de . Isso reduz um pouco o número de testes necessários, mas você ainda precisa de muitos testes exponencialmente. Em particular, os testes são necessários e suficientes.1,2,,nC(n,n/2)1

Para provas desses fatos, consulte os seguintes documentos:

Sobre a complexidade computacional da verificação ótima da rede de classificação . Ian Parberry. Parle'91 Arquitetura e Línguas Paralelas Europa, 1991.

Limites no tamanho dos conjuntos de testes para classificação e redes relacionadas . Moon Jung Chung e B. Ravikumar. Matemática Discreta, vol 81, pp.1--9, abril de 1990.


6

Citando sua pergunta:

Estou à procura de um modelo matemático / prova para verificar esta é uma rede de ordem válido.

Embora a resposta (excelente) da DW lide com o caso geral, considerarei seu exemplo específico. Uma rede deste formulário com entradas pode ser mostrada como uma rede de classificação por indução: (veja a imagem para ilustração)n

  1. n=1 entrada é sempre classificada;
  2. Suponha que uma rede de tamanho deste formulário seja uma rede de classificação e considere uma rede de tamanho . n1n
    1. A "diagonal" mais à esquerda sempre trará corretamente o elemento maior para a ésima posição (no seu caso, );nb8
    2. Você fica com uma rede menor e semelhante com os elementos restantes ;n1
    3. Essa rede menor classificará todos os elementos restantes pela hipótese indutiva.

Ilustração de prova


5

Quando você olha para uma rede de classificação geral, pode não ter idéia de como provar que ela classifica todas as seqüências de valores (com o comprimento certo para a rede de classificação) corretamente. Mas eu aprendi sobre esse belo truque, como simplificar a tarefa:

O princípio 0-1

Quando uma rede de classificação classifica todas as seqüências (com o tamanho certo) consistindo apenas de "0" e "1" corretamente, classifica qualquer sequência (com o tamanho certo) corretamente. É claro que "0" e "1" são espaços reservados para quaisquer elementos distintos no domínio da rede de classificação.

Então você pode construir uma prova como esta:

  1. Pegue dois elementos distintos do domínio da rede de classificação e chame-os de "0" e "1", para que "0" <"1"
  2. Construa todas as cadeias binárias com o comprimento exato da rede de classificação
  3. Nessas seqüências de caracteres, substitua o bit 0 e o bit 1 por "0" e "1"
  4. Aplique essas strings à rede de classificação
  5. Cada string deve ser classificada em algo como 000..01 ... 1

Testando valores de2n

Para um teste exaustivo de uma rede de classificação de comprimento você normalmente precisaria testar todas as combinações de entrada. Mas com o princípio 0-1, você pode reduzir para testes (testando todas as cadeias binárias de comprimento ).n2nn

Podemos fazer isso mais barato?

Infelizmente, provavelmente não podemos ficar muito mais baratos que testes exaustivos, pelo menos não ao usar uma máquina de Turing para construir as provas. Obviamente, quando você olha para uma rede de classificação específica, pode ter uma idéia criativa de como fazer uma prova simples. Mas, em geral, um algoritmo para construir essas provas é muito provavelmente tão complexo quanto testar todas as cadeias binárias. A razão para isso é que a rede de classificação de provas está relacionada à classe de complexidade completa do NP, conforme descrito nas outras respostas.

"Muito mais barato" neste contexto significa "tempo polinomial". Pode ser possível encontrar um algoritmo que possa fazê-lo "um pouco" mais rápido que o tempo exponencial, mas que ainda precise de mais do que tempo polinomial. Veja os comentários para um exemplo: A execução em etapas é (um pouco) mais rápida que o tempo exponencial, mas ainda (muito) mais lenta que o tempo polinomial.2n

Prospect / Outlook

Seu cérebro é uma máquina de Turing

Uma consequência filosófica é: quando você acredita que pode encontrar uma prova criativa para a correção de cada rede de classificação, também acredita que seu cérebro provavelmente não é uma máquina de Turing.

Classificação paralela

O "princípio 0-1" também é usado para comprovar a correção dos algoritmos de classificação paralela. Eu tenho uma (espero) boa apresentação sobre isso no Github .

Corrigindo a rede de classificação

Se uma das seqüências for classificada incorretamente (para que você tenha provado que a rede de classificação está incorreta), use-a para construir uma rede de classificação sem esse bug. Basta adicionar uma comparação adicional à posição da "borda 1-0" na sequência de resultados incorreta.


Nitpick: mesmo que P! = NP, (co-) NP-completeness não exclua a existência de algoritmos subexponenciais, digamos com um tempo de execução em . (Tais algoritmos existem para muitos problemas de NP-completo).O(2n)
Raphael

@Raphael Se eu acertar, P! = NP deve proibir apenas soluções "polinomiais" para problemas com (co-) NP-completos, ou seja, soluções em que tempo de execução (e uso de memória) são vinculados por um termo polinomial para entradas longas arbitrárias. Portanto, só tenho que verificar se o termo que você forneceu é maior que qualquer polinômio para valores arbitrários de . Direita? n
27615 stefan.schwetschke

Algo assim , sim. (Eu li sua resposta como "aqui está como fazê-lo em tempo exponencial, e provavelmente não podemos fazer melhor, pois é co-NP-difícil". Isso é um não-sequitur, daí meu comentário.)
Raphael
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.