2009-08-30 9 views
22

रुबिक के घन को हल करने के लिए जावा में कोड के लिए अपेक्षाकृत आसान एल्गोरिदम क्या होगा। दक्षता भी महत्वपूर्ण है लेकिन एक माध्यमिक विचार है।रुबिक के घन के लिए एल्गोरिदम कोड कोड करना सबसे आसान है?

+0

प्रश्न खराब तरीके से phrased है और सवाल "सही" वोट दिया गया है, वास्तव में, सही जवाब नहीं है। इससे पता चलता है कि "कोड के लिए सबसे आसान एल्गोरिदम" आप जो चाहते हैं वह नहीं हो सकता है --- प्रोग्राम कभी खत्म नहीं हो सकता है। और यह दिखाता है कि आपको दक्षता से चिंतित होने की आवश्यकता क्यों है। – vy32

+0

मुझे लूट लिया गया * क्रिज़ *: पी – Rushyo

+0

आप बस इतना ही कह सकते हैं, 'कोड के लिए सबसे आसान एल्गोरिदम क्या है जो हमारे जीवनकाल में परिणाम देता है' :-) –

उत्तर

12

सरल गैर तुच्छ एल्गोरिथ्म मैंने पाया यह एक है है:

http://www.chessandpoker.com/rubiks-cube-solution.html

यह कोड करने के लिए बहुत मुश्किल नहीं लग रहा है। Yannick M.'s answer में उल्लिखित लिंक भी अच्छा दिखता है, लेकिन 'the cross' का समाधान ऐसा लगता है कि यह मेरे लिए थोड़ा और जटिल हो सकता है।

कई खुले स्रोत सॉल्वर कार्यान्वयन हैं जिन्हें आप देखना चाहते हैं। यहां एक Python implementation है। यह Java applet में एक सॉल्वर भी शामिल है, और स्रोत कोड उपलब्ध है। डाउनलोड करने योग्य स्रोत कोड के साथ भी Javascript solver भी है।

Anthony Gatlin's answer इस कार्य के लिए प्रोलॉग की अच्छी-अनुकूलता के बारे में एक उत्कृष्ट बिंदु बनाता है। अपने Prolog solver को लिखने के तरीके के बारे में एक विस्तृत लेख यहां दिया गया है। यह उपयोग की जाने वाली हेरिस्टिक विशेष रूप से दिलचस्प है।

+2

जेएस सॉल्वर से लिंक टूटा हुआ प्रतीत होता है। –

49

जब तक आपको सही समाधान न मिल जाए तब तक यादृच्छिक संचालन करें। सबसे आसान एल्गोरिदम और कम से कम कुशल।

+38

हाहाहा 4.33 * 10^1 9 क्रमशः बहुत कम कुशलता से कुशल है :-) –

+5

गणित करने के लिए +1;) – Rushyo

+1

@ Rushyo lol अच्छी तरह से खेला सर @Yannick क्या आप समझा सकते हैं कि आपने क्रमपरिवर्तन की गणना कैसे की? – kokokok

3

मुझे लगता है कि आपका प्रश्न जावा से संबंधित है, लेकिन व्यावहारिक नोट पर, प्रोलॉग जैसी भाषाएं रूबिक के घन को हल करने जैसी बेहतर उपयुक्त समस्याएं हैं। मुझे लगता है कि यह शायद एक वर्ग के लिए है और आपके पास उपकरण की पसंद के रूप में कोई छूट नहीं हो सकती है।

+0

यह सही है, दुर्भाग्य से कक्षा के लिए मुझे जावा – kokokok

+0

+1 में प्रोलॉग की याद दिलाने के लिए इसे करना है। ;) –

+1

एमएमएमएम, प्रोलॉग के लिए उपयोग। – Rushyo

0

आप इसे बीएफएस (ब्रेड-फर्स्ट-सर्च) करके कर सकते हैं। मुझे लगता है कि कार्यान्वयन इतना कठिन नहीं है (यह ग्राफ की श्रेणी के तहत सबसे सरल एल्गोरिदम में से एक है)। कतार नामक डेटा संरचना के साथ ऐसा करके, आप वास्तव में क्या काम करेंगे, एक बीएफएस पेड़ बनाने और इच्छा की स्थिति से दी गई स्थिति से तथाकथित सबसे छोटा रास्ता खोजने के लिए है। इस एल्गोरिदम की कमी यह है कि यह पर्याप्त कुशल नहीं है (बिना किसी संशोधन के, 2x2x2 क्यूबिक को हल करने के लिए भी आवश्यक समय ~ 5 मिनट है)। लेकिन आप गति को बढ़ावा देने के लिए हमेशा कुछ चालें पा सकते हैं।

ईमानदार होने के लिए, यह एमआईटी से "Introduction of Algorithm" नामक पाठ्यक्रम के होमवर्क में से एक है। होमवर्क का लिंक यहां दिया गया है: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/assignments/MIT6_006F11_ps6.pdf। उनके पास कुछ पुस्तकालय हैं जो आपको कल्पना करने में मदद करते हैं और अनावश्यक प्रयास से बचने में आपकी सहायता करते हैं।

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