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:
- Pegue dois elementos distintos do domínio da rede de classificação e chame-os de "0" e "1", para que "0" <"1"
- Construa todas as cadeias binárias com o comprimento exato da rede de classificação
- Nessas seqüências de caracteres, substitua o bit 0 e o bit 1 por "0" e "1"
- Aplique essas strings à rede de classificação
- 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.