मुझे एक पुराने, बिना रखरखाव वाले वेब पेज पर एल्गोरिथम एक्स का एक अजगर कार्यान्वयन मिला। यह खूबसूरती से काम करता है। कोड बहुत संक्षिप्त और टिप्पणियों के बिना है। एक टुकड़ा है जिसे मैं समझ नहीं पा रहा हूं। मुझे पता है कि यह काम करता है, लेकिन मुझे नहीं पता कि कैसे या क्यों। उम्मीद है कि पाइथन प्रोग्रामर खुद से ज्यादा उन्नत मदद कर सकते हैं।
नीचे दिए गए कोड में "सेलेक्ट" कहा जा रहा है, लेकिन रिटर्न वैल्यू का क्या हो रहा है। इसके अलावा, X (यानी X.pop(j)) के भीतर मानों को "चयन करें" बदल रहा है? क्या "चयन" को X की एक प्रति पारित नहीं किया जा रहा है?
यह कोड:
X, Y = exact_cover(X, Y)
for i, row in enumerate(grid):
for j, n in enumerate(row):
if n:
select(X, Y, (i, j, n))
for solution in solve(X, Y, []):
for (r, c, n) in solution:
grid[r][c] = n
yield grid
इस फ़ंक्शन को कॉल करें:
def select(X, Y, r):
cols = []
for j in Y[r]:
for i in X[j]:
for k in Y[i]:
if k != j:
X[k].remove(i)
cols.append(X.pop(j))
return cols
स्रोत: https://www.cs.mcgill.ca/~aassaf9/ अजगर/एल्गोरिदम_x.html
लेखक: अली असफ़
1 उत्तर
परिवर्तनीय डेटा प्रकारों को संदर्भ के रूप में कॉपी नहीं किया जाता है। और हाँ X.pop() मूल X को बदल देगा।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।