Вы находитесь на странице: 1из 8

UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE

HUAMANGA
DEPARTAMENTO ACADÉMICO DE MATEMÁTICA Y FÍSICA
PROF. JOSÉ ELÍAS YAURI VIDALÓN

CAPÍTULO I
ALGORITMOS

Índice

1. Algoritmos .......................................................................................................................................... 1
1.1. Definiciones formales: ............................................................................................................... 2
1.2. Historia ...................................................................................................................................... 2
1.3. Características de los Algoritmos: ............................................................................................. 3
2. Análisis de Algoritmos ....................................................................................................................... 4
2.1. Tiempo Polinómico ................................................................................................................... 4
2.2. Tiempo No Polinómico ............................................................................................................. 5
3. Solución de un Problema y Diseño de Algoritmos ............................................................................ 5
3.1. Pasos para la Resolución de un Problema ................................................................................. 6
3.2. Descomposición de Algoritmos ................................................................................................. 6
3.3. El Pseudocódigo ........................................................................................................................ 7
4. Referencias ......................................................................................................................................... 8

“Nuestra herramienta mental más importante para competir con


la complejidad es la abstracción. Por tanto, un problema no
deberá considerarse inmediatamente en términos de
instrucciones de un lenguaje, sino de elementos naturales
del problema mismo, abstraídos de alguna manera.” (Niklaus
Wirth, Creador del Lenguaje Pascal).

1. Algoritmos

Podemos encontrar muchos conceptos de algoritmo en los textos de programación, todas


ellas muy similares, por ejemplo:
 Conjunto ordenado y finito de pasos que permite hallar la solución de un problema.
 Una secuencia de pasos que conducen a la realización de una tarea.
 Descripción de la secuencia en que se ha de realizar un conjunto de actividades
tendientes a resolver un determinado problema.
 Conjunto de sentencias y/o instrucciones en lenguaje nativo, los cuales expresan la
lógica de un programa.

Prof. José Elías Yauri Vidalón Algoritmos - Apuntes I - Página 1 de 8


 Toda receta, proceso, rutina, método, procedimiento, técnica, formula que resuelven
un determinado problema.
 Conjunto de instrucciones concretas y detalladas mediante el cual se consigue una
acción determinada.
 Conjunto de reglas que permiten obtener un resultado esperado a partir de ciertas
reglas definidas.
 Descripción precisa de una secuencia de instrucciones para llevar a cabo un trabajo
en un número finito de pasos.

Así, de forma simple, un algoritmo es una secuencia de pasos para resolver un problema,
teniendo en cuenta que debe de ser definido, finito y preciso.

1.1.Definiciones formales:

 Secuencia finita de instrucciones, reglas o pasos describiendo de forma precisa las


operaciones que un ordenador debe realizar para llevar a cabo una tarea en un tiempo
finito. [Donald E. Knuth, 1968]
 Descripción de un esquema de comportamiento expresado mediante un reportorio
finito de acciones e informaciones elementales, identificadas, bien comprendidas y
realizables a priori. Este repertorio se denomina léxico [Pierre Scholl, 1988]

Definimos algoritmo como un conjunto finito de pasos definidos, estructurados en


el tiempo y formulados con base a un conjunto finito de reglas no ambiguas, que
proveen un procedimiento para dar la solución, o indicar la falta de ésta, a un
problema en un tiempo determinado.

1.2.Historia

La palabra algoritmo proviene del nombre del matemático, astrónomo y geógrafo


persa musulmán Abu Abdullah Muhammad bin Musa Al-Khwarizmi que vivió
aproximadamente entre 780 y 850 de nuestra era. La traducción del apellido al latín
es Algoritmus, que con el tiempo se llamó algoritmo.

Al-Khwarizmi trabajó en preservar y difundir el conocimiento de la antigua Grecia


e India. Sus libros eran de fácil comprensión, de ahí que su principal valor no fuera
el de crear nuevos teoremas o nuevas corrientes de pensamiento, sino el de
simplificar las matemáticas a un nivel lo suficientemente bajo para que pudiera ser
comprendido por un público mayor. Destacó las virtudes del sistema decimal indio
(en contra de los sistemas tradicionales árabes) y explicó que, mediante una
especificación clara y concisa de cómo calcular sistemáticamente, se podrían definir
procedimientos que fueran usados en dispositivos mecánicos similares a un ábaco en
vez de las manos1.

Por estas razones, aunque no haya sido él el inventor del primer algoritmo, merece
que este concepto esté asociado a su nombre. Al-Khwarizmi fue sin duda el primer
pensador algorítmico.

1
Al-Khwarizmi alcanzó gran reputación por el enunciado de la regla paso a paso para sumar, restar,
multiplicar y dividir números decimales.

Prof. José Elías Yauri Vidalón Algoritmos - Apuntes I - Página 2 de 8


Ya en el siglo XIX, se produjo el primer algoritmo escrito para un computador. La
autora fue Ada Byron, en cuyos escritos se detallaban la máquina analítica de Charles
Babbage en 1842. Aunque ella considerada por muchos como la primera
programadora, debido a que la máquina de Babbage no se completó, el algoritmo
nunca se implementó.

La idea de resolver un problema o de disponer de un algoritmo es bastante antigua,


existiendo la errada creencia que no había problema que no se pudiera resolver. En
base a ello, el matemático David Hilbert quiso descubrir un algoritmo para los
algoritmos. Hoy en día gracias a los trabajos de Kurt Gödel, Alonzo Church, Alan
Turing (Máquina de Turing), se sabe que dentro del universo de problemas, una
pequeña parte es computable. Así el objetivo que perseguía David Hilbert no era
computable, no soluble.

1.3.Características de los Algoritmos:

Un algoritmo debe ser:

 Definido: El algoritmo no debe tener ambigüedades. Cada paso del algoritmo


debe indicar la acción a realizar sin criterios de interpretación.

 Finito: El algoritmo debe tener un número específico y numerable de pasos,


finalizando al completarlos.

 Tener cero o más entradas: Los datos son proporcionados a un algoritmo como
insumos (o estos son generados de alguna forma) para llevar a cabo las
operaciones que comprende.

 Tener una o más salidas: Un algoritmo debe siempre devolver un resultado. No


sirve un algoritmo que hace algo y no sabemos que hizo.

El devolver un resultado no debe ser considerado como únicamente verlos en


forma impresa o en pantalla, como ocurre con las computadoras. Existen muchos
otros mecanismos susceptibles de programación que no cuentan con una salida
de resultados de esta forma. Por salida de resultados debe entenderse todo medio
o canal por el cual es posible apreciar los efectos de las acciones del algoritmo.

 Efectividad: El tiempo y esfuerzo por cada paso realizado debe ser preciso, no
usando más ni menos que aquello que se requiera para su ejecución.

Ejemplo: Redactar el algoritmo para el siguiente caso: Un cliente ejecuta un pedido


a una fábrica. La fábrica examina en su base de datos la ficha del cliente. Si el cliente
es solvente, entonces la empresa acepta el pedido; en caso contrario, rechazará el
pedido.

Los pasos del algoritmo son:


1. Inicio.
2. Leer pedido.

Prof. José Elías Yauri Vidalón Algoritmos - Apuntes I - Página 3 de 8


3. Examinar la ficha del cliente.
4. Si el cliente es solvente, aceptar el pedido; en caso contrario; rechazar el
pedido.
5. Fin.

2. Análisis de Algoritmos

El análisis de algoritmos es una parte importante de la Teoría de complejidad


computacional2, que provee estimaciones teóricas para los recursos que necesita
cualquier algoritmo que resuelva un problema computacional dado. Estas estimaciones
son bastante útiles en la búsqueda de algoritmos eficientes.

Los recursos comúnmente estudiados son el tiempo (mediante una aproximación al


número y tipo de pasos de ejecución de un algoritmo para resolver un problema) y el
espacio (mediante una aproximación a la cantidad de memoria utilizada para resolver un
problema). Se pueden estudiar igualmente otros parámetros tales como el número de
procesadores necesarios para resolver el problema en paralelo.

La teoría de la complejidad difiere de la teoría de la computabilidad en que esta se


ocupa de la factibilidad de expresar problemas como algoritmos efectivos sin tomar en
cuenta los recursos necesarios para ello.

Los problemas que tienen una solución con orden de complejidad lineal son los
problemas que se resuelven en un tiempo que se relaciona linealmente con su tamaño.
Hoy en día las computadoras resuelven problemas mediante algoritmos que tienen como
máximo una complejidad o coste computacional polinómico, es decir, la relación entre
el tamaño del problema y su tiempo de ejecución es polinómica. Éstos son problemas
agrupados en la clase P. Los problemas que no pueden ser resueltos por nuestras
computadoras (las cuales son Máquinas Determinísticas), que en general poseen costes
factorial o combinatorio, pero que podrían ser procesados por una máquina no-
determinista, están agrupados en la clase NP. Estos problemas no tienen una solución
práctica, es decir, una máquina determinística (como una computadora actual) no puede
resolverlos en un tiempo razonable.

2.1.Tiempo Polinómico

En computación, cuando el tiempo de ejecución de un algoritmo es menor que un cierto


valor calculado a partir del número de variables implicadas (generalmente variables de
entrada) usando una fórmula polinómica, se dice que dicho problema se puede resolver
en un tiempo polinómico.

Por ejemplo, si determinar el camino óptimo que debe recorrer un cartero que pasa por
N casas necesita menos de 50N2+N segundos, entonces el problema es resoluble en un
"tiempo polinómico".

De esa manera, tiempos de 2n2+5n, o 4n6+7n4-2n2 son polinómicos; pero 2n no lo es.

2
La teoría de la complejidad computacional es la rama de la teoría de la computación que estudia, de
manera teórica, los recursos requeridos durante el cómputo de un algoritmo para resolver un problema.

Prof. José Elías Yauri Vidalón Algoritmos - Apuntes I - Página 4 de 8


Dentro de los tiempos polinómicos, podemos distinguir los logarítmicos (log(n)), los
lineales (n), los cuadráticos (n2), cúbicos (n3), etc.

2.2.Tiempo No Polinómico

En teoría de la complejidad, la clase de complejidad de los problemas de decisión que


pueden ser resueltos en tiempo polinómico calculado a partir de la entrada por una
máquina de Turing determinista es llamada P. Cuando se trata de una máquina de Turing
no-determinista, la clase se llama NP. Una de las preguntas abiertas más importantes en
la actualidad es descubrir si estas clases son diferentes o no. El instituto Clay
Mathematics ofrece un millón de dólares a quien sea capaz de responder a esa pregunta.

Figura 1.1 Diagrama de clases de complejidad.

3. Solución de un Problema y Diseño de Algoritmos

En la vida cotidiana ejecutamos constantemente algoritmos. Por ejemplo, al instalar un


equipo de sonido ejecutamos las instrucciones contenidas en el manual del equipo –este
conjunto de instrucciones constituyen un algoritmo. Otro, es el algoritmo matemático de
Euclides para la obtención del máximo común divisor de dos números.

Si un algoritmo puede ser ejecutado por una computadora, se dice que es un algoritmo
computacional; en caso contrario, se dice que es un algoritmo no computacional.
Según esto, el algoritmo de Euclides es un algoritmo computacional; pero el algoritmo
para instalar el equipo de sonido es un algoritmo no computacional.

Para que un algoritmo pueda ser ejecutado por una computadora, este debe ser expresado
mediante instrucciones comprensibles por la computadora; para esto se requiere de un
determinado lenguaje de programación. Al algoritmo expresado en un determinado
lenguaje de programación, se denomina programa. Puesto de otra manera, podemos
decir que, un programa es la implementación o expresión de un algoritmo en un
determinado lenguaje de programación siguiendo las reglas establecidas por el lenguaje
elegido.

La Figura 1.1 muestra la relación entre problema, algoritmo y programa.

Prof. José Elías Yauri Vidalón Algoritmos - Apuntes I - Página 5 de 8


Figura 1: Problema, algoritmo y programa

3.1.Pasos para la Resolución de un Problema

 Análisis del Problema: Establecer el problema, las entradas y las salidas.

 Diseño del algoritmo


Describe la secuencia ordenada de pasos (sin ambigüedades), que conducen a
la solución del problema.

 Codificación: Expresar el algoritmo como un programa en un lenguaje de


programación.

 Ejecución, validación y depuración del programa por la computadora: ejecutar


el programa y probar la correctitud del programa.

3.2.Descomposición de Algoritmos

Todo algoritmo puede ser descompuesto en tres partes:


 Entrada de datos.
 Proceso.
 Salida de resultados.

Ejemplo: Algoritmo de receta de cocina.

Entrada: Ingredientes y utensilios.


Proceso: Elaboración de la receta de cocina.
Salida: Terminación del plato (ejemplo: cordero, ají de gallina, flan, etc.).

Ejemplo 1.1: Algoritmo para preparar cebiche de bonito para 6 personas.


Entradas:
- 1 kilo de pescado bonito
- 3 camotes sancochados
- 3 cebollas cortadas a lo largo
- 1 rocoto en rodajas
- 3 ramas de apio picado
- 2 ramitas de culantro picado
- 4 vasos de jugo de limón
- 4 cucharadas de ajo molido
- 2 cucharadas de ají amarillo molido
- sal y pimienta

Prof. José Elías Yauri Vidalón Algoritmos - Apuntes I - Página 6 de 8


Proceso:
- Cortar la carne de pescado en pequeños trozos.
- Mezclar la carne con el jugo de limón, el ajo, la pimienta, el
culantro, el ají amarillo y el apio.
- Dejar reposar 30 minutos.
- Agregar sal al gusto y echar las cebollas cortadas.
- Servir acompañando el cebiche con el camote sancochado y el
rocoto en rodajas
Salida:
- El cebiche.

Ejemplo 1.2:- Algoritmo para expresar en centímetros una cantidad dada en


metros
Entrada:
- La cantidad M de metros
Proceso:
- Cálculo de centímetros : C = M*100
Salida :
La cantidad C de centímetros

Este es un algoritmo escrito en lenguaje natural, pero puede ser convertido en un


programa de computadora, como también puede ser ejecutado por una persona.

3.3.El Pseudocódigo

Pseudocódigo = Pseudo (Supuesto) + Código (Instrucción)

El pseudocódigo es un lenguaje de pseudoprogramación utilizado para escribir


algoritmos computacionales. Siendo un lenguaje de pseudoprogramación, el
pseudocódigo es una imitación de uno o más lenguajes de programación. De esta
manera podemos encontrar pseudocódigos orientados a lenguajes de programación
como Pascal, Java, C++, Python, etc.

El objetivo del pseudocódigo es permitir que el programador se centre en los aspectos


lógicos de la solución, evitando las reglas de sintaxis de los lenguajes de
programación. Por tanto, los pseudocódigos varían de un programador a otro, es
decir, no hay un pseudocódigo estándar.

Ejemplo 1.3:- Expresar en pseudocódigo el algoritmo para la suma de dos números.


1. Inicio
2. Leer X
3. Leer Y
4. Hacer Z = X+Y
5. Escribir Z
6. Fin

Prof. José Elías Yauri Vidalón Algoritmos - Apuntes I - Página 7 de 8


4. Referencias

 Thomas H. Cormen. Algorithms Unlooked. The MIT Press, 2013.

 Thomas H. Cormen, Charles E. Leiserson, and Ronald L. Rivest. Introduction to


Algorithms. The MIT Press, 3 edition, 2009.

Prof. José Elías Yauri Vidalón Algoritmos - Apuntes I - Página 8 de 8

Вам также может понравиться