चौड़ाई-प्रथम खोज में विज़िट किए गए राज्यों पर नज़र रखना


10

इसलिए मैं बीएफएस को एक स्लाइडिंग ब्लॉक्स पहेली (संख्या प्रकार) पर लागू करने की कोशिश कर रहा था । अब मैंने देखा कि मुख्य बात यह है कि यदि आपके पास एक 4*4बोर्ड है तो राज्यों की संख्या बड़ी हो सकती है, 16!इसलिए मैं पहले से सभी राज्यों की गणना नहीं कर सकता।

तो मेरा सवाल यह है कि मैं पहले से ही देखे गए राज्यों पर नज़र कैसे रखूं? (मैं एक क्लास बोर्ड का उपयोग कर रहा हूं प्रत्येक कक्षा के उदाहरण में एक अद्वितीय बोर्ड पैटर्न होता है और इसे वर्तमान चरण से सभी संभव चरणों की गणना करके बनाया जाता है)।

मैंने नेट पर खोज की और जाहिरा तौर पर वे पिछले पूरा किए गए पिछले कदम पर वापस नहीं जाते हैं, लेकिन हम पिछले चरण में किसी अन्य मार्ग से भी वापस जा सकते हैं और फिर उन सभी चरणों को फिर से गणना कर सकते हैं जो पहले देखे जा चुके हैं। तो जब सभी राज्यों को पहले से ही नियुक्त नहीं किया गया है, तो विज़िट किए गए राज्यों का ट्रैक कैसे रखा जाए? (पहले से मौजूद राज्यों की तुलना वर्तमान कदम से करना महंगा होगा)।


1
साइड नोट: मैं इस प्रश्न को पोस्ट करने के लिए अधिक उपयुक्त स्टैक के बारे में नहीं सोच सकता था। मुझे पता है कि इस स्टैक में आमतौर पर कार्यान्वयन विवरण का स्वागत नहीं किया जाता है।
दत्ता

2
imo यह एसई: एआई के लिए एक बड़ा सवाल है क्योंकि यह केवल कार्यान्वयन के बारे में नहीं है, बल्कि अवधारणा ही है। उल्लेख नहीं करने के लिए, प्रश्न ने 4 घंटों में 4 कानूनी उत्तरों को आकर्षित किया। (खोज के लिए शीर्षक संपादन, और एक BFS टैग बनाने की स्वतंत्रता लिया)
DukeZhou

जवाबों:


8

आप उन setराज्यों को संग्रहीत करने के लिए एक (शब्द के गणितीय अर्थ में, अर्थात एक संग्रह जिसमें डुप्लिकेट शामिल नहीं कर सकते हैं) का उपयोग कर सकते हैं जो आपने पहले ही देखा है। इस पर आपको जो संचालन करने की आवश्यकता होगी, वे हैं:

  • तत्वों को सम्मिलित करना
  • तत्वों में पहले से ही अगर परीक्षण कर रहे हैं

बहुत अधिक हर प्रोग्रामिंग भाषा में पहले से ही एक डेटा संरचना का समर्थन होना चाहिए जो इन दोनों कार्यों को निरंतर रूप से कर सकता है (O(1)) समय। उदाहरण के लिए:

  • set अजगर में
  • HashSet जावा में

पहली नज़र में, यह आपको उन सभी राज्यों को जोड़ने जैसा प्रतीत हो सकता है जिन्हें आप कभी सेट पर देखते हैं जैसे कि यह महंगा मेमोरी-वार होगा, लेकिन यह आपके मेमोरी के लिए पहले से ही आवश्यक मेमोरी की तुलना में बहुत बुरा नहीं है; अगर आपकी ब्रांचिंग फैक्टर हैb, आपके सीमांत से विकास होगा b1 प्रति नोड तत्व जो आप जाते हैं (निकालें) 1 सीमांत से "इसे" पर जाएं, जोड़ें b नए उत्तराधिकारी / बच्चे), जबकि आपका सेट केवल बढ़ेगा 1 अतिरिक्त नोड प्रति विज़िट नोड।

स्यूडोकोड में, इस तरह के एक सेट (आइए इसे नाम दें closed_set, विकिपीडिया पर छद्मकोड के अनुरूप होने के लिए चौड़ाई-प्रथम खोज में उपयोग किया जा सकता है:

frontier = First-In-First-Out Queue
frontier.add(initial_state)

closed_set = set()

while frontier not empty:
    current = frontier.remove_next()

    if current == goal_state:
        return something

    for each child in current.generate_children()
        if child not in closed_set:    // This operation should be supported in O(1) time regardless of closed_set's current size
            frontier.add(child)

    closed_set.add(current)    // this should also run in O(1) time

(इस छद्मकोश के कुछ रूपांतर भी काम कर सकते हैं, और स्थिति के आधार पर कम या ज्यादा कुशल हो सकते हैं; उदाहरण के लिए, आप closed_setउन सभी नोडों को भी ले सकते हैं जिनमें आपने पहले से ही बच्चों को जोड़ा है, और फिर पूरी तरह से generate_children()कॉल से बचें यदि currentपहले से है closed_set।)


ऊपर वर्णित मैंने इस समस्या को संभालने के लिए मानक तरीका होगा। वास्तव में, मुझे संदेह है कि एक अलग "समाधान" हमेशा उत्तराधिकारी राज्यों की एक नई सूची के क्रम को सीमांत में जोड़ने से पहले यादृच्छिक कर सकता है। इस तरह, आप कभी-कभी राज्यों को जोड़ने की समस्या से नहीं बचते हैं जो आप पहले से ही सीमा तक विस्तारित हो चुके हैं, लेकिन मुझे लगता है कि इसे अनंत चक्रों में फंसने के जोखिम को काफी कम करना चाहिए।

सावधान रहें : मुझे इस समाधान के किसी भी औपचारिक विश्लेषण के बारे में नहीं पता है जो यह साबित करता है कि यह हमेशा अनंत चक्रों से बचता है। यदि मैं अपने सिर के माध्यम से इसे "चलाने" की कोशिश करता हूं, तो सहज रूप से, मुझे संदेह है कि इसे काम करना चाहिए, और इसके लिए किसी अतिरिक्त मेमोरी की आवश्यकता नहीं है। ऐसे किनारे मामले हो सकते हैं जो मैं अभी नहीं सोच रहा हूं, लेकिन यह भी बस काम नहीं कर सकता है, ऊपर वर्णित मानक समाधान एक सुरक्षित शर्त (अधिक मेमोरी की कीमत पर) होगा।


1
मैं ऐसा करने में सक्षम हो
जाऊंगा

3
@ दत्ता नहीं तुलनात्मक समय में तेजी से वृद्धि नहीं होनी चाहिए। ये सेट, हैश सेट, या जो कुछ भी होता है उन्हें आपकी पसंद की भाषा में कहा जाता है, यह परीक्षण करने में सक्षम होना चाहिए कि क्या वे किसी भी राज्य में हैं या नहींS निरंतर कम्प्यूटेशनल जटिलता के साथ O(1), कितने तत्वों वे पहले से ही शामिल की परवाह किए बिना । वे सूची में नहीं हैं, अगर वे पहले से ही शामिल हैं तो वे परीक्षण नहीं करते हैंSवर्तमान में निहित हर तत्व से तुलना करके।
डेनिस सॉमेर्स

1
@DuttaA मैंने कुछ pseudocode को यह वर्णन करने के लिए जोड़ा है कि सेट का उपयोग कैसे किया जाएगा, उम्मीद है कि कुछ स्पष्ट हो सकता है। ध्यान दें कि हम कभी भी पूरी तरह से लूप closed_setनहीं करते हैं, इसका आकार कभी भी हमारे (असममित) गणना समय को प्रभावित नहीं करना चाहिए।
डेनिस सॉमेर्स

1
वास्तव में मैं इसे c ++ का उपयोग कर रहा था। मुझे हैशिंग का कोई विचार नहीं है ... लगता है कि मैं अब अजगर का उपयोग करूंगा ... उत्तर के लिए धन्यवाद
DuttaA

3
@DuttaA C ++ में आप शायद एक std
डेनिस Soemers

16

डेनिस सोमरस का उत्तर सही है: आपको BFS खोज खोज में विज़िट किए गए राज्यों का ट्रैक रखने के लिए एक HashSet या इसी तरह की संरचना का उपयोग करना चाहिए।

हालाँकि, यह आपके प्रश्न का पर्याप्त उत्तर नहीं देता है। आप सही हैं, कि सबसे खराब स्थिति में, बीएफएस को आपको 16 स्टोर करने की आवश्यकता होगी! नोड्स। भले ही सेट में प्रविष्टि और चेक समय O (1) होगा, फिर भी आपको एक बेतुकी मात्रा में मेमोरी की आवश्यकता होगी।

इसे ठीक करने के लिए, BFS का उपयोग न करें । यह सभी समस्याओं के लिए सबसे सरल है, क्योंकि इसके लिए समय और स्मृति दोनों की आवश्यकता होती है, जो निकटतम लक्ष्य राज्य की दूरी में घातीय हैं।

एक बहुत अधिक स्मृति-कुशल एल्गोरिथ्म पुनरावृत्तियों को गहरा कर रहा है । इसमें बीएफएस के सभी वांछनीय गुण हैं, लेकिन केवल ओ (एन) मेमोरी का उपयोग करता है, जहां एन निकटतम समाधान तक पहुंचने के लिए चाल की संख्या है। इसमें अभी भी कुछ समय लग सकता है, लेकिन आप CPU से संबंधित सीमाओं से बहुत पहले ही मेमोरी सीमा से टकरा जाएंगे।

बेहतर अभी भी, एक डोमेन विशिष्ट उत्तराधिकार विकसित करें, और ए * खोज का उपयोग करें । इसके लिए आपको केवल बहुत कम संख्या में नोड्स की जांच करनी चाहिए, और खोज को रैखिक समय के बहुत करीब होने की अनुमति दें।


2
हाँ, यह उन लोगों के लिए अधिक व्यावहारिक रूप से उपयोगी उत्तर है जो पहेली को कुशलतापूर्वक हल करना चाहते हैं। मेरा उत्तर उन लोगों के लिए है जो बीएफएस का उपयोग करने पर जोर देते हैं (क्योंकि वे इसे कार्रवाई में देखना चाहते हैं, या इसे कैसे लागू करना सीखें, या जो भी कारण हो)। ध्यान दें कि BFS को स्टोर करने की उम्मीद नहीं होगी16!वैसे भी नोड्स; यह केवल सबसे बुरा मामला है, यह उस समय से पहले एक समाधान खोजने में सक्षम हो सकता है।
डेनिस सॉमेर्स

@DennisSoemers सही है..आप भी सही
हैं..मैं

क्या ऐसे मामले हैं जहां BFS स्वीकार्य स्थानीय समाधान लौटा सकता है? (मैं 81 से अधिक के साथ काम कर रहा हूं! * Tbd- मूल्य और चौड़ाई-पहला ऐसा लगता है कि इसमें ऐसे अवरोधक कारक हैं जो थकावट के बिना छूटना आसान हो सकता है। अभी हम वास्तव में मजबूत खेल के बारे में चिंतित नहीं हैं, बल्कि सम्मानजनक रूप से। अप्रत्याशित gameboard टोपोलोजी की एक सरणी से अधिक कमजोर "सामान्य प्रदर्शन)।
DukeZhou

2
@ ड्यूकज़ो बीएफएस आमतौर पर केवल तभी उपयोग किया जाता है जब एक पूर्ण समाधान मांगा जाता है। इसे जल्दी बंद करने के लिए, आपको एक फ़ंक्शन की आवश्यकता होती है जो विभिन्न आंशिक समाधानों के सापेक्ष गुणवत्ता का अनुमान लगाता है, लेकिन यदि आपके पास ऐसा कोई फ़ंक्शन है, तो आप संभवतः इसके बजाय A * का उपयोग कर सकते हैं!
जॉन डोसेटे

"गेम में चाल की संख्या" कहने के बजाय, मैं "गोल करने के लिए न्यूनतम संख्या में चाल" की सिफारिश करूंगा। मुझे लगता है कि खेल में चालों की संख्या हर चाल के रूप में होती है जो आपको 16 में से एक से ले जाती है! किसी भी अन्य को बताता है, जो पुनरावृत्ति गहन उपयोग की तुलना में बहुत अधिक स्मृति है।
NotThatGuy

7

जबकि दिए गए उत्तर आम तौर पर सच हैं, 15-पहेली में एक बीएफएस न केवल काफी संभव है, यह 2005 में किया गया था! दृष्टिकोण का वर्णन करने वाला कागज यहां पाया जा सकता है:

http://www.aaai.org/Papers/AAAI/2005/AAAI05-219.pdf

कुछ प्रमुख बिंदु:

  • ऐसा करने के लिए, बाहरी मेमोरी की आवश्यकता थी - वह यह है कि बीएफएस ने रैम के बजाय भंडारण के लिए हार्ड ड्राइव का उपयोग किया।
  • वास्तव में केवल 15 / / 2 राज्य हैं, क्योंकि राज्य के स्थान में दो पारस्परिक रूप से अनुपयोगी घटक हैं।
  • यह खिसकती टाइल पहेली में काम करता है क्योंकि राज्य रिक्त स्थान वास्तव में धीरे-धीरे स्तर से बढ़ता है। इसका मतलब यह है कि किसी भी स्तर के लिए आवश्यक कुल मेमोरी राज्य स्थान के पूर्ण आकार से बहुत छोटी है। (यह रूबिक के क्यूब जैसे राज्य स्थान के साथ विरोधाभासी है, जहां राज्य का स्थान बहुत तेज़ी से बढ़ता है।)
  • क्योंकि स्लाइडिंग-टाइल पहेली अप्रत्यक्ष है, आपको केवल वर्तमान या पिछली परत में डुप्लिकेट के बारे में चिंता करना होगा। एक निर्देशित स्थान में आप खोज की किसी भी पिछली परत में डुप्लिकेट उत्पन्न कर सकते हैं जो चीजों को बहुत अधिक जटिल बनाता है।
  • कोरफ द्वारा मूल कार्य (ऊपर लिंक) में वे वास्तव में खोज के परिणाम को संग्रहीत नहीं करते थे - खोज ने गणना की कि प्रत्येक स्तर पर कितने राज्य थे। यदि आप WMBFS ( http://www.cs.du.edu/~sturtevant/papers/bfs_min_write.pdf ) जैसे पहले परिणामों को संग्रहीत करना चाहते हैं
  • राज्यों को पिछली परतों से तुलना करने के लिए तीन प्राथमिक दृष्टिकोण हैं जब राज्यों को डिस्क पर संग्रहीत किया जाता है।
    • पहला छँटाई-आधारित है। यदि आप उत्तराधिकारियों की दो फ़ाइलों को सॉर्ट करते हैं, तो आप डुप्लिकेट खोजने के लिए उन्हें रैखिक क्रम में स्कैन कर सकते हैं।
    • दूसरा हैश-आधारित है। यदि आप फ़ाइलों में समूह उत्तराधिकारियों के लिए एक हैश फ़ंक्शन का उपयोग करते हैं, तो आप उन फ़ाइलों को लोड कर सकते हैं जो डुप्लिकेट की जांच करने के लिए पूर्ण राज्य स्थान से छोटी हैं। (ध्यान दें कि यहाँ दो हैश फ़ंक्शंस हैं - एक फ़ाइल में एक राज्य भेजने के लिए, और एक उस फ़ाइल के भीतर राज्यों को अलग करने के लिए।)
    • तीसरा डुप्लिकेट डिटेक्शन संरचित है। यह हैश-आधारित पहचान का एक रूप है, लेकिन यह इस तरह से किया जाता है कि डुप्लिकेट को तुरंत चेक किया जा सकता है जब वे उत्पन्न होने के बजाय उत्पन्न होते हैं।

यहाँ और भी बहुत कुछ कहा जा सकता है, लेकिन ऊपर काग़ज़ (विवरण) बहुत अधिक विवरण देते हैं।


यह एक महान जवाब है..लेकिन मेरे जैसे
नोज के लिए नहीं:)

कैसे अप्रत्यक्ष रूप से आप अन्य परतों में डुप्लिकेट से बचने में मदद करेंगे? निश्चित रूप से आप एक सर्कल में 3 टाइलों को स्थानांतरित करके एक और परत में नोड पर वापस जाने में सक्षम होंगे। यदि कुछ भी, निर्देशित आपको डुप्लिकेट से बचने में मदद करेगा, क्योंकि यह अधिक प्रतिबंधक है। लिंक्ड पेपर डुप्लिकेट डिटेक्शन के बारे में बात करता है, लेकिन अप्रत्यक्ष या बिल्कुल भी निर्देशित नहीं करता है, और न ही विभिन्न स्तरों पर डुप्लिकेट से बचने का उल्लेख करता है (लेकिन मैं इसे इसके बहुत संक्षिप्त स्कैन में याद कर सकता था)।
NotThatGuy

@NotThatGuy एक अप्रत्यक्ष ग्राफ में एक माता-पिता और एक बच्चा बीएफएस में पाए जाने वाले गहराई में 1 दूरी पर हैं। ऐसा इसलिए है क्योंकि एक बार मिल जाने के बाद, अप्रत्यक्ष बढ़त की गारंटी है कि दूसरा तुरंत बाद में मिल जाएगा। लेकिन, एक निर्देशित ग्राफ में, गहराई 10 पर एक बच्चा 2 की गहराई पर बच्चे पैदा कर सकता है, क्योंकि 2 की गहराई वाले बच्चे को दूसरे राज्य में वापस बढ़त नहीं मिलनी चाहिए (इससे गहराई 10 के बजाय 3 हो जाएगी) ।
नाथन एस।

@NotThatGuy यदि आप एक चक्र बनाते हुए 3 टाइलों को घुमाते हैं, लेकिन एक BFS दोनों दिशाओं में एक साथ खोज करेगा, तो यह वास्तव में आपको बहुत अधिक गहराई तक वापस नहीं ले जाएगा। इस डेमो में फुल 3x2 स्लाइडिंग टाइल दिखाई गई है, और आप साइकिल को ट्रैक करके देख सकते हैं कि वे कैसे होती हैं: चलती IDाईएसएएस
नाथन एस।

1
बेहतरीन सुविधाएं। एसई में आपका स्वागत है: ऐ!
ड्यूकझोउ

3

विडंबना यह है कि "आप जो भी सिस्टम चाहते हैं उसका उपयोग करें।" एक हैशसेट एक अच्छा विचार है। हालांकि, यह पता चला है कि स्मृति उपयोग पर आपकी चिंताएं निराधार हैं। बीएफएस इन प्रकार की समस्याओं में इतना बुरा है, कि यह आपके लिए इस मुद्दे को हल करता है।

विचार करें कि आपके BFS को आपको असंसाधित राज्यों का ढेर रखने की आवश्यकता है। जैसा कि आप पहेली में आगे बढ़ते हैं, आप जिन राज्यों से निपटते हैं, वे अधिक से अधिक भिन्न हो जाते हैं, इसलिए आपको यह देखने की संभावना है कि आपके बीएफएस में से प्रत्येक प्लाई राज्यों की संख्या को लगभग 3 से देखने के लिए गुणा करता है।

इसका मतलब यह है कि, जब आप अपने बीएफएस के अंतिम प्लाई का प्रसंस्करण कर रहे होते हैं, तो आपके पास कम से कम 16! / 3 राज्य स्मृति में होना चाहिए। जो कुछ भी आप यह सुनिश्चित करने के लिए उपयोग करते थे कि स्मृति में फिट होने के लिए पर्याप्त होगा यह सुनिश्चित करने के लिए कि आपकी पहले से देखी गई सूची स्मृति में भी फिट है।

जैसा कि दूसरों ने बताया है, यह उपयोग करने के लिए सबसे अच्छा एल्गोरिथ्म नहीं है। एक एल्गोरिथ्म का उपयोग करें जो समस्या के लिए बेहतर फिट है।


2

15-पहेली समस्या 4x4 बोर्ड पर खेली जाती है। सोर्सकोड में इसे लागू करना चरणबद्ध तरीके से किया जाता है। सबसे पहले, गेम इंजन को खुद ही प्रोग्राम करना पड़ता है। यह एक मानव ऑपरेटर द्वारा खेल खेलने की अनुमति देता है। 15-पज़ल गेम में केवल एक निशुल्क तत्व होता है और इस तत्व पर क्रियाओं को निष्पादित किया जाता है। खेल इंजन चार संभावित आदेशों को स्वीकार करता है: बाएँ, दाएँ, ऊपर और नीचे। अन्य कार्यों की अनुमति नहीं है, और केवल इन निर्देशों के साथ खेल को नियंत्रित करना संभव है।

गेम खेलने के लिए अगली लेयर एक GUI है। यह बहुत महत्वपूर्ण है, क्योंकि यह गेम इंजन का परीक्षण करने और हाथ से खेल को हल करने की कोशिश करने की अनुमति देता है। इसके अलावा, एक जीयूआई महत्वपूर्ण है क्योंकि हमें संभावित उत्तराधिकार का पता लगाने की आवश्यकता है। और अब हम AI के बारे में बात कर सकते हैं। एआई को गेम इंजन (बाएं, दाएं, ऊपर और नीचे) को कमांड भेजना है। एक सॉल्वर के लिए एक भोली दृष्टिकोण एक क्रूर बल खोज एल्गोरिदम होगा, जिसका अर्थ है कि लक्ष्य राज्य तक पहुंचने तक एआई यादृच्छिक कमांड भेज रहा है। एक अधिक उन्नत विचार कुछ प्रकार के पैटर्न डेटाबेस को लागू करना है जो राज्य स्थान को कम करता है। चौड़ाई पहली खोज सीधे एक अनुमान नहीं है, लेकिन यह एक शुरुआत है। यह कालानुक्रमिक तरीके से संभव आंदोलनों के परीक्षण के लिए एक ग्राफ बनाने के बराबर है।

मौजूदा राज्यों की ट्रैकिंग ग्राफ के साथ की जा सकती है। प्रत्येक राज्य एक नोड है, एक आईडी और एक मूल आईडी है। AI ग्राफ़ में नोड्स को जोड़ और हटा सकता है, और योजनाकार लक्ष्य के लिए एक रास्ता खोजने के लिए ग्राफ को हल कर सकता है। प्रोग्रामिंग दृष्टिकोण से 15 पहेली का गेम-इंजन ऑब्जेक्ट है और कई ऑब्जेक्ट्स की सूची एक सरणी सूची है। उन्हें एक ग्राफ क्लास में स्टोर किया जाता है। स्रोत कोड में इसे साकार करना थोड़ा मुश्किल है, आमतौर पर पहला परीक्षण विफल हो जाएगा और परियोजना बहुत सारी त्रुटियों का उत्पादन करेगी। जटिलता का प्रबंधन करने के लिए, इस तरह की परियोजना आमतौर पर एक अकादमिक परियोजना में की जाती है, इसका मतलब है, यह इसके बारे में एक पेपर लिखने के लिए एक विषय है जिसमें 100 पृष्ठ और अधिक हो सकते हैं।


1

खेल के लिए दृष्टिकोण

यह सच है कि बोर्ड के पास है 16!संभव है। यह भी सच है कि एक हैश सेट का उपयोग करना एक ऐसा छात्र है जो पहले साल के एल्गोरिदम पाठ्यक्रमों में सीखता है ताकि ग्राफ को चक्रित करने वाले ग्राफ़ की खोज करते समय अतिरेक और अंतहीन लूपिंग से बचा जा सके।

हालांकि, उन तुच्छ तथ्यों को उचित नहीं है यदि लक्ष्य को सबसे कम कंप्यूटिंग चक्रों में पहेली को पूरा करना है। चौड़ाई पहली खोज एक ऑर्थोगोनल चाल पहेली को पूरा करने का व्यावहारिक तरीका नहीं है। एक ब्रेड की पहली खोज की उच्च लागत केवल तभी आवश्यक होगी जब चालों की संख्या किसी कारण से सर्वोपरि हो।

उप-अनुक्रम वंश

राज्यों का प्रतिनिधित्व करने वाले अधिकांश कोने का दौरा कभी नहीं किया जाएगा, और दौरा किए गए प्रत्येक राज्य में दो और चार आउटगोइंग किनारों के बीच हो सकता है। प्रत्येक ब्लॉक में एक प्रारंभिक स्थिति और एक अंतिम स्थिति होती है और बोर्ड सममित होता है। पसंद की सबसे बड़ी स्वतंत्रता मौजूद है जब खुली जगह चार मध्य स्थितियों में से एक है। कम से कम तब होता है जब खुली जगह चार कोनों में से एक होती है।

एक उचित असमानता (त्रुटि) फ़ंक्शन बस सभी एक्स असमानताओं का योग है और सभी वाई असमानताओं का योग है और एक संख्या है जिसका प्रतिनिधित्व करते हुए आंदोलन की स्वतंत्रता के तीन स्तरों में से कौन सा खुले स्थान (मध्य, किनारे) के परिणामस्वरूप मौजूद है , कोने)।

हालांकि ब्लॉक अस्थायी रूप से अपने गंतव्यों से दूर हट सकते हैं, ताकि एक कदम के अनुक्रम की आवश्यकता को पूरा करने की दिशा में एक रणनीति का समर्थन किया जा सके, शायद ही कभी ऐसा मामला हो, जहां इस तरह की रणनीति आठ चालों से अधिक हो, सृजन, औसतन, 5,184 क्रमपरिवर्तन जिसके लिए अंतिम राज्यों की तुलना की जा सकती है। ऊपर असमानता फ़ंक्शन का उपयोग करना।

यदि रिक्त स्थान और 15 के माध्यम से ब्लॉक 1 की स्थिति को निबल्स की एक सरणी के रूप में एन्कोड किया गया है, तो एल्गोरिथ्म तेज बनाने के लिए केवल जोड़, घटाव और बिट-वार संचालन की आवश्यकता होती है। आठ चाल की क्रूर बल रणनीतियों को दोहराते हुए दोहराया जा सकता है जब तक कि असमानता शून्य पर नहीं आती है।

सारांश

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.