Este capítulo incluye problemas relacionados con temas fundamentales de la ciencia de la computación, como estructuras de datos, algoritmos, complejidad computacional y técnicas de programación. Estos problemas están diseñados para ayudar a los estudiantes a desarrollar habilidades en el diseño y análisis de algoritmos y en la implementación de soluciones de programación.
- Implementar un algoritmo de búsqueda lineal para encontrar un elemento en una lista.
- Implementar un algoritmo de búsqueda binaria para encontrar un elemento en una lista ordenada.
- Escribir un programa que ordene una lista de números utilizando el algoritmo de ordenamiento por burbuja.
- Escribir un programa que ordene una lista de números utilizando el algoritmo de ordenamiento por inserción.
- Escribir un programa que ordene una lista de números utilizando el algoritmo de ordenamiento por selección.
- Implementar el algoritmo de ordenamiento rápido (quicksort) para ordenar una lista de números.
- Implementar el algoritmo de ordenamiento por fusión (mergesort) para ordenar una lista de números.
- Escribir un programa que implemente el algoritmo de ordenamiento de montículos (heapsort).
- Implementar un algoritmo para encontrar el máximo común divisor (MCD) de dos números utilizando el método de Euclides.
- Implementar un algoritmo para encontrar el mínimo común múltiplo (MCM) de dos números.
- Escribir un programa que implemente el algoritmo de búsqueda en profundidad (DFS) en un grafo.
- Escribir un programa que implemente el algoritmo de búsqueda en anchura (BFS) en un grafo.
- Implementar un algoritmo para encontrar el camino más corto entre dos nodos en un grafo utilizando el algoritmo de Dijkstra.
- Implementar un algoritmo para encontrar el árbol de expansión mínima en un grafo utilizando el algoritmo de Kruskal.
- Implementar un algoritmo para encontrar el árbol de expansión mínima en un grafo utilizando el algoritmo de Prim.
- Escribir un programa que implemente el algoritmo de Floyd-Warshall para encontrar todos los caminos más cortos en un grafo.
- Implementar un algoritmo para detectar ciclos en un grafo dirigido.
- Implementar un algoritmo para detectar ciclos en un grafo no dirigido.
- Escribir un programa que implemente el algoritmo de ordenación topológica en un grafo dirigido acíclico (DAG).
- Implementar un algoritmo de búsqueda de patrones en una cadena utilizando el algoritmo de Knuth-Morris-Pratt (KMP).
- Implementar un algoritmo de búsqueda de patrones en una cadena utilizando el algoritmo de Boyer-Moore.
- Escribir un programa que implemente el algoritmo de compresión de datos Huffman.
- Implementar un algoritmo para la búsqueda de cadenas utilizando la técnica de hash de Rabin-Karp.
- Implementar un algoritmo de búsqueda de subcadenas utilizando el algoritmo de Aho-Corasick.
- Escribir un programa que implemente el algoritmo de Floyd para encontrar el ciclo más corto en un grafo ponderado.
- Implementar un algoritmo de planificación de tareas utilizando el algoritmo de Johnson.
- Escribir un programa para implementar una cola de prioridad utilizando un montículo binario.
- Implementar una tabla hash con manejo de colisiones mediante encadenamiento.
- Implementar una tabla hash con manejo de colisiones mediante direccionamiento abierto.
- Escribir un programa para implementar un árbol binario de búsqueda (BST).
- Implementar un algoritmo para equilibrar un árbol binario de búsqueda utilizando rotaciones AVL.
- Implementar un árbol rojo-negro (Red-Black Tree).
- Escribir un programa para implementar un trie para almacenar y buscar cadenas.
- Implementar un algoritmo de ordenación externa utilizando el algoritmo de fusión de varios caminos.
- Escribir un programa para implementar un grafo utilizando listas de adyacencia.
- Implementar un grafo utilizando matrices de adyacencia.
- Escribir un programa que implemente el algoritmo de multiplicación de matrices de Strassen.
- Implementar un algoritmo para calcular la transformada rápida de Fourier (FFT).
- Escribir un programa para calcular la transformada inversa de Fourier.
- Implementar un algoritmo de cifrado y descifrado utilizando el cifrado de César.
- Implementar un algoritmo de cifrado y descifrado utilizando el cifrado de Vigenère.
- Escribir un programa para implementar el algoritmo de encriptación RSA.
- Implementar un algoritmo de generación de números pseudoaleatorios utilizando el método de congruencia lineal.
- Implementar un algoritmo de generación de números pseudoaleatorios utilizando el método de LFSR (Linear Feedback Shift Register).
- Escribir un programa para calcular el número de permutaciones posibles de una lista de elementos.
- Implementar un algoritmo para calcular el número de combinaciones posibles de elegir (k) elementos de un conjunto de (n) elementos.
- Implementar un algoritmo de recorrido en orden preorden, enorden y postorden en un árbol binario.
- Escribir un programa para convertir un árbol binario a su representación de árbol de búsqueda binaria (BST).
- Implementar un algoritmo para encontrar el ancestro común más cercano de dos nodos en un árbol binario.
- Escribir un programa que implemente un autómata finito determinista (DFA).
- Implementar un autómata finito no determinista (NFA).
- Escribir un programa que implemente la conversión de un NFA a un DFA.
- Implementar un algoritmo para simular una máquina de Turing.
- Escribir un programa para evaluar una expresión aritmética utilizando la notación polaca inversa (RPN).
- Implementar un algoritmo para la evaluación de expresiones aritméticas utilizando un árbol de expresión.
- Escribir un programa para implementar un analizador léxico para una expresión matemática.
- Implementar un algoritmo de generación de código para una máquina hipotética utilizando un compilador simple.
- Escribir un programa para implementar una máquina de pila (stack machine).
- Implementar un algoritmo de evaluación de expresiones booleanas utilizando un árbol de expresión.
- Escribir un programa que implemente una máquina de estados finitos para un juego simple.
- Implementar un algoritmo de procesamiento de lenguaje natural para tokenizar una cadena de texto.
- Escribir un programa que implemente el algoritmo de Levenshtein para calcular la distancia de edición entre dos cadenas.
- Implementar un algoritmo para la búsqueda de aproximación de cadenas utilizando el algoritmo de Levenshtein.
- Escribir un programa para calcular la complejidad de tiempo de un algoritmo dado utilizando la notación Big-O.
- Implementar un algoritmo para calcular la complejidad de espacio de un algoritmo utilizando la notación Big-O.
- Escribir un programa que implemente un sistema de gestión de memoria utilizando el algoritmo de paginación.
- Implementar un sistema de gestión de memoria utilizando el algoritmo de segmentación.
- Escribir un programa para simular un algoritmo de planificación de procesos utilizando Round-Robin.
- Implementar un algoritmo de planificación de procesos utilizando el algoritmo de prioridad.
- Escribir un programa para simular un sistema operativo simple con manejo de procesos y memoria.
- Implementar un sistema de archivos simple con operaciones de creación, lectura, escritura y eliminación.
- Escribir un programa para implementar un intérprete simple de un lenguaje de programación.
- Implementar un algoritmo de optimización de compiladores utilizando el análisis de flujo de datos.
- Escribir un programa que implemente un sistema de detección de intrusiones en una red utilizando un algoritmo de aprendizaje automático.
- Implementar un algoritmo de reconocimiento de patrones utilizando una red neuronal básica.
- Escribir un programa para implementar un sistema de recomendación utilizando filtrado colaborativo.
- Implementar un algoritmo de agrupamiento utilizando el algoritmo K-means.
- Escribir un programa que implemente un árbol de decisión para la clasificación de datos.
- Implementar un algoritmo de búsqueda de profundidad limitada (IDS).
- Escribir un programa para simular un juego de ajedrez utilizando inteligencia artificial.