-
Notifications
You must be signed in to change notification settings - Fork 0
Semana2
Basado en: Fundamentos de Algoritmia — Brassard & Bratley
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.
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.
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.
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);
}
}
}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.
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.
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.
La complejidad mide los recursos que un algoritmo necesita:
- ⌛ Tiempo: ¿Cuánto tarda?
- 💾 Espacio: ¿Cuánta memoria usa?
| 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 |
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í.