algorithm - N-Queens ProbIem..How far can we go? -


एन-क्वीन्स समस्या:

यह समस्या बताती है कि आकार एन द्वारा शतरंज बोर्ड एन

मेरा सवाल है:
एन के अधिकतम मूल्य क्या है जिसके लिए एक प्रोग्राम उचित मात्रा में जवाब की गणना कर सकते हैं? या अब तक का सबसे बड़ा एन क्या है?

यहां CLPFD (Prolog) में मेरा कार्यक्रम है:

  उत्पन्न ([], _) । उत्पन्न ([एच | टी], एन): - 1. एच में एच, उत्पन्न (टी, एन)। Lenlist (एल, एन): - लेनसूची (एल, 0, एन) lenlist ([], एन, एन)। Lenlist ([_ | T], पी, एन): - पी 1 पी पी 1 है, लिनलिस्ट (टी, पी 1, एन)। क्वीन (एन, एल): - उत्पन्न (एल, एन), लिनलिस्ट (एल, एन), सुरक्षित (एल),!, लेबलिंग ([एफएफसी], एल) नॉटैक (एक्स, एक्स): - नॉटैक (एक्स, एक्सएस, 1)। notattack (एक्स, [], एन)। नॉटैक (एक्स, [वाई | वाईएस], एन): - एक्स # \ = वाई, एक्स # \ = वाई - एन, एक्स # \ = वाई + एन, एन 1 एन + 1, नोटैटैक (एक्स, वाईएस, एन 1) । सुरक्षित ([])। सुरक्षित ([एफ | टी]): - नोटैट (एफ, टी), सुरक्षित (टी)।  

यह प्रोग्राम केवल ठीक काम करता है, लेकिन जो समय लगता है वह एन के साथ बढ़ता रहता है। यहाँ एक नमूना निष्पादन है:

 ? - queens (4 , एल)। एल = [2, 4, 1, 3]; एल = [3, 1, 4, 2]; नहीं  

इसका मतलब है कि आप पंक्ति 2 में कॉलम 1 में पंक्ति 4, कॉलम 2 में पंक्ति 4, पंक्ति 1 में 3 और 4 में पंक्ति 3 रखें। (4 में 4 शतरंज बोर्ड में)

अब देखते हैं कि यह कार्यक्रम कैसे करता है (पहले क्रमचय की गणना में लिया गया समय):
एन = 4,5 के लिए ..... 10 दूसरे के भीतर गणना करता है - N = 11 -30 -1-3 सेकंड के बीच ले जाता है - एन के लिए = 40..50 फिर भी एक मिनट के भीतर गणना की जाती है - एन = 60 पर यह वैश्विक स्टैक से बाहर हो जाता है (खोज स्थान विशाल है)।

यह एक होमवर्क समस्या थी जो पिछले महीने की वजह से थी इसलिए मुझे इसके बारे में अभी चर्चा करने का अधिकार लगता है। (मूल समस्या सिर्फ एन-क्वीन्स कोड थी)

मुझे अन्य भाषाओं में वैकल्पिक कार्यान्वयन देखने में भी दिलचस्पी है (जो कि मेरे कार्यान्वयन से बेहतर प्रदर्शन करती है) ) या अगर मेरे एल्गोरिथ्म / प्रोग्राम

में सुधार के लिए कमरा है रैममंड हेटिंगर द्वारा पाइकाइन:

/ code> # / / itr / bin / env python से itertools import permutations n = 12 cols = श्रेणी (एन) क्रमिक में vec के लिए (cols): if (n = = लेन (सेट (vec [i] + i को कोल्स में)) == लेन (सेट (vec [i] - i को कोल्स में)): प्रिंट vec

सभी क्रमपरिवर्तनों की गणना स्केल योग्य नहीं है, हालांकि ( O (n!) )


Comments

Popular posts from this blog

c# - How to capture HTTP packet with SharpPcap -

jquery - SimpleModal Confirm fails to submit form -

php - Multiple Select with Explode: only returns the word "Array" -