कार्य कोड लिखना है जो बिट्स के लिए छोटे तार्किक सूत्र पा सकते हैं।
यदि आपके पास बाइनरी 0/1 चर का योग कुछ मान x के बराबर है, यह जांचने के लिए आपके कोड को सबसे छोटा संभव प्रस्ताव तार्किक सूत्र खोजने के लिए समग्र चुनौती है। हमें चर एक्स 1, एक्स 2, एक्स 3, एक्स 4 आदि कहते हैं। आपकी अभिव्यक्ति राशि के बराबर होनी चाहिए। यही है, तार्किक सूत्र सच होना चाहिए अगर और केवल अगर राशि बराबर x।
इसे शुरू करने के लिए एक भोली तरीका है। Y = 15 और x = 5 कहें। 5 चर चुनने के लिए सभी 3003 अलग-अलग तरीके चुनें और प्रत्येक के लिए उन चर के AND के साथ एक नया खंड बनाएं और शेष चर का निषेध। आप 4503 की कुल लागत के लिए 3003 खंडों में से प्रत्येक की लंबाई 15 के साथ समाप्त करते हैं।
आपका उत्तर उस प्रकार की एक तार्किक अभिव्यक्ति होनी चाहिए, जिसे सिर्फ अजगर में चिपकाया जा सकता है, कहते हैं, इसलिए मैं इसका परीक्षण कर सकता हूं। यदि दो लोगों को समान आकार की अभिव्यक्ति मिलती है, तो कोड जो सबसे तेज़ जीतता है।
आपको अपने समाधान में नए चर पेश करने की अनुमति है। तो इस मामले में आपके तार्किक सूत्र में y बाइनरी चर, x और कुछ नए चर शामिल हैं। संपूर्ण सूत्र संतोषजनक होगा यदि और केवल तभी यदि y चर का योग x के बराबर है।
एक प्रारंभिक अभ्यास के रूप में कुछ लोग x = 2 में y = 5 चर जोड़कर शुरू करना चाहते हैं। भोली विधि तब 50 की लागत देगी।
कोड को दो मान y और x को इनपुट के रूप में लेना चाहिए और आउटपुट के रूप में सूत्र और उसके आकार को आउटपुट करना चाहिए। एक समाधान की लागत इसके उत्पादन में चर की कच्ची गिनती है। तो (a or b) and (!a or c)
4 के रूप में मायने रखता है। केवल अनुमति ऑपरेटरों रहे हैं and
, or
और not
।
अद्यतन यह पता चला है कि इस समस्या को हल करने के लिए एक चतुर विधि है जब x = 1, कम से कम सिद्धांत में।
z[0] = y[0] and y[1]
बताना चाहता हूं, आप इस संकेत को कैसे चाहते हैं?
z[0]
प्रतिनिधित्व करने की इच्छा है, y[0] or y[1]
तो मुझे बस एक खंड प्रस्तुत करना होगा जो दिखता है (y[0] or y[1]) or not z[0]
(या अनुमत 3 संचालकों का उपयोग करके कोई समकक्ष कथन)।