Algorismica
? Colección de Ejercicios - Capítulo 5: Elemento Mayoritario. Algoritmo para detectar si existe un número que aparece más de n/2 veces en una lista no ordenada. Restricción: El coste no puede superar O(n log n). Se explora el uso de diccionarios (con Dic
? Colección de Ejercicios - Capítulo 5: Ordenación Personalizada. Algoritmo para ordenar una lista mixta que contiene cadenas de números y cadenas de letras (ej: ['abc', '123', 'zz']), priorizando los números al principio. Implementación basada en Select
? Colección de Ejercicios - Capítulo 5: Combinatoria y Texto. Algoritmo para contar cuántas veces aparece una palabra pequeña como subsecuencia (no necesariamente contigua) dentro de una cadena más larga. Uso de la librería itertools para generar combina
? Colección de Ejercicios - Capítulo 5: Maximum Subarray Problem. Resolución del famoso problema de encontrar la sublista contigua con la suma más alta. Comparativa: Solución por Fuerza Bruta (lenta). Solución por Dividir y Vencer. Algoritmo de Kadane
? Colección de Ejercicios - Capítulo 5: Generación Combinatoria. Algoritmo para generar todos los números de N dígitos donde cada dígito es estrictamente mayor que el anterior (ej: 123, 145, 239...). Enfoque: Estrategia recursiva/constructiva para formar
? Colección de Ejercicios - Capítulo 5: Ordenación Avanzada. Adaptación de los algoritmos de ordenación (Quicksort y Mergesort) para tratar eficientemente listas donde los elementos aparecen por parejas (ej: [3,3,1,1,5,5]). Incluye análisis de complejida
? Colección de Ejercicios - Capítulo 5: Variantes de Búsqueda. Solución a un problema muy común en entrevistas: Realizar una búsqueda eficiente en una lista "casi" ordenada, donde cada elemento puede estar desplazado una posición respecto a su lugar orig
? Colección de Ejercicios - Capítulo 5: Algoritmos Avanzados. Implementación recursiva del algoritmo de Karatsuba para la multiplicación rápida de números grandes, mejorando la complejidad cuadrática tradicional.
? Colección de Ejercicios - Capítulo 5: Backtracking. Algoritmo recursivo para generar todas las combinaciones posibles de una cadena binaria con comodines (ej: '1?0' -> '100', '110').
⚡ Colección de Ejercicios - Capítulo 5: Exponenciación.Implementación de la función potencia $x^y$ de manera eficiente (O(log n)) utilizando la técnica de exponenciación binaria o por cuadrados (Divide y Vencer).
✖️ Colección de Ejercicios - Capítulo 5: Polinomios. Implementación básica de la multiplicación de dos polinomios representados como listas/tuplas usando bucles anidados.
➕ Colección de Ejercicios - Capítulo 5: Two Pointers. Algoritmo eficiente O(n) para encontrar todas las parejas en una lista ordenada que sumen un valor S. Uso de punteros al inicio y final convergiendo.
? Colección de Ejercicios - Capítulo 5: Búsqueda Relativa. Algoritmo para encontrar el valor inmediatamente menor y el inmediatamente mayor a un número k dentro de una lista, gestionando los casos borde.
? Colección de Ejercicios - Capítulo 5: Búsqueda Recursiva. Algoritmo Divide y Vencerá para encontrar el rango de índices (primera y última posición) de un elemento repetido en una lista ordenada.
?? Colección de Ejercicios - Capítulo 5: Algoritmos de Partición. Variante del problema de la Bandera Nacional Holandesa. Algoritmo para dividir una lista en tres partes (menores, iguales y mayores a un valor) en una sola pasada o pasadas limitadas.
?️ Colección de Ejercicios - Capítulo 5: Peak Element. Ejercicio de examen parcial. Encontrar un "pico" (elemento mayor que sus vecinos) en una lista en tiempo O(log n) utilizando búsqueda binaria.
? Colección de Ejercicios - Capítulo 5: Inversiones. Código base para el problema de contar inversiones en un array (pares donde i < j pero A[i] > A[j]), una medida de qué tan desordenada está una lista.
? Colección de Ejercicios - Capítulo 5: Punto Fijo. Algoritmo para encontrar si existe un índice i tal que A[i] == i en una lista ordenada de enteros distintos. Solución obligatoria en O(log n).
0️⃣ Colección de Ejercicios - Capítulo 5: Algoritmos de Partición. Implementación del problema "Move Zeros" utilizando una estrategia de Dividir y Vencer. Enfoque: Se trata el problema como una variación del algoritmo partition del Quicksort, usando el 0
? Colección de Ejercicios - Capítulo 5: Listas Circulares. Algoritmo para encontrar cuántas veces ha sido rotada una lista ordenada (búsqueda del mínimo/pivote). Incluye apuntes sobre el análisis de complejidad con el Teorema Maestro.
↔️ Colección de Ejercicios - Capítulo 5: Algoritmos de Partición. Algoritmo para mover todos los números negativos al principio de una lista en tiempo lineal O(n). Técnica: Uso de dos punteros (similar al partition de Quicksort) para hacer swaps sin usar
0️⃣ Colección de Ejercicios - Capítulo 5: Manipulación de Arrays. Problema clásico "Move Zeros". Objetivo: Desplazar todos los ceros al final de la lista manteniendo el orden relativo de los no-ceros (o sin importar el orden, según la variante). Código:
1️⃣ Colección de Ejercicios - Capítulo 5: Optimización de Conteo. Dada una lista ordenada de 0s y 1s (ej: [0,0,0,1,1]), contar cuántos unos hay. Implementación: Solución ingenua O(n). Solución óptima O(log n) usando búsqueda binaria para encontrar el p
? Colección de Ejercicios - Capítulo 5: Missing Integer. Algoritmo para encontrar el primer número natural que falta en una secuencia ordenada. Estrategia: Variante de búsqueda binaria para detectar dónde el valor del índice no coincide con el valor del
? Colección de Ejercicios - Capítulo 5: Palíndromos. Búsqueda de la subsecuencia capicúa (palíndroma) más larga dentro de un string. Enfoque: Uso de itertools para generar combinaciones y chequeo de propiedades. Nota: Aunque el título original menciona L
? Colección de Ejercicios - Capítulo 5: Búsqueda Binaria Modificada. Problema clásico de entrevista: Encontrar el único número que no se repite en una lista ordenada donde todos los demás aparecen dos veces. Algoritmo: Implementación eficiente con comple
➗ Colección de Ejercicios - Capítulo 5: Recursividad Básica. El primer paso para entender la técnica de Dividir y Vencer. Ejercicio: Función recursiva simple para sumar los elementos de una lista. Identificación del Caso Base. Llamada recursiva con sub
? Colección de Ejercicios - Capítulo 4: Distancia de Edición.Práctica intensiva sobre el algoritmo de Levenshtein (Edit Distance).Contenido:Implementación paso a paso usando Programación Dinámica.Inicialización y llenado de la Matriz de Costes ($O(n*m)$).
? Archivo de texto plano necesario para ejecutar el ejercicio 4.5 (Algoritmo de ADN). Contiene una secuencia larga de bases nitrogenadas (A, C, G, T) del cromosoma 2 humano.
? Colección de Ejercicios - Capítulo 4: Regex. Introducción al módulo re de Python. Ejercicio: Definir un patrón de Expresión Regular para validar códigos postales del Reino Unido en una lista de direcciones. Ideal para aprender a usar patrones de búsqu
? Colección de Ejercicios - Capítulo 4: Optimización. Resolución del problema "Longest Substring Without Repeating Characters". Estrategia: Implementación eficiente controlando índices de inicio y fin (técnica de ventana deslizante) y uso de diccionarios
? Colección de Ejercicios - Capítulo 4: LCS (Longest Common Subsequence). Comparativa de dos enfoques para resolver el problema LCS: Fuerza Bruta: Usando itertools.combinations (lento pero intuitivo). Programación Dinámica: Solución óptima utilizando u
? Colección de Ejercicios - Capítulo 4: Compresión. Algoritmo clásico de entrevista y examen: RLE. Código: Función que recorre un string y lo comprime contando caracteres consecutivos (ej: 'AAA' -> 'A3'). Tip: Es un ejercicio muy frecuente en los parcia
? Colección de Ejercicios - Capítulo 4: Programación Dinámica Avanzada. El ejercicio más completo del capítulo. Aplicación de algoritmos de edición de texto a secuencias de ADN. Contenido: Implementación de Levenshtein/Smith-Waterman con matriz de coste
✂️ Colección de Ejercicios - Capítulo 4: Iteración. Algoritmo de fuerza bruta para extraer todas las posibles subcadenas (substrings) de una palabra. Técnica: Uso de doble bucle for y slicing de listas/strings. Fundamental para entender problemas más com
? Colección de Ejercicios - Capítulo 4: Lógica de Strings. Solución al problema de determinar si dos palabras tienen la misma estructura (Isomorfismo). Código: Implementación robusta usando dos diccionarios para asegurar el mapeo uno a uno (biyeccción) e
✈️ Colección de Ejercicios - Capítulo 4: Mapeo de Datos. Ejercicio de traducción automática usando diccionarios (Key-Value). Objetivo: Convertir una cadena de texto al alfabeto radiofónico (NATO/Aviación) donde 'A' es 'Alfa', 'B' es 'Bravo', etc. Prácti
? Colección de Ejercicios - Capítulo 4: Strings. Introducción a la manipulación de cadenas de texto. Ejercicio: Implementación de la función acronim que toma una frase, la separa en palabras (split) y construye una sigla con las iniciales en mayúsculas.
? Colección de Ejercicios - Capítulo 3: Algorítmica Avanzada. Estudio profundo de la sucesión de Fibonacci y su eficiencia. Contenido: Suma de términos pares y múltiplos de 3 (bucle while). Fibonacci Matricial: Implementación optimizada. Análisis de t
? Colección de Ejercicios - Capítulo 3: Números Primos. Implementación teórica y práctica del Sedàs (Criba) d'Eratòstenes. Contenido del Notebook: Explicación paso a paso del algoritmo para filtrar no-primos. Función primer(n): Lógica para encontrar el
? Colección de Ejercicios - Capítulo 3: Criptografía Básica. Introducción a los números primos y tests de primaliad. Contenido: Función primers: Criba para encontrar primos. Primos de Wieferich: Algoritmo de búsqueda con condiciones de potencia modular
? Colección de Ejercicios - Capítulo 3: Resolución de Problemas. Conjunto de desafíos matemáticos resueltos con fuerza bruta y bucles. Números que cumplen 3 condiciones simultáneas (Factoriales y Cuadrados). Suma de cuadrados perfecta. Suma de múltipl
? Colección de Ejercicios - Capítulo 3: Estructura de Programas. Ejercicios variados de lógica y funciones. Calculadora de Texto: Procesar strings como operaciones matemáticas (eval). Mínimo Común Múltiplo: Algoritmo para encontrar el número más pequeñ
? Colección de Ejercicios - Capítulo 3: Aritmética Modular. Aplicaciones reales del operador módulo %. Ejercicios Resueltos: Validar NIF/DNI: Algoritmo real para calcular la letra del DNI. Columnas Excel: Conversión de números a letras (A, B... AA, AB)
⚡ Colección de Ejercicios - Capítulo 3: Bits. Ejercicios rápidos sobre propiedades de los números binarios. Función potencia2: Cómo detectar si un número es potencia de 2 analizando su representación binaria (contando unos).
? Colección de Ejercicios - Capítulo 3: Sistemas de Numeración. Pack completo de funciones de conversión de bases. Funciones: convert_hex: De Hexadecimal a Decimal usando diccionarios. binari: Generador de listas de números binarios. binari_elegant: F
? Colección de Ejercicios - Capítulo 3: Operaciones a Bajo Nivel. Implementación manual de la aritmética binaria usando listas. Función suma_binaria (o resta) simulando el comportamiento del hardware bit a bit. Gestión del Carry (acarreo) con condicion
? Colección de Ejercicios - Capítulo 3: Matemáticas. Aplicaciones prácticas del MCD (Máximo Común Divisor). Incluye: Algoritmo para simplificar fracciones a su expresión irreducible. Comparativa entre implementación manual y uso de math.gcd.
➗ Colección de Ejercicios - Capítulo 3: Algoritmos Básicos. Resolución de un problema clásico de entrevista técnica: Implementar una División Entera sin usar los operadores de multiplicación *, división / o módulo %. Uso de bucles y restas sucesivas pa
? Colección de Ejercicios - Capítulo 2: Manipulación de Tipos. Problema clásico de los "Números Apocalípticos" (buscar la secuencia 666 en potencias de 2). Conceptos clave: Operador de potencia **. Conversión de enteros a String (str) para buscar subca
? Colección de Ejercicios - Capítulo 2: Condicionales. Práctica introductoria sobre estructuras de control y toma de decisiones en Python. Contenido: Función prou_cerveses: Uso de operadores lógicos AND/OR para decidir el éxito de una fiesta. Función n
? Colección de Ejercicios - Capítulo 2: Bucles e Iteraciones. Ejercicio centrado en el uso de bucles for y acumuladores matemáticos. Incluye: Implementación de la función suma_quadrats. Diferencia entre la suma de cuadrados y el cuadrado de la suma. B
? Examen de laboratorio resuelto (Nota: 10/10). Ejercicios incluidos: Dibujo de un avet (árbol) con asteriscos según input. Detección de Números Perfectos y Números Ambiciosos (recursividad). Descomposición en suma de raíces cuadradas. Análisis de Com
? Solución completa a la Prueba 3 de laboratorio. Contiene el código Python para: Distancia de Levenshtein Modificada: Implementación que permite configurar costes personalizados para inserción, borrado y sustitución. Inversor de Frases: Función que inv
? Solución a la primera prueba de laboratorio (Fundamentos). Ideal para repasar lo básico antes del parcial: Uso de input y validación con while. Tablas de multiplicar. Manipulación de Strings (strip, upper) y condicionales. Operaciones básicas con Li
? Examen parcial completo con teoría y práctica. Teoría: Preguntas sobre complejidad, criptografía y multiplicación modular. Práctica: Detector de Palíndromos con Rotación. Conversión eficiente de Octal a Binario. Compresión de datos RLE (Run Length En
? Solución detallada del segundo parcial. Incluye ejercicios avanzados: Horspool: Tabla de desplazamientos y traza del algoritmo. Levenshtein: Recuperación del alineamiento (trazabilidad). Teorema Maestro: Cálculo de recurrencias T(n). Algoritmos de L
? Solución al ejercicio del punto extra "Twelve Days of Christmas". Implementación de lógica de bucles acumulativos para calcular: El número total de regalos acumulados. El coste financiero total según una tabla de precios. Cálculo inverso (cuántos día
? Megapack de Práctica: Archivo ZIP con múltiples Notebooks (.ipynb) de ejercicios resueltos para dominar la asignatura de Algorítmica. Contenido: Ejercicios variados de complejidad y Big O. Algoritmos de ordenación y búsqueda. Divide y Vencerás. Pro
? Examen de reevaluación resuelto. Muy útil para repasar todo el curso.Contiene:Teoría: Bases numéricas (BCD) y Recursividad vs Iteratividad.Teorema Maestro y Pequeño Teorema de Fermat.Análisis de coste de algoritmo de multiplicación $O(n^3)$.Problema de