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

नीचे दिए गए कोड में "सेलेक्ट" कहा जा रहा है, लेकिन रिटर्न वैल्यू का क्या हो रहा है। इसके अलावा, 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

लेखक: अली असफ़

0
user1658921 15 अगस्त 2020, 18:19

1 उत्तर

सबसे बढ़िया उत्तर

परिवर्तनीय डेटा प्रकारों को संदर्भ के रूप में कॉपी नहीं किया जाता है। और हाँ X.pop() मूल X को बदल देगा।

1
Liju 15 अगस्त 2020, 18:28