Skip to content

Semana2

Davide Manotoa edited this page May 28, 2025 · 1 revision

📘 Capítulo 2: Algoritmia Elemental

Basado en: Fundamentos de Algoritmia — Brassard & Bratley


🔍 Introducción

Este capítulo se centra en los conceptos básicos de la algoritmia, esenciales para resolver problemas computacionales. La comprensión de algoritmos elementales es la base sobre la cual se construyen soluciones más complejas y eficientes.


🧾 ¿Qué es un Algoritmo Elemental?

Un algoritmo elemental es una secuencia finita de pasos simples y precisos que permiten resolver un problema específico. Aunque su estructura es sencilla, estos algoritmos son fundamentales en la programación.


🧩 Estructuras de Control

Son los pilares de todo algoritmo y determinan cómo se ejecutan las instrucciones:

  • 🔹 Secuencia: Las instrucciones se ejecutan una tras otra en orden.
  • 🔸 Selección: Se toman decisiones usando estructuras como if, else, switch.
  • 🔁 Repetición: Se repiten bloques de código usando for, while, do-while.

✅ Ejemplo en Java: Estructuras de control básicas

public class EstructurasControl {
    public static void main(String[] args) {
        int numero = 5;

        // Secuencia
        System.out.println("Inicio");
        System.out.println("Número: " + numero);

        // Selección
        if (numero % 2 == 0) {
            System.out.println("Es par");
        } else {
            System.out.println("Es impar");
        }

        // Repetición
        for (int i = 1; i <= numero; i++) {
            System.out.println("Iteración " + i);
        }
    }
}

🧠 Técnicas de Diseño

Diversas estrategias pueden utilizarse para resolver problemas computacionales:

  • 🛠 Fuerza Bruta: Probar todas las posibilidades hasta hallar la solución correcta.
  • 🔙 Backtracking: Explorar soluciones y retroceder cuando no se cumple una condición.
  • ✂️ División y conquista: Dividir el problema en subproblemas más simples, resolverlos y combinarlos.

🔎 Ejemplos de Algoritmos Elementales

1. 📦 Búsqueda Lineal

public class BusquedaLineal {
    public static int buscar(int[] arr, int valor) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == valor) return i;
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] datos = {4, 7, 1, 9, 3};
        int resultado = buscar(datos, 9);
        System.out.println("Índice encontrado: " + resultado);
    }
}
  • Complejidad: O(n)
  • Uso: Arreglos pequeños o sin orden específico.

2. 🧮 Búsqueda Binaria

public class BusquedaBinaria {
    public static int buscar(int[] arr, int clave) {
        int inicio = 0, fin = arr.length - 1;
        while (inicio <= fin) {
            int medio = (inicio + fin) / 2;
            if (arr[medio] == clave) return medio;
            if (arr[medio] < clave) inicio = medio + 1;
            else fin = medio - 1;
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] datos = {1, 3, 5, 7, 9};
        int resultado = buscar(datos, 7);
        System.out.println("Índice encontrado: " + resultado);
    }
}
  • Complejidad: O(log n)
  • Requiere: Arreglos ordenados.

⚙️ Complejidad Computacional

La complejidad mide los recursos que un algoritmo necesita:

  • ⌛ Tiempo: ¿Cuánto tarda?
  • 💾 Espacio: ¿Cuánta memoria usa?

📐 Notación Big O

Notación Descripción Ejemplo común
O(1) Tiempo constante Acceso directo a un arreglo
O(n) Tiempo lineal Búsqueda lineal
O(log n) Tiempo logarítmico Búsqueda binaria
O(n²) Tiempo cuadrático Doble bucle anidado

📌 Conclusión

Este capítulo establece la base esencial de la algoritmia elemental. Comprender estas técnicas y estructuras permite:

  • 🧠 Pensar algorítmicamente.
  • 🛠 Resolver problemas simples de forma eficiente.
  • 🔄 Escalar soluciones hacia algoritmos más avanzados.

Antes de diseñar soluciones complejas, es vital dominar los conceptos fundamentales tratados aquí.


Clone this wiki locally