La cuestión es imprimir todos los entrelazados posibles de dos cadenas dadas. Así que escribí un código de trabajo en Python que funciona de esta manera:Cómo puedo entrelazar o crear permutaciones únicas de dos cadenas (sin recurrencia)
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
Viene en cada punto en una cadena, después durante una llamada recursiva, se considera el elemento actual como pertenecientes a la primera serie, y en el próxima llamada, que pertenece a la otra matriz. Así que si las cadenas de entrada son ab
y cd
, imprime abcd
, acbd
, cdab
, cabd
, etc. p1
y p2
son punteros a las matrices (porque las cadenas de Python son inmutables, que estoy usando matrices!). ¿Alguien me puede decir cuál es la complejidad de este código, y si puede mejorarse o no? He escrito un código similar para imprimir todas las combinaciones de longitud k
de una matriz dada:
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
Esto también funciona en el mismo principio. Entonces, en general, ¿cómo encontrar la complejidad de tales funciones y cómo las optimizo? ¿Es posible hacer esto por DP? Muestra de entrada-salida para el primer 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
puede por favor publicar el código para "printarr" –
Sí, puedo, pero eso es trivial, simplemente toma la matriz como entrada, concatena todos los elementos en una cadena y la imprime! – SexyBeast
Es difícil entender lo que estás haciendo. Puede publicar la entrada y salida esperada. – monkut