Red de conocimiento del abogados - Preguntas y respuestas jurídicas - Método exhaustivo de VBA para encontrar una matriz unidimensional

Método exhaustivo de VBA para encontrar una matriz unidimensional

El siguiente es un código VBA que utiliza recursividad para generar todas las combinaciones posibles. Este código generará todas las combinaciones de longitud de 1 a 20 en myArr. Tenga en cuenta que este enfoque exhaustivo puede llevar mucho tiempo cuando la matriz es grande.

Sub GenerateCombinations()

Atenuar myArr(1 a 20) como entero

Atenuar i como entero

'Rellenar la matriz myArr , Aquí se utilizan datos de muestra

Para i = 1 a 20

myArr(i) = i

Siguiente i

'Loop para generar todas las combinaciones de longitud de 1 a 20

Para i = 1 a 20

Debug.Print "Combinaciones de longitud " & i & ":"

GenerateCombinationsHelper myArr, i, ""

Siguiente i

End Sub

Sub GenerateCombinationsHelper(myArr como variante, k como entero, resultado como cadena)

Atenuar i como entero

Atenuar j como entero

Si k = 0 entonces

Depurar.Imprimir resultado

De lo contrario

Para i = 1 a UBound(myArr)

Si InStr(resultado, CStr(myArr(i))) = 0 Entonces

GenerateCombinationsHelper myArr, k - 1, resultado & " " & myArr(i)

Finalizar si

Siguiente i

Finalizar si

Finalizar sub

Ejecute el código

El código primero llena la matriz myArr y luego realiza un bucle para generar todas las combinaciones de longitud de 1 a 20. Para cada longitud, el código llama a la función GenerateCombinationsHelper para generar todas las combinaciones posibles. La función GenerateCombinationsHelper utiliza recursividad para generar combinaciones. Primero verifica si se han seleccionado k elementos y, de ser así, genera el resultado; de lo contrario, se llama a sí mismo de forma recursiva, selecciona un elemento que aún no ha sido seleccionado, lo agrega al resultado y luego continúa seleccionando el siguiente elemento. La recursividad termina cuando el número de elementos seleccionados alcanza k. La combinación resultante se pasa en el parámetro de resultado y se genera mediante Debug.Print.