On me présente un réseau de comparaison. Comment déterminer si le réseau de comparaison est un réseau de tri? Dans l'image ci-dessous, il y a un exemple de réseau de tri par sélection et de tri par insertion. L'objectif est d'avoir un réseau de comparaison et de trier les valeurs numériques. Si je teste 2 ^ n valeurs dans ce cas 2 ^ 8. C'est beaucoup de travail | moyen non efficace de le tester. Je recherche un modèle mathématique / preuve pour vérifier qu'il s'agit d'un réseau de tri valide.
9
Réponses:
En général, vérifier si un réseau de comparaison particulier est effectivement un réseau de tri correct est un problème complet de Co-NP. Si vous souhaitez vérifier en testant, vous devez essayer de manière exponentielle de nombreux tests.
En particulier, il existe des réseaux de tri qui trient correctement toutes les valeurs sauf une, de sorte que vous ne pouvez pas espérer tester si le réseau est correct ou non simplement en l'alimentant en quelques entrées.
Une méthode standard consiste à tester s'il trie correctement toutes les entrées composées uniquement de zéros et de uns. Si c'est le cas, il s'avère qu'il triera toutes les entrées (même celles qui ne sont pas limitées aux zéros et aux uns). Cependant, cela nécessite de manière exponentielle de nombreux tests. De plus, le nombre de tests ne peut pas être réduit de manière significative: pour des entrées nulles, il est possible de prouver qu'au moins tests sont nécessaires, à tel point que le réseau de tri est correct.2n 2n- n - 1
Alternativement, on peut utiliser des tests où les entrées sont des permutations de . Cela réduit quelque peu le nombre de tests nécessaires, mais vous avez encore besoin de manière exponentielle de nombreux tests. En particulier, les tests sont nécessaires et suffisants.1 , 2 , … , n C( n , ⌊ n / 2 ⌋ ) - 1
Pour des preuves de ces faits, consultez les documents suivants:
Sur la complexité informatique de la vérification du réseau de tri optimal . Ian Parberry. Parle'91 Parallel Architectures and Languages Europe, 1991.
Limites sur la taille des jeux de tests pour le tri et les réseaux associés . Moon Jung Chung et B. Ravikumar. Discrete Mathematics, vol 81, pp.1--9, avril 1990.
la source
Citant votre question:
Alors que (l'excellente) réponse de DW concerne le cas général, je considérerai votre exemple spécifique. Un réseau de cette forme avec entrées peut être montré comme un réseau de tri par induction: (voir l'image pour l'illustration)n
la source
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:
Essai2n valeurs
Pour un test exhaustif d'un réseau de tri de longueurn vous 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.
la source