प्रश्न दो दिए गए तारों के सभी संभावित अंतःक्रियाओं को मुद्रित करना है। इसलिए मैं अजगर में एक काम कोड है जो इस तरह से चलाता है ने लिखा है:मैं दो स्ट्रिंग्स (रिकर्सन के बिना) के अनन्य क्रमपरिवर्तन कैसे बना सकता हूं या बना सकता हूं
def inter(arr1,arr2,p1,p2,arr):
thisarr = copy(arr)
if p1 == len(arr1) and p2 == len(arr2):
printarr(thisarr)
elif p1 == len(arr1):
thisarr.extend(arr2[p2:])
printarr(thisarr)
elif p2 == len(arr2):
thisarr.extend(arr1[p1:])
printarr(thisarr)
else:
thisarr.append(arr1[p1])
inter(arr1,arr2,p1+1,p2,thisarr)
del thisarr[-1]
thisarr.append(arr2[p2])
inter(arr1,arr2,p1,p2+1,thisarr)
return
यह एक स्ट्रिंग में प्रत्येक बिंदु पर आता है तो एक पुनरावर्ती कॉल के लिए, यह पहली सरणी से संबंधित के रूप में वर्तमान तत्व मानता है, और में अगली कॉल, अन्य सरणी से संबंधित है। तो अगर इनपुट तार ab
और cd
हैं, यह बाहर प्रिंट abcd
, acbd
, cdab
, cabd
, आदि p1
और p2
सरणियों के संकेत दिए गए हैं (क्योंकि अजगर तार अपरिवर्तनीय हैं, मैं सरणियों उपयोग कर रहा हूँ!)। क्या कोई मुझे बता सकता है, इस कोड की जटिलता क्या है, और यदि इसे बेहतर किया जा सकता है या नहीं? मैं किसी दिए गए सरणी से लंबाई k
के सभी संयोजनों मुद्रित करने के लिए इसी तरह की एक कोड लिखा है:
def kcomb(arr,i,thisarr,k):
thisarr = copy(thisarr)
j,n = len(thisarr),len(arr)
if n-i<k-j or j >k:
return
if j==k:
printarr(thisarr)
return
if i == n:
return
thisarr.append(arr[i])
kcomb(arr,i+1,thisarr,k)
del thisarr[-1]
kcomb(arr,i+1,thisarr,k)
return
यह भी एक ही सिद्धांत पर काम करता है। तो सामान्य रूप से, ऐसे कार्यों की जटिलता कैसे प्राप्त करें, और मैं उन्हें कैसे अनुकूलित करूं? क्या डीपी द्वारा ऐसा करना संभव है? पहली समस्या के लिए नमूना इनपुट आउटपुट:
>>> arr1 = ['a','b','c']
>>> arr2 = ['d','e','f']
>>> inter(arr1,arr2,0,0,[])
abcdef
abdcef
abdecf
abdefc
adbcef
adbecf
adbefc
adebcf
adebfc
adefbc
dabcef
dabecf
dabefc
daebcf
daebfc
daefbc
deabcf
deabfc
deafbc
defabc
क्या आप कृपया "printarr" –
के लिए कोड पोस्ट कर सकते हैं हाँ, लेकिन यह छोटा है, यह केवल इनपुट के रूप में सरणी लेता है, सभी तत्वों को स्ट्रिंग में जोड़ता है और इसे प्रिंट करता है! – SexyBeast
यह समझना मुश्किल है कि आप क्या कर रहे हैं। क्या आप इनपुट और अपेक्षित आउटपुट पोस्ट कर सकते हैं। – monkut