Ordenación de Palabras en Diccionario Alienígena
Clase 7 de 35 • Curso de Algoritmos Avanzados: Patrones de Arrays y Strings
Resumen
¿Cómo solucionar un problema de ordenamiento de palabras alienígena en JavaScript?
¡Vamos a sumergirnos en el fascinante mundo del desarrollo de software! Resolveremos un problema práctico de ordenamiento de palabras en un lenguaje "alienígena" utilizando JavaScript. Aprender a descomponer un problema en partes pequeñas y manejables es vital para cualquier desarrollador.
¿Cómo crear un mapa de diccionario alienígena?
El primer paso en nuestra solución es construir un "mapa de diccionario" que nos ayude a entender el orden de las letras en este idioma alienígena. Esto lo haremos con una estructura de datos hash en JavaScript:
// Crear mapa de diccionario alienígena
let mapaDiccionario = new Map();
for (let i = 0; i < orden.length; i++) {
mapaDiccionario.set(orden[i], i);
}
Este hash table almacena cada letra del idioma alienígena como clave y su respectivo orden como valor, permitiéndonos acceder rápidamente al índice de cualquier letra.
¿Cómo comparar palabras en base al diccionario creado?
Una vez tenemos nuestro mapa, enfrentamos el siguiente desafío: comparar palabras para verificar si están ordenadas correctamente. La clave aquí es iterar sobre las palabras y sus caracteres:
function comparar(palabra1, palabra2) {
// Determinar longitud mínima para comparación
let minLength = Math.min(palabra1.length, palabra2.length);
for (let i = 0; i < minLength; i++) {
let char1 = mapaDiccionario.get(palabra1[i]);
let char2 = mapaDiccionario.get(palabra2[i]);
if (char1 !== char2) {
return char1 < char2;
}
}
return palabra1.length <= palabra2.length;
}
Esta función auxiliar evalúa letra por letra hasta encontrar una diferencia, determinando si una palabra debe preceder a otra según el orden alienígena.
¿Cuál es la mecánica para verificar el orden de todas las palabras?
Finalmente, dado nuestro mapa y función de comparación, verificamos si una lista entera de palabras está ordenada:
function isAlienSorted(palabras) {
for (let i = 1; i < palabras.length; i++) {
if (!comparar(palabras[i - 1], palabras[i])) {
return false;
}
}
return true;
}
Aquí, iteramos sobre las palabras comparando consecutivamente pares de palabras. Si alguna comparación falla, determinamos que el orden no es correcto.
¿Cómo evaluar la eficiencia de nuestra solución?
Al abordar problemas algorítmicos es crucial considerar la eficiencia. Este algoritmo tiene complejidad O(N * M), donde N es la cantidad de palabras y M es el máximo de caracteres en una palabra. Afortunadamente, el procesamiento de cadenas dentro de las capacidades actuales de hardware hace que tal complejidad sea manejable.
Utilizar un enfoque modular y claro no solo simplifica el mantenimiento del código sino que también facilita comprender y depurar algoritmos más complejos en el futuro. ¡Sigue desarrollando tus habilidades y recuerda que cada ejercicio es una oportunidad para mejorar!