Lorsque vous regardez sur un réseau de tri général, vous ne savez peut-être pas comment prouver qu'il trie correctement chaque séquence de valeurs (ayant la bonne longueur pour le réseau de tri). Mais j'ai appris ce truc sympa, comment simplifier la tâche:
Le principe 0-1
Lorsqu'un réseau de tri trie correctement chaque séquence (avec la bonne longueur) composée uniquement de "0" et "1", il trie correctement toute séquence (avec la bonne longueur). Bien sûr, "0" et "1" sont des espaces réservés pour tous les éléments distincts dans le domaine du réseau de tri.
Vous pouvez donc construire une preuve comme celle-ci:
- Prenez deux éléments distincts du domaine du réseau de tri et appelez-les "0" et "1", de sorte que "0" <"1"
- Construire toutes les chaînes binaires avec la longueur exacte du réseau de tri
- Dans ces chaînes, remplacez le 0-bit et le 1-bit par "0" et "1"
- Appliquer ces chaînes au réseau de tri
- Chaque chaîne doit être triée en quelque chose comme 000..01 ... 1
Essai 2n valeurs
Pour un test exhaustif d'un réseau de tri de longueur nvous devrez généralement tester toutes les combinaisons d'entrée. Mais avec le principe 0-1, vous pouvez ramener cela à2n tests (test de toutes les chaînes binaires de longueur n).
Pouvons-nous le faire moins cher?
Malheureusement, nous ne pouvons probablement pas obtenir beaucoup moins cher que des tests exhaustifs, du moins pas lors de l'utilisation d'une machine de Turing pour construire les épreuves. Bien sûr, lorsque vous regardez un réseau de tri spécifique, vous pouvez avoir une idée créative sur la façon de faire une simple preuve. Mais en général, un algorithme pour construire de telles preuves est très probablement aussi complexe que de tester toutes les chaînes binaires. La raison en est que le réseau de tri de vérification est lié à la classe de complexité complète NP, comme indiqué dans les autres réponses.
«Beaucoup moins cher» dans ce contexte signifie «temps polynomial». Il pourrait être possible de trouver un algorithme qui puisse le faire "légèrement" plus rapidement que le temps exponentiel mais qui a besoin de plus que du temps polynomial. Voir les commentaires pour un exemple:2n√ pas est (légèrement) plus rapide que le temps exponentiel mais toujours (beaucoup) plus lent que le temps polynomial.
Prospect / Outlook
Votre cerveau est-il une machine de Turing
Une conséquence philosophique est la suivante: lorsque vous croyez pouvoir trouver une preuve créative de l'exactitude de chaque réseau de tri, vous pensez également que votre cerveau n'est probablement pas une machine de Turing.
Tri parallèle
Le "principe 0-1" est également utilisé pour prouver l'exactitude des algorithmes de tri parallèle. J'ai (espérons-le) une belle présentation à ce sujet sur Github .
Correction du réseau de tri
Si l'une des chaînes n'est pas triée correctement (vous avez donc prouvé que le réseau de tri est incorrect), vous pouvez l'utiliser pour construire un réseau de tri sans ce bogue. Ajoutez simplement une comparaison supplémentaire sur la position de la "bordure 1-0" dans la mauvaise chaîne de résultat.