¿Cuáles son los fundamentos de un algoritmo?