2011-03-15 16 views
11

कोई भी बूलियन अभिव्यक्ति को सरल बनाने के लिए एल्गोरिदम के बारे में जानता है?बूलियन अभिव्यक्ति एल्गोरिदम को सरल बनाएं

मुझे बूलियन बीजगणित और कर्णॉट मानचित्र याद है, लेकिन यह डिजिटल हार्डवेयर के लिए है जहां हर कोई बूलियन है। मुझे ऐसा कुछ चाहिए जो ध्यान में रखता है कि कुछ उप-अभिव्यक्ति बुलियन नहीं हैं।

a == 1 && a == 3 

इस एक शुद्ध बूलियन अभिव्यक्ति करने के लिए अनुवाद किया जा सकता:

उदाहरण के लिए

a1 && a3 

लेकिन इस अभिव्यक्ति, अलघुकरणीय है, जबकि arithmetics के ज्ञान का एक छोटा सा के साथ everibody निर्धारित कर सकते हैं है कि अभिव्यक्ति सिर्फ है:

false 

कुछ शरीर जानता है ओमे लिंक?

http://hopper.unco.edu/KARNAUGH/Algorithm.html

बेशक

, कि गैर बूलियन subexpressions के साथ सौदा नहीं करता है:

+5

क्या होगा यदि 'ए' को भाषाओं/रनटाइम में अस्थिर चर/फ़ील्ड के रूप में घोषित किया गया है जो उनको अनुमति देता है, और मान किसी अन्य धागे पर 1 और 3 के बीच उतार-चढ़ाव करता है? मैं यह नहीं कह रहा हूं कि यह एक अच्छा डिजाइन है, लेकिन सॉफ्टवेयर में, "हमेशा" और "कभी नहीं" आमतौर पर सापेक्ष शब्द होते हैं। –

+0

यह कोई समस्या नहीं है, वास्तविक उपयोग LINQ प्रदाता के लिए है और वास्तविक मान वे हैं जब क्वेरी का अनुवाद किया जाता है। यदि वे क्वेरी फिर से निष्पादित की जाती हैं तो सरलीकरण अपडेट किए गए मानों के साथ फिर से चलाया जाएगा। – Olmo

+5

सामान्य रूप से यह संभव नहीं है। उदाहरण के लिए 'ए> 0 और बी> 0 और एन> 2 और एक^एन + बी^एन = सी^एन' हमेशा झूठा है लेकिन साबित करना इतना आसान नहीं है। इसका मतलब है कि आप विज्ञापन-प्रसार सरलीकरण के साथ फंस गए हैं और आपके प्रश्न का कोई साफ जवाब नहीं है (क्योंकि यह उन अभिव्यक्तियों की प्रकृति पर निर्भर करेगा जिन्हें आप देख सकते हैं)। –

उत्तर

2

सबसे पहले गूगल का उपयोग कर गोली मार दी इस पत्र मिल गया। लेकिन यह सामान्य भाग अपने सामान्य रूप में वास्तव में कठिन है, क्योंकि निश्चित रूप से कोई एल्गोरिदम नहीं है कि यह जांचने के लिए कि क्या मनमानी अंकगणितीय अभिव्यक्ति सत्य है, झूठी या जो भी हो। आप जो पूछ रहे हैं compiler optimization के क्षेत्र में गहराई से जाता है।

+0

मैं पहले पेपर पढ़ रहा था, लेकिन मुझे यह भी बहुत कम किया गया और कोई कोड प्रदान नहीं किया गया। – Olmo

8

आपको K-maps और Quine–McCluskey algorithm में रुचि हो सकती है।

मुझे लगता है कि SymPy बुलियन अभिव्यक्ति को हल करने और सरल बनाने में सक्षम है, स्रोत को देखकर उपयोगी हो सकता है।

2

क्या संभावित विशिष्ट मूल्यों की संख्या सीमित और ज्ञात है? यदि ऐसा है तो आप प्रत्येक अभिव्यक्ति को बुलियन अभिव्यक्ति में परिवर्तित कर सकते हैं। उदाहरण के लिए यदि आपके पास 3 अलग-अलग मान हैं तो आपके पास a1, a2, और a3 जहां a1 सही होने का अर्थ है a == 1, आदि। एक बार ऐसा करने के बाद आप क्विन-मैकक्लूसकी एल्गोरिदम पर भरोसा कर सकते हैं (जो शायद बड़े उदाहरणों के लिए बेहतर है कर्णघ मैप्स से)। Quine-McCluskey के लिए यहां कुछ Java code है।

मैं इस बात से बात नहीं कर सकता कि यह डिज़ाइन वास्तव में चीजों को सरल बनायेगा या उन्हें अधिक जटिल बना देगा, लेकिन आप इसे कम से कम विचार करना चाहेंगे।

+0

बिल्कुल !, मेरा यही मतलब है लेकिन इस तरह एल्गोरिदम को यह नहीं पता होगा कि, मेरे उदाहरण में, ए 1 और ए 3 वास्तव में झूठा है। चूंकि एक ही समय में 1 और 3 नहीं हो सकता है। मुझे लगता है कि मुझे वैरिएबल के मूल्यों को बांधना और कर्णॉट मिनरम्स में विरोधाभासों को ढूंढना है। – Olmo

4

आपका विशेष उदाहरण SMT solver द्वारा हल किया जाएगा। (यह निर्धारित करेगा कि चर की कोई सेटिंग अभिव्यक्ति को सच नहीं कर सकती है, इसलिए यह हमेशा गलत होता है। ऐसे सामान्य हलकों के लिए अधिक सामान्य सरलीकरण गुंजाइश से बाहर है।) यह दिखा रहा है कि एक अभिव्यक्ति true या false के बराबर है एनपी- सौदा में अंकगणित किए बिना भी मुश्किल है, इसलिए यह बहुत अच्छा है कि इसके लिए भी व्यावहारिक सॉफ्टवेयर है। इस बात पर निर्भर करता है कि अंकगणित ज्ञान कितना गुंजाइश है, समस्या may be undecidable

4

इस समस्या के दो भाग हैं, तार्किक सरलीकरण और प्रतिनिधित्व सरलीकरण।

तार्किक सरलीकरण के लिए, क्विन-मैकक्लूसकी।प्रतिनिधित्व के सरलीकरण के लिए, वितरण पहचान (1 | 0 & 2) == 0 & (1 | 2) का उपयोग करके शब्दों को दोबारा निकालें।

मैंने here प्रक्रिया का विस्तार किया। यह केवल & और | का उपयोग करके स्पष्टीकरण देता है, लेकिन इसे सभी बूलियन ऑपरेटरों को शामिल करने के लिए संशोधित किया जा सकता है।

0

यह कठिन आदमी है। मैंने पाया कि सबसे सरल तरीके से एल्गोरिदम प्रत्येक संयोजन संयोजन के साथ प्रत्येक आउटपुट संयोजन से मेल खाता था। लेकिन यह मूल एल्गोरिदम है, हर अभिव्यक्ति को हल नहीं किया।

यदि सब निर्गम (Q1, Q2, Q3, Q4) के साथ यानी इनपुट एक संयोजन के लिए तो सरलीकरण का परिणाम ए हो जाएगा

यदि नहीं ही है, तो आप एक और variabel/इनपुट निर्भरता की कोशिश करेंगे।

संबंधित मुद्दे