Eski bir gönderiyi cevapladığım için üzgünüm.
Bunu düşünüyorum ve sabit bir alfabe ile ilgili sorunun NP-tamamlanmış olduğunu düşünüyorum.
Bu kelime problemine pozitif 1'i 3 arada SAT'ı azaltacağım
Dün sorunu çözmek için fikirlerle gelmekte zorlanıyordum. Tekrar soruya bakana kadar her değişkeni farklı yapmakta zorlandım ve ekili sembollerle karelere izin verdiğinizi fark ettim. Bu azalmayı çok kolaylaştırdı. Diğer fikrim, her bir değişken için farklı uzunluktaki kelimelere sahip olmaktı.
REDÜKSİYON
Şimdi kullanacağımız cihazları açıklayacağım:
Değişken gadget'ı
Her değişkeni farklı bir sayısal dizinle etiketliyoruz ve her değişken için farklı bir sayıya sahip olacağız. En büyük endeksi seçiyoruz ve sayıyı ikili olarak temsil ediyoruz, bu ikili zinciri .n
Sonra her değişken için iki farklı dikey kelime yaratırız. Tüm kelimelerin uzunluğu (Yalnızca sözcük listesinde yinelenen sözcüklere izin verirsek), burada | n | İkili zincir uzunluğu n .3+|n||n|n
Örneğin, en büyük dizin sayı olsun . İkili olarak bu sayıyı dönüştürdüğümüzde, ikili olarak 100 zincirini elde ederiz , bu zincirin uzunluğu üçtür. Bu nedenle , bu örnekte her değişken kelimenin uzunluğu 6 olacaktır .41006
Şimdi her değişken için iki farklı kelime yaratıyoruz. Bir kelime başlangıçta sembolüne , daha sonra aşağıdaki 2 sembolüne , daha sonra değişkenin indeksini temsil eden bir ikili zincire sahip olacak ve n zinciriyle aynı uzunluğa ve son olarak 3 sembolüne sahip olacak şekilde zinciri sıfırlayacağız. sonunda. Tabii ki semboller değiştirilebilir.32n3
Diğer sözcük neredeyse aynıdır, ancak 3 sembolü yerine sembolü olacaktır .43
Örneğin, en büyük dizin sayı olsun . İndeks 1 ile değişken için şu iki kelimeye sahip olacağız :41
ve 420014320013420014
Gördüğümüz gibi uzunluğu olan ikili sayıyı sıfırlarla doldurduk | n |1|n|
Bu kelimeleri birçok kez kopyalamalıyız, SAT örneğindeki bir değişkenin her oluşumu için her kelimenin bir kopyasına ihtiyacımız olacak. Bu, sözcük listesinde kopyalar oluşturur. Değişkeni benzersiz şekilde tanımlayan ikili zincire başka bir ikili zincir ekleyerek kopyalardan kurtulabiliriz. Bu yeni zincir, bir değişkenin her bir oluşumunu benzersiz bir şekilde tanımlayacaktır.
Bunu yapmak için, değişkenin her bir yinelemesini başka bir ikili zincir atarız ve değişkenin ikili gösteriminin sonunda bu zinciri değiştiririz.
Her değişken için farklı bir dizin oluşturmak için gereken ilk bu yeni ikili zinciri oluşturmak için her endekste en büyük numarayı aramak nerede ben her değişken için tanımlayıcılardır. Bundan sonra, n i sayısını ikili bir zincire dönüştürüyoruz ve daha sonra zincirin uzunluğunu sayıyoruz, bu sayı olarak adlandırıyoruz | n i | . Daha sonra, her bir dizin için, değişkenin her bir oluşumu için farklı bir ikili sayı oluştururuz. İkili zincirin uzunluğu oluncaya kadar sayıyı sıfırlarla dolduruyoruz | n i | böylece değişkenin her bir oluşumuna ait olan tüm kelimeler aynı uzunlukta olur.niini|ni||ni|
Bu, değişken kelimelerin içindeki kopyalardan kurtulacaktır.
x2
32010013 4201001432010103 4201010432010113 42010114
Clause gadget'ı
6
535354535453545353
435
mm|m||m|. Her ikili zinciri, maddeye ait cümle kelimelerine ekleriz.
Şimdi tahtada bir cümle gadget'ının resmini görelim:
(x2∨x3∨x4)(x1∨x2∨x3)∧(x2∨x3∨x4)
4
Sözcük listesi içinde kopyalara izin vermiyorsak görüntüyü değiştirmemiz gerekecek.
5b5b5b10
b201010bb201110bb21001b
b
Bir örneğe bakın:
Değişken tutarlılık gadget'ı
Bu, oynatıcının bir değişkenin tüm değişmez sütunları için yalnızca aynı değeri atamasını sağlayan bir araçtır.
Her değişken için yeni bir gadgetımız olacak
Her gadget için iki yeni kelime oluşturacağız.
2∗kkx263 k64 k
x2
63636464
Tekrarlanan kelimelerden kaçınmak istiyorsak, her tutarlılık gadget'ının farklı bir değişkene ait olduğuna dikkat edin. Böylece, bu gadget için oluşturduğumuz iki kelimeye her değişkeni tanımlayan ikili zinciri ekleyebiliriz.
Şimdi bu gadget'ın örnek bir resmini görelim:
x2(x1∨x2∨x3)∧(x2∨x3∨x4)
3434. Bu gagdet'in kalan kelimesini diğer satıra yerleştirebiliriz
Kelimeler listesinde kopyalara izin vermiyorsak, örnek resim içindeki kelimeler şöyle olacaktır:
Satırlar için:
6b6b0106b6b010
Sütunlar için:
b201001bb201010b
b
Bir örneğe bakın:
Clause dökümü gadget'ı
Bu, kullanılmayan yan tümce kelimelerini yerleştirmek için oluşturulmuş bir araçtır. Bunu yapmak için, her bir yan kelime için iki satır yerleştirmeliyiz. Bu satırlar başka bir satıra veya sütuna bağlı değildir.
Bununla indirgeme işlemini bitiriyoruz, çünkü azaltma için sadece 6 sembole ihtiyacımız var.
Misal
Önceki açıklama kafa karıştırıcıysa, 3 SAT'da 1 bu kelime sorununa indirgenmiş bir pozitif 1 örneğinin örneği:
Tekrarlanan kelimelere izin vermiyorsak:
İndirgenmiş örnek:
(x1∨x2∨x3)∧(x2∨x3∨x4)