चर को प्रतिस्थापित करके अद्वितीय आउटपुट की संख्या


9

इस तरह के फार्मूले के एक सेट को देखते हुए:

bacb
bcab
cbba
abbc

एक एल्गोरिथ्म दें जो आपको प्रत्येक चर में "0" या "1" दोनों के लिए प्रतिस्थापित किए जाने पर प्राप्त होने वाले अद्वितीय परिणामों की संख्या का पता लगाता है।

रहे हैं (k!)^2सूत्र, के साथ प्रत्येक 2k-1चर और k^2शर्तों। के संदर्भ में अपने स्पर्शोन्मुख दवाओं को व्यक्त करें k

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


निम्नलिखित परिणामों के ऊपर उदाहरण के लिए चर को प्रतिस्थापित करके प्राप्त किया जा सकता है:

1110, 0110, 1001, 0100, 1000, 0000, 0010, 1101, 1111, 0001, 1011, 0111

तो सही उत्तर है 12. अन्य लोगों के बीच, 1010उपरोक्त सूत्रों का उपयोग करके नहीं बनाया जा सकता है।

मैंने 230 , 12076 और 1446672 के संबंधित समाधानों के साथ तीन और परीक्षण मामले बनाए हैं


स्पष्टीकरण: प्रश्न में k क्या है? क्या यह केवल कुछ सार है?
इसहाक

@ आइसाकग हां। यह उन समाधानों के बीच संबंधों को रोकना है जो कम लेकिन बड़े सूत्रों के लिए तेज़ हैं, उदाहरण के लिए।
orlp

तो प्रत्येक अक्षर a, b... एक चर है ? और हमारे पास हमेशा केवल असमान संख्याएँ होती हैं? क्या इससे कोई फर्क नहीं पड़ता कि चर का क्रम कितना लंबा है, और आपको कितने सूत्र दिए गए हैं?
दोष

@flawr चर की संख्या, शब्दों की संख्या और सूत्रों की संख्या के बीच सटीक संबंध प्रश्न में दिया गया है।
orlp

क्या 'हो सकता है' का मतलब है कि आप प्राप्त कर सकते हैं अप करने के लिए 2 $ $ (k!) ^ सूत्रों या देखते हैं वास्तव में ^ 2 $ सूत्रों $ (! ट)? इसके अलावा, क्या आपके पास उन विशिष्टताओं के साथ एल्गोरिथ्म के लिए कोई आवेदन है? मैं सिर्फ इसलिए पूछ रहा हूं क्योंकि चश्मा काफी मनमाना लग रहा है।
दोष

जवाबों:


2

गणितज्ञ, ओ (k ^ 2 (k!) ^ 2) समय

Length[Union@@(Fold[Flatten[{StringReplace[#,#2->"0"],StringReplace[#,#2->"1"]}]&,#,Union[Characters[#]]]&/@#)]&

उम्मीद है कि मैंने समय की जटिलता की सही गणना की। इनपुट एक सूत्र की सूची है जैसे कि {"bacb","bcab","cbba","abbc"}। मेरी मशीन पर प्रत्येक परीक्षण मामले के लिए 30 सेकंड से कम समय में चलता है, लेकिन कौन निरपेक्ष समय की परवाह करता है?

स्पष्टीकरण:

  • पहले बंद, &अंत में यह एक शुद्ध कार्य करता है, #पहले तर्क का जिक्र करने के साथ , #2दूसरा तर्क, आदि।
  • Length[*..*] इसके अंदर निहित सूची की लंबाई लेता है।
  • Union@@(*..*)सम्‍मिलित सूची लेता है और इसके लिए तर्कों के रूप में आपूर्ति करता है Union, जो इसके किसी भी तर्क में अद्वितीय तत्‍वों की सूची देता है।
  • *..*&/@#एक शुद्ध कार्य करता है और सूत्रों की सूची में इसे मैप करता है, ताकि यह {a,b,c}बन जाए {f[a],f[b],f[c]}। ध्यान दें कि नेस्टेड शुद्ध कार्यों में, #nइसके अंतरतम तर्कों को संदर्भित करता है।
  • Fold[*..*&,#,*..*]एक संचायक फ़ंक्शन, मूल्य, और सूची, और रिटर्न लेता है f[f[...[f[starting value,l_1],l_2],...],l_n]
  • Union[Characters[#]] सभी वर्णों को वर्तमान सूत्र में ले जाता है और सभी अद्वितीय तत्व प्राप्त करता है, जो हमें चर देता है।
  • Flatten[*..*]अपने तर्क को समतल करता है, इसलिए वह {{{a},b},{{c,{d}}}}बन जाता है {a,b,c,d}
  • {*..*,*..*}उपरोक्त तरीके से दो परिणामों को संयोजित करने का एक तरीका है Flatten
  • StringReplace[#,#2->"0/1"]पिछले परिणाम और रिटर्न यह वर्तमान चर या तो साथ प्रतिस्थापित साथ ले जाता है 0या 1

आप kअपने समय में चर के रूप में क्यों उपयोग कर रहे हैं ? फिर भी, तथ्यात्मक समय! ओह!
theonlygusti

सेशन ने कहा: "के रूप में अपने स्पर्शोन्मुख दवाओं को व्यक्त करें k।" इसके अलावा, मुझे GeneralUtilities`Benchmarkइस्तेमाल की जाने वाली प्रत्येक विधि के लिए करना था ।
लेजियन मम्मल 978

अपने एल्गोरिथ्म का एक सादा अंग्रेजी विवरण जोड़ने के लिए देखभाल? मैं गणितज्ञ से अपरिचित हूं, इसलिए मैं आपके समाधान को सत्यापित नहीं कर सकता।
orlp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.