Désolé d'avoir répondu à un ancien message.
J'y ai pensé et je pense que le problème avec un alphabet fixe est également NP-complet.
Je vais réduire le SAT 1-en-3 positif à ce problème de mot
Hier, j'avais du mal à trouver des idées pour résoudre le problème. J'ai eu du mal à rendre chaque variable différente jusqu'à ce que je revoie la question et que je réalise que vous autorisez à avoir des carrés avec des symboles plantés. Cela a beaucoup simplifié la réduction. Mon autre idée était d'avoir des mots de longueur différente pour chaque variable différente.
LA RÉDUCTION
Je vais maintenant décrire les gadgets que nous allons utiliser:
Gadget variable
Nous étiquetons chaque variable avec un index numérique différent et nous aurons un nombre différent pour chaque variable. On choisit le plus grand indice et on représente le nombre en binaire, on appellera cette chaîne binaire .n
Ensuite, nous créons deux mots verticaux différents pour chaque variable. Tous les mots auront une longueur de (Seulement si nous autorisons les mots en double dans la liste des mots), où | n | est la longueur de la chaîne binaire n .3 + | n || n |n
Par exemple, que le plus grand indice soit le nombre . Lorsque nous transformons ce nombre en binaire, nous obtenons la chaîne 100 en binaire, cette chaîne a une longueur de trois. Ainsi, chaque mot variable aura une longueur de 6 dans cet exemple.41006
Maintenant, nous créons deux mots différents pour chaque variable. Un mot aura le symbole au début, puis le symbole 2 ci-dessous, puis une chaîne binaire qui représente l'index de la variable et on remplit avec des zéros la chaîne pour qu'elle ait la même longueur que la chaîne n et enfin le symbole 3 à la fin. Bien sûr, les symboles peuvent être modifiés.32n3
L'autre mot est presque le même mais il aura le symbole au lieu du symbole 3 .43
Par exemple, que le plus grand indice soit le nombre . Nous aurons les deux mots suivants pour la variable d'index 1 :41
et 420014320013420014
Comme nous le voyons, nous avons rempli la représentation binaire du nombre avec des zéros afin qu'il ait une longueur de | n |1|n|
Nous devons copier ces mots plusieurs fois, nous aurons besoin d'une copie de chaque mot pour chaque occurrence d'une variable dans l'instance SAT. Cela créera des doublons dans la liste des mots. Nous pouvons nous débarrasser des doublons en ajoutant une autre chaîne binaire à la chaîne binaire qui identifie de manière unique la variable. Cette nouvelle chaîne identifiera de manière unique chaque occurrence d'une variable.
Pour ce faire, nous attribuons simplement à chaque occurrence de la variable une autre chaîne binaire et nous olace cette chaîne à la fin de la représentation binaire de la variable.
Pour créer cette nouvelle chaîne binaire, nous devons d'abord créer un index différent pour chaque variable, nous appelons le plus grand nombre de chaque index où i est un identifiant pour chaque variable. Après cela, nous transformons le nombre n i en une chaîne binaire et ensuite nous comptons la longueur de la chaîne, nous appelons ce nombre | n i | . Ensuite, pour chaque index, nous créons un nombre binaire différent pour chaque occurrence de la variable. Nous remplissons le nombre de zéros jusqu'à ce que la longueur de la chaîne binaire devienne | n i | de sorte que tous les mots qui appartiennent à chaque occurrence de la variable ont la même longueur.niini|ni||ni|
Cela supprimera les doublons à l'intérieur des mots variables.
x2
32010013 4201001432010103 4201010432010113 42010114
Gadget Clause
6
535354535453545353
435
mm|m||m|. Nous ajoutons chaque chaîne binaire aux mots de clause qui appartiennent à la clause.
Voyons maintenant une image d'un gadget de clause dans le tableau:
(x2∨x3∨x4)(x1∨x2∨x3)∧(x2∨x3∨x4)
4
Si nous n'autorisons pas les doublons dans la liste des mots, nous devrons modifier l'image.
5b5b5b10
b201010bb201110bb21001b
b
Voir un exemple:
Gadget à cohérence variable
Il s'agit d'un gadget qui garantit que le lecteur ne peut attribuer la même valeur qu'à toutes les colonnes littérales d'une variable.
Nous aurons un nouveau gadget pour chaque variable
Nous allons créer deux nouveaux mots pour chaque gadget.
2∗kkx263 k64 k
x2
63636464
Si nous voulons éviter les mots répétés, notez que chaque gadget de cohérence appartient à une variable différente. Nous pouvons donc ajouter la chaîne binaire qui identifie chaque variable aux deux mots que nous avons créés pour ce gadget.
Voyons maintenant un exemple d'image de ce gadget:
x2(x1∨x2∨x3)∧(x2∨x3∨x4)
3434. Nous pouvons placer le mot restant de ce gagdet dans l'autre ligne
Si nous n'autorisons pas les doublons dans la liste des mots, les mots à l'intérieur de l'exemple d'image seront:
Pour les rangées:
6b6b0106b6b010
Pour les colonnes:
b201001bb201010b
b
Voir un exemple:
Clause de vidage du gadget
Il s'agit d'un gadget créé pour placer les mots de clause inutilisés. Pour ce faire, nous n'avons qu'à placer deux lignes pour chaque mot de clause dans une partie vide du tableau. Ces lignes ne sont connectées à aucune autre ligne ou colonne.
Avec cela, nous finissons la réduction, comme nous l'avons affirmé, nous n'avons besoin que de 6 symboles pour la réduction.
Exemple
Si l'explication précédente était déroutante, voici un exemple d'image d'une instance de SAT positif 1 sur 3 qui a été réduite à ce mot problème:
Si nous interdisons les mots répétés:
L'instance qui a été réduite est:
(x1∨x2∨x3)∧(x2∨x3∨x4)
Je pense que la réduction suivante du chemin hamiltonien dirigé fonctionne:
Maintenant, pour remplir les escaliers, seuls les mots-sommets peuvent être placés dans les marches, et pour relier deux sommets, un mot de bord doit être placé entre eux, ce qui correspond à un bord existant dans le graphique. Les bords non utilisés peuvent être placés dans la deuxième partie de la planche. La deuxième direction est triviale.
Je pense que cela fonctionne (la preuve d'exactitude que j'ai esquissée est au mieux agitée à la main, mais quand même).
la source