2015-11-10 8 views
6

में शब्दकोश का उपयोग करके ज्ञापन तो मैं पाइथन में सबसे कम आम अनुवर्ती कार्यान्वयन करने की कोशिश कर रहा हूं और मेरे पिछले समाधान के लिए इस विकल्प को आजमा रहा था। मैंने परिणामों को याद करने के लिए 2-डी मैट्रिक्स के बजाय एक शब्दकोश का उपयोग करने का प्रयास किया।पायथन

def lcs(s1, s2): 

    cache = {} 
    if len(s1) == 0 or len(s2) == 0: 
     return 0 
    if (s1, s2) in cache: 
     return cache[s1, s2] 
    else: 
     if s1[-1] == s2[-1]: 
      cache[s1, s2] = 1 + lcs(s1[:-1], s2[:-1]) 
     else: 
      cache[s1, s2] = max(lcs(s1[:-1], s2), lcs(s1, s2[:-1])) 
    print cache 

यह

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType' 

लौटा रहा है जो मैं समझता हूँ क्योंकि मैं कुछ तो कैसे मैं इस तरह कुछ कर सकते हैं वापस नहीं कर रहा हूँ।

return cache[s1, s2] = 1 + lcs(s1[:-1], s2[:-1]) 

और मैं इसे किसी भी सजावट के बिना लागू करने की कोशिश कर रहा हूं।

+1

'cache' समारोह है कि आप memoize को –

+0

@JohnColeman उनका कहना है कि बाहर के लिए धन्यवाद कोशिश कर रहे हैं करने के लिए स्थानीय नहीं किया जा सकता की कोशिश करो। – Angersmash

उत्तर

2

इस

cache = {} 
def lcs(s1, s2): 
    global cache 
    if len(s1) == 0 or len(s2) == 0: 
     return 0 
    if (s1, s2) in cache: 
     return cache[(s1, s2)] 
    else: 
     if s1[-1] == s2[-1]: 
      cache[(s1, s2)] = 1 + lcs(s1[:-1], s2[:-1]) 
     else: 
      cache[(s1, s2)] = max(lcs(s1[:-1], s2), lcs(s1, s2[:-1])) 
    return cache[(s1, s2)] 
+0

आपको बहुत बहुत धन्यवाद !!! मैं इस तरह कुछ लागू करने की कोशिश कर रहा था और आपका समाधान काम किया। यह अधिक सहज है कि परिणामों को संग्रहित करने के लिए 2-डी मैट्रिक्स बनाना। – Angersmash

+0

अच्छा। उत्तर को सही उत्तर के रूप में चिह्नित करें ताकि अन्य इसका लाभ उठा सकें। –