वूलसैट और जीसैट बूलियन संतोषजनकता समस्या को हल करने के लिए प्रसिद्ध और सरल स्थानीय खोज एल्गोरिदम हैं। GSAT एल्गोरिथ्म के लिए छद्मकोड को GSAT एल्गोरिथ्म को लागू करने वाले प्रश्न से कॉपी किया जाता है - फ्लिप करने के लिए किस शाब्दिक का चयन करें? और नीचे प्रस्तुत किया गया है।
procedure GSAT(A,Max_Tries,Max_Flips)
A: is a CNF formula
for i:=1 to Max_Tries do
S <- instantiation of variables
for j:=1 to Max_Iter do
if A satisfiable by S then
return S
endif
V <- the variable whose flip yield the most important raise in the number of satisfied clauses;
S <- S with V flipped;
endfor
endfor
return the best instantiation found
end GSAT
यहां हम उस वेरिएबल को फ्लिप करते हैं जो संतुष्ट क्लॉज़ की संख्या को अधिकतम करता है। यह कुशलता से कैसे किया जाता है? भोली विधि प्रत्येक चर को फ्लिप करने के लिए है, और प्रत्येक चरण के लिए सभी खंडों के माध्यम से और गणना करें कि उनमें से कितने संतुष्ट हैं। भले ही कोई क्लॉज निरंतर समय में संतोषजनकता के लिए क्वियर किया जा सकता है, भोली विधि अभी भी समय में चलेगी , जहां वी चर की संख्या और सी क्लॉस की संख्या है। मुझे यकीन है कि हम बेहतर कर सकते हैं, इसलिए सवाल:
कई स्थानीय खोज एल्गोरिदम चर के असाइनमेंट को फ्लिप करते हैं जो संतुष्ट क्लॉज़ की संख्या को अधिकतम करता है। व्यवहार में, इस ऑपरेशन को किस डेटा संरचनाओं के साथ कुशलतापूर्वक समर्थित किया गया है?
यह कुछ ऐसा है जो मुझे लगता है कि पाठ्यपुस्तकों में अक्सर चूक होती है। एक उदाहरण प्रसिद्ध रसेल और नॉरविग पुस्तक का भी है ।