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.
9
Respostas:
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.2n 2n−n−1
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,…,n C(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.
fonte
Citando sua pergunta:
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
fonte
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:
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 ).n 2n n
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.
fonte