Algoritmos y Estructuras de Datos Herramientas Lenguaje de programación
!Prog C/C++ Rust
Linux Matemáticas
Mates Discretas
Programación Orientada a Objetos Sistemas Operativos

Algoritmos

[date: 05-06-2023 14:21] [last modification: 13-02-2024 13:22]
[words: 900] [reading time: 5min] [size: 10995 bytes]

Introducción al análisis de algoritmos y diferentes tipos de algoritmos. N vs NP.

Algoritmos

Se ven mejor en Programación II: técnicas algorítmicas.

Un algoritmo es una sucesión finita de pasos o instrucciones para realizar una tarea, cálculo o resolución de un problema en un tiempo finito.

Debe tener las siguientes características:

Intuitivamente, un algoritmo de puede entender como una receta: se describen unas acciones ordenadamente y detalladamente para realizar una tarea.

Pseudocódigo

Es una descripción de alto nivel de un algoritmo o programa informático, y utiliza convenciones estructurales (condicionales, bucles, funciones, etc) de un lenguaje de programación, pero está pensado para la lectura de un humano y no de una máquina.

Tipos de algoritmos

Definición

Problemas de optimización

Problemas que requieren que se maximice o minice un valor en concreto que está en función de una variable independiente.

Por ejemplo: encontrar el camino más corto.

Problemas indecidibles

Alan Turing mostró que existen problemas que no se pueden resolver mediante algoritmos, como por ejemplo el Problema de la Parada o The Halting Problem:

Es posible escribir un programa de ordenador (procedimiento) que nos diga si dado un programa cualquiera y un conjunto de datos de entrada, podemos decidir si el programa termina, o no, su ejecución. ¿Parará alguna vez?

En este vídeo se explica muy bien el concepto de algoritmo y se «demuestra» porqué el problema de la parada no se puede resolver mediante algoritmos.

Big $O$, $\Omega$ y $\Theta$

Definición
$$ f(x) \in O(g(x)) \iff |f(x)| \le C |g(x)| \text{, si } x > k \\ f(x) \in \Omega(g(x)) \iff |f(x)| \ge C |g(x)| \text{, si } x > k \\ f(x) \in \Theta(g(x)) \iff f(x) \in O(g(x)) \land g(x) \in \Omega(f(x)) $$
Gráfico representativo del orden de complejidad

Gráfico representativo del orden de complejidad

Interpretación:

Observación
No son funciones únicas, existen muchas $O$ y $\Omega$.

Teorema y propiedades

Teorema
$$ p_n(x) \in O(x^n) $$ siendo $p_n(x)$ un polinomio cualquiera de grado $n$.

Sabiendo que $f_1 \in O(g_1)$ y $f_2 \in O(g_2)$, se cumplen las siguientes propiedades:

Ejemplos

Complejidad de algoritmos

Se puede analizar un algoritmo desde varios puntos de vista:

Y también se puede analizar en distintos casos:

Tipos de problemas

O(1)          Constante
O(log n)      Logarítmico
O(sqrt n)     Sublineal
O(n)          Lineal
O(n log n)    Quasilineal / Superlineal
O(n ^ a)      Polinómico                  TRATABLES
------------------------------------------------------
O(a ^ n)      Exponencial                 NO TRATABLES
O(n!)         Factorial
O(n ^ n)      Superexponencial

Con $a > 1$.

Resolubles
  • Tratables: terminan en un tiempo razonable; como máximo polinómico.
  • Intratables: acaba en tiempo exponencial, factorial o superexponencial.
IrresolublesNo se pueden resolver mediante algoritmos.

P vs NP

P

NP-Completo

NP

Ejemplos de problemas NP:

Ejemplos de problemas NP-Completo:

Volver a Mates Discretas Siguiente: Números