Cuando mira en una red de clasificación general, es posible que no tenga idea de cómo probar que ordena cada secuencia de valores (que tiene la longitud correcta para la red de clasificación) correctamente. Pero he aprendido sobre este buen truco, cómo simplificar la tarea:
El principio 0-1
Cuando una red de clasificación ordena todas las secuencias (con la longitud correcta) que consisten únicamente en "0" y "1" correctamente, entonces ordena cualquier secuencia (con la longitud correcta) correctamente. Por supuesto, "0" y "1" son marcadores de posición para cualquier elemento distinto en el dominio de la red de clasificación.
Entonces puedes construir una prueba como esta:
- Tome dos elementos distintos del dominio de la red de clasificación y llámelos "0" y "1", de modo que "0" <"1"
- Construya todas las cadenas binarias con la longitud exacta de la red de clasificación
- En estas cadenas, sustituya el bit 0 y el bit 1 por "0" y "1"
- Aplicar estas cadenas a la red de clasificación
- Cada cadena debe clasificarse en algo así como 000..01 ... 1
Prueba de valores2n
Para una prueba exhaustiva de una red de clasificación de longitud , generalmente tendría que probar todas las combinaciones de entrada. Pero con el principio 0-1 puede reducir esto a pruebas (probando todas las cadenas binarias de longitud ).n2nn
¿Podemos hacerlo más barato?
Desafortunadamente, probablemente no podamos obtener mucho más barato que las pruebas exhaustivas, al menos no cuando se usa una máquina Turing para construir las pruebas. Por supuesto, cuando busca una red de clasificación específica, puede tener una idea creativa de cómo hacer una prueba simple. Pero en general, un algoritmo para construir tales pruebas es muy probable que sea tan complejo como probar todas las cadenas binarias. La razón de esto es que la red de clasificación de pruebas está relacionada con la clase de complejidad completa NP como se describe en las otras respuestas.
"Mucho más barato" en este contexto significa "tiempo polinómico". Es posible encontrar un algoritmo que pueda hacerlo "un poco" más rápido que el tiempo exponencial, pero que aún necesita más que el tiempo polinómico. Vea los comentarios para ver un ejemplo: Ejecutar en pasos es (ligeramente) más rápido que el tiempo exponencial pero aún (mucho) más lento que el tiempo polinómico.2n√
Perspectiva / Perspectiva
¿Tu cerebro es una máquina de Turing
Una consecuencia filosófica es: cuando crees que puedes encontrar una prueba creativa de la exactitud de cada red de clasificación, también crees que tu cerebro probablemente no sea una máquina de Turing.
Clasificación paralela
El "principio 0-1" también se utiliza para comprobar la exactitud de los algoritmos de clasificación paralela. Tengo una (con suerte) buena presentación sobre esto en Github .
Corregir la red de clasificación
Si una de las cadenas está ordenada incorrectamente (por lo que ha demostrado que la red de clasificación es incorrecta), puede usar esto para construir una red de clasificación sin ese error. Simplemente agregue una comparación adicional sobre la posición del "borde 1-0" en la cadena de resultados incorrecta.