Un algoritmo para fusionar dos matrices ordenadas, eliminando duplicados y suponiendo que cada matriz puede incluir ejecuciones de duplicados, y suponiendo que las matrices no necesitan tener la misma longitud, y asumiendo que cualquiera de las matrices de entrada podría estar vacía, es así:
- Haga una nueva matriz lo suficientemente grande como para contener todo
- Señale el inicio de la nueva matriz.
- Señale el inicio de cada matriz de entrada
- Si al final de al menos una matriz de entrada, vaya al paso 9
- Compare los valores en la ubicación apuntada a cada matriz de entrada
- Agregue el más pequeño o igual a la nueva matriz y avance ese puntero de entrada
- Si bien el puntero de la matriz de entrada es válido y apunta a un valor igual al que acaba de copiar en la nueva matriz, avance el puntero de esa matriz de entrada
- Si no está al final de al menos una matriz de entrada, vaya al paso 4
- Usando cualquier matriz de entrada, si la hay, no está al final de:
- … Si la matriz de salida no está vacía: mientras el puntero de entrada apunta a un valor igual al que acaba de copiarse a la nueva matriz, avance el puntero de esa matriz de entrada
- … Si no está al final de la matriz de entrada, agregue el valor en la ubicación apuntada a la matriz de salida, avance el puntero de esa matriz de entrada y vaya al paso 10
- Está al final de ambas matrices de entrada y ha terminado de fusionar y eliminar duplicados; Es posible que tenga celdas no utilizadas al final de la nueva matriz, pero ya sabe cuántas celdas utilizó. Si lo desea, puede copiar a otra nueva matriz de exactamente el tamaño correcto y deshacerse de la de gran tamaño.
Probémoslo:
Paso 1, Paso 2, Paso 3 …
- ¿En qué sitios web de programación competitiva debería comenzar si termino el curso del algoritmo MIT?
- ¿Para qué sirve el algoritmo: "Dada una gran cantidad de matrices, imprima una lista de cada par de matrices y el tamaño de su intersección"?
- ¿Qué cambiarías en este currículum para obtener una entrevista técnica en una empresa tecnológica (como pasante de ingeniería de software)?
- ¿Cuáles son algunos ejemplos de una entrevista semi-técnica para un programador?
- ¿Qué tipo de preguntas hace Interviewstreet en la ronda telefónica?
INA: | 1 | 2 | 2 | 36 100 |
^
INB: | 1 | 1 | 5 | 100 | 100 | 1000 | 1000 |
^
NUEVO: | El | El | El | El | El | El | El | El | El | El | El | El |
^
Paso 4, Paso 5, Paso 6 …
INA: | 1 | 2 | 2 | 36 100 |
^
INB: | 1 | 1 | 5 | 100 | 100 | 1000 | 1000 |
^
NUEVO: | 1 | El | El | El | El | El | El | El | El | El | El | El |
^
Paso 7 …
INA: | 1 | 2 | 2 | 36 100
^
INB: | 1 | 1 | 5 | 100 100 | 1000 | 1000 |
^
NUEVO: | 1 | El | El | El | El | El | El | El | El | El | El | El |
^
Paso 8, Paso 4, Paso 5, Paso 6 …
INA: | 1 | 2 | 2 | 36 100 |
^
INB: | 1 | 1 | 5 | 100 | 100 | 1000 | 1000 |
^
NUEVO: | 1 | 2 | El | El | El | El | El | El | El | El | El | El |
^
Paso 7 …
INA: | 1 | 2 | 2 | 36 100 |
^
INB: | 1 | 1 | 5 | 100 | 100 | 1000 | 1000 |
^
NUEVO: | 1 | 2 | El | El | El | El | El | El | El | El | El | El |
^
Paso 8, Paso 4, Paso 5, Paso 6, Paso 7 …
INA: | 1 | 2 | 2 | 36 100
^
INB: | 1 | 1 | 5 | 100 100 | 1000 | 1000 |
^
NUEVO: | 1 | 2 | 5 | El | El | El | El | El | El | El | El | El |
^
Paso 8, Paso 4, Paso 5, Paso 6, Paso 7 …
INA: | 1 | 2 | 2 | 36 100
^
INB: | 1 | 1 | 5 | 100 100 | 1000 | 1000 |
^
NUEVO: | 1 | 2 | 5 | 36 El | El | El | El | El | El | El | El |
^
Paso 8, Paso 4, Paso 5, Paso 6 …
INA: | 1 | 2 | 2 | 36 100
^
INB: | 1 | 1 | 5 | 100 100 | 1000 | 1000 |
^
NUEVO: | 1 | 2 | 5 | 36 100 | El | El | El | El | El | El | El |
^
Paso 7 …
INA: | 1 | 2 | 2 | 36 100 |
^
INB: | 1 | 1 | 5 | 100 100 | 1000 | 1000 |
^
NUEVO: | 1 | 2 | 5 | 36 100 El | El | El | El | El | El | El |
^
Paso 8, Paso 4, Paso 9, Paso 10, Paso 11 …
INA: | 1 | 2 | 2 | 36 100 |
^
INB: | 1 | 1 | 5 | 100 | 100 | 1000 | 1000 |
^
NUEVO: | 1 | 2 | 5 | 36 100 | 1000 | El | El | El | El | El | El |
^
Paso 10, Paso 11, Paso 12 …
INA: | 1 | 2 | 2 | 36 100 |
^
INB: | 1 | 1 | 5 | 100 | 100 | 1000 | 1000 |
^
NUEVO: | 1 | 2 | 5 | 36 100 | 1000 | El | El | El | El | El | El |
^
Hecho.