La domanda è di stampare tutti i possibili intrecci di due stringhe date. Così ho scritto un codice di lavoro in Python che viene eseguito in questo modo:Come posso intercalare o creare permutazioni uniche di due stringhe (senza ricorsione)
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
Si tratta in ogni punto in una stringa, poi per una chiamata ricorsiva, si considera l'elemento corrente come appartenente alla prima matrice e nel prossima chiamata, appartenente all'altro array. Quindi, se le stringhe di input sono ab
e cd
, esso stampa abcd
, acbd
, cdab
, cabd
, ecc p1
e p2
sono puntatori alle matrici (perché le stringhe di Python sono immutabili, sto usando gli array!). Qualcuno può dirmi, qual è la complessità di questo codice e se può essere migliorata o no? Ho scritto un codice simile per stampare tutte le combinazioni di lunghezza k
da un dato array:
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
Anche questo, funziona sullo stesso principio. Quindi, in generale, come trovare la complessità di tali funzioni e come ottimizzarle? È possibile farlo da DP? input-output di esempio per il primo problema:
>>> 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
puoi postare il codice per "printarr" –
Sì, sì, ma è banale, prende solo l'array come input, concatena tutti gli elementi in una stringa e lo stampa! – SexyBeast
È difficile capire quello che stai facendo. Puoi pubblicare l'input e l'output atteso. – monkut