Kısa süre önce bu soruya rastladım: "Size 'true', 'false', 've', 'veya' ve 'xor' sembollerinden oluşan bir boole ifadesi verilir. Örneğin, "true ve false xor true" ifadesini true olarak değerlendirecek şekilde parantez haline getirmenin iki yolu vardır. "
Dinamik bir programlama problemi olduğunu biliyordum, bu yüzden aşağıdaki gibi kendi başıma bir çözüm bulmaya çalıştım. Diyelim ki ABC .... D diye bir ifademiz var, burada '.' , herhangi bir işlemi temsil eder ve veya, xor ve büyük harfler doğru veya yanlış temsil eder. Diyelim ki, K boyutundaki bu ifadenin doğru üretmenin yol sayısı N'dir. Bu ifadeye yeni bir boole değeri E eklendiğinde, bu yeni ifadeyi 1 parantez içine almanın 2 yolu vardır. ((ABC .... D) .E) yani. ABC'nin tüm olası parantezleri ile .... D sonunda E ekliyoruz. 2. (ABC (DE)) yani. önce DE'yi değerlendirin ve sonra bu K boyutu ifadesinin gerçek üretme yollarının sayısını bulun.
varsayalım ki T [K], K boyutuna sahip ifadenin doğru üretme yollarının sayısıdır, o zaman T [k] = val1 + val2 + val3, burada val1, val2, val3 aşağıdaki gibi hesaplanır.
1) E, D ile gruplandığında.
i) D'nin değerini değiştirmez
ii) D'nin değerini tersine çevirir
ilk durumda val1 = T [K] = N. (Bu, ilk ABC ... D ifadesine düştüğü için). İkinci durumda dp [K] değerini D değeri ters çevrilmiş ve val1 olarak yeniden değerlendirin.
2) E, bütün ifadeyle gruplandırıldığında.
// val2, ABC'nin parantez içindeki tüm örnekleri arasında 'true' veren ifadelerle üretilecek 'true' sayısını içerir ...... D i) true ise. E = true sonra val2 = N
ii) doğruysa E = yanlış sonra val2 = 0
// val3, ABC'nin tüm parantez içindeki örnekleri arasında 'false' veren ifadelerle üretilecek 'true' sayısını içerir ...... D
iii) yanlış.E = doğru ise val3 = (2 ^ (K-2) -N) = M yani. K boyutundaki ifadenin yanlış üretme yollarının sayısı [2 ^ (K-2), K boyutundaki bir ifadeyi parantez içine almanın yol sayısıdır.
iv) false olursa.E = false olursa val3 = 0
Aklımda olan temel fikir budur ama çözümünü kontrol ettiğimde http://people.csail.mit.edu/bdean/6.046/dp/dp_9.swf yaklaşım tamamen farklıydı. Birisi bana neyi yanlış yaptığımı ve DP'yi çözmede nasıl daha iyi olabileceğimi söyleyebilir, böylece kendimde verilen gibi çözümler bulabilirim.
Şimdiden teşekkürler.
true and (false xor true) = (true and false) xor true
(her ikisini de azaltarak kolayca görülebilirfalse xor true
).