Ordenación de Palabras en Diccionario Alienígena
Clase 7 de 35 • Curso de Algoritmos Avanzados: Patrones de Arrays y Strings
Contenido del curso
- 3

Patrón de Dos Apuntadores en Algoritmos de Lista
02:56 - 4

Verificación de Orden en Diccionario Alienígena
02:56 - 5

Ordenamiento de Palabras en Idiomas Alienígenas
12:05 - 6
Playground: Verifying Alien Dictionary
00:00 - 7

Ordenación de Palabras en Diccionario Alienígena
15:07 - 8

Combinar Listas Ordenadas en un Array Ascendente
02:11 - 9

Ordenamiento de Listas con Complejidad Óptima y Espacio Constante
11:44 - 10
Playground: Merge Two Sorted Lists
00:00 - 11

Intercalación de Listas Ordenadas en Python
09:04 - 12

Resolver el problema "Container with Most Water" en Python
01:18 - 13

Cálculo Óptimo de Área en Listas de Alturas
09:02 - 14
Playground: Container with Most Water
00:00 - 15

Implementación de solución de cálculo de área máxima en Java
15:42 - 16

Implementación de Trapping Rainwater en Complejidad Lineal
01:02 - 17
Retos de Algoritmos con Apuntadores en Python
02:44 - 18
Patrones de Dos Apuntadores: Soluciones a Problemas Comunes en Python
06:43
- 19

Patrón Ventana Deslizante para Análisis de Datos Secuenciales
02:33 - 20

Subcadena más larga sin caracteres repetidos: patrón ventana deslizante
01:51 - 21

Algoritmo de Ventana Deslizante para Subcadenas Únicas
11:05 - 22
Playground: Longest Substring Without Repeating Characters
00:00 - 23

Algoritmo Python para Substring más Largo Sin Repeticiones
14:16 - 24
Retos de Algoritmos: Dos Apuntadores y Subcadenas
01:50 - 25
Máximos 1s Consecutivos y Subcadenas sin Repeticiones
03:22
- 26

Algoritmo de búsqueda binaria en listas ordenadas
09:26 - 27

Búsqueda en Arrays Rotados: Encontrar Entero en Lista Ordenada
02:19 - 28

Búsqueda Binaria en Arreglos Rotados
04:59 - 29
Playground: Search in Rotated Arrays
00:00 - 30

Búsqueda en Arrays Rotados con C++
10:53 - 31

Búsqueda eficiente en matriz ordenada MxN
01:44 - 32

Búsqueda Binaria en Matrices 2D Ordenadas
06:33 - 33
Playground: Search 2D Array Matrix
00:00 - 34

Búsqueda Binaria en Matrices con Python
07:48
¿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!