« Réductions de problèmes » : différence entre les versions

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche
Ligne 10 : Ligne 10 :
===1.2 Exemples===
===1.2 Exemples===
'''<u>Exemple dans les ensembles :</u>'''<br />
'''<u>Exemple dans les ensembles :</u>'''<br />
<div>Prenons un ensemble E = {a, b, c} et un ensemble S = {{a, b}, {a, b, c}, {c, b}, {c}} de parties de E.<br />
Prenons un ensemble E = {a, b, c} et un ensemble S = {{a, b}, {a, b, c}, {c, b}, {c}} de parties de E.<br />
Une couverture exacte de E est C, un sous-ensemble de S, tel que chaque élément de E est un élément d’exactement un des ensembles de C .<br />
Une couverture exacte de E est C, un sous-ensemble de S, tel que chaque élément de E est un élément d’exactement un des ensembles de C .<br />
Ici, C = {{a, b}, {c}}. ''IMAGE (légende : « Exemple de problème de couverture exacte dans les ensembles »)''</div>
Ici, C = {{a, b}, {c}}. ''IMAGE (légende : « Exemple de problème de couverture exacte dans les ensembles »)''
<br /><br />

'''<u>Exemple dans les matrices :</u>'''<br />
'''<u>Exemple dans les matrices :</u>'''<br />
Le problème de couverture exacte peut également être représenté sous forme matricielle. Les colonnes correspondent aux contraintes à respecter et les lignes aux choix possibles pour former la couverture exacte. Chaque case de la matrice contient un 1, si la contrainte est respectée, ou un 0, sinon.<br />
Le problème de couverture exacte peut également être représenté sous forme matricielle. Les colonnes correspondent aux contraintes à respecter et les lignes aux choix possibles pour former la couverture exacte. Chaque case de la matrice contient un 1, si la contrainte est respectée, ou un 0, sinon.<br />

Version du 16 mai 2023 à 09:11

Transformer un problème que l’on souhaite résoudre en une ou plusieurs instances d’un autre problème que l’on sait résoudre s’appelle, en complexité algorithmique, une réduction de problème. C’est le cas du problème, utilisé dans ce projet, de couverture exacte.
Dans le cadre de ce projet, les programmes ont été écrits en python et appelés sur Ubuntu afin d’utiliser le programme DLX.

1 Problème de couverture exacte

1.1 Définition

Le problème de couverture exacte est un problème classique en informatique et utilisé dans la résolution de problèmes logiques tels que le sudoku, le pavage par polyominos, le problème des n reines, etc.
Le problème de couverture exacte consiste à choisir des ensembles qui vont pouvoir répondre à des contraintes. Cependant, chacune de ces contraintes doivent être répondus par un unique ensemble.
Par exemple, dans le jeu du sudoku, la contrainte est que chaque case doit être remplie tel que toutes les colonnes et lignes doivent contenir exactement un chiffre de chaque type (1, 2, 3, …).

1.2 Exemples

Exemple dans les ensembles :
Prenons un ensemble E = {a, b, c} et un ensemble S = {{a, b}, {a, b, c}, {c, b}, {c}} de parties de E.
Une couverture exacte de E est C, un sous-ensemble de S, tel que chaque élément de E est un élément d’exactement un des ensembles de C .
Ici, C = {{a, b}, {c}}. IMAGE (légende : « Exemple de problème de couverture exacte dans les ensembles »)

Exemple dans les matrices :
Le problème de couverture exacte peut également être représenté sous forme matricielle. Les colonnes correspondent aux contraintes à respecter et les lignes aux choix possibles pour former la couverture exacte. Chaque case de la matrice contient un 1, si la contrainte est respectée, ou un 0, sinon.
Soit E = {1, 2, 3, 4} et S = {F, G, H, I, J, K}. Le problème de couverture exacte est représentée par la matrice suivante :