Está en la página 1de 19

ESTRUCTURAS DE DATOS

SEMANA 1

Introducción a los algoritmos

Todos los derechos de autor son de la exclusiva propiedad de IACC o de los otorgantes de sus licencias. No está
permitido copiar, reproducir, reeditar, descargar, publicar, emitir, difundir, poner a disposición del público ni 1
ESTE
utilizarDOCUMENTO
los contenidos paraCONTIENE LAdeSEMANA
fines comerciales 1
ninguna clase.
2
ESTE DOCUMENTO CONTIENE LA SEMANA 1
ÍNDICE

OBJETIVOS ESPECÍFICOS ...................................................................................................................... 4


INTRODUCCIÓN ................................................................................................................................... 4
1. INTRODUCCIÓN A LOS ALGORITMOS .......................................................................................... 5
1.1. ¿QUÉ ES UN ALGORITMO? .................................................................................................. 5
1.2. CARACTERÍSTICAS DE UN ALGORITMO ............................................................................... 5
1.3. CLASIFICACIÓN DE ALGORITMOS ........................................................................................ 7
1.3.1. COMPUTACIONAL ....................................................................................................... 7
1.3.2. NO COMPUTACIONAL ................................................................................................. 8
1.3.3. CUALITATIVO ............................................................................................................... 9
1.3.4. CUANTITATIVO ............................................................................................................ 9
2. LOS ALGORITMOS Y LA COMPUTACIÓN.................................................................................... 10
2.1. RELACIÓN MATEMÁTICA ................................................................................................... 10
2.2. COMPLEJIDAD DE LOS ALGORITMOS ................................................................................ 11
2.2.1. DEFINICIÓN................................................................................................................ 11
2.2.2. TIPOS ......................................................................................................................... 11
3. ESTRUCTURA DE DATOS Y DISEÑO DE ALGORITMOS ............................................................... 14
3.1. TÉCNICAS DE DISEÑO DE ALGORITMOS ............................................................................ 15
3.1.1. DIVIDE Y VENCERÁS ................................................................................................... 15
3.1.2. MÉTODO VORAZ........................................................................................................ 15
3.1.3. TÉCNICA TOP-DOWN ................................................................................................. 16
COMENTARIO FINAL.......................................................................................................................... 17
REFERENCIAS ..................................................................................................................................... 18

3
ESTE DOCUMENTO CONTIENE LA SEMANA 1
INTRODUCCIÓN A LOS ALGORITMOS

OBJETIVOS ESPECÍFICOS

 Comprender las características, clasificaciones y orden de magnitud de los algoritmos.

 Distinguir las técnicas para el diseño de algoritmos.

INTRODUCCIÓN
Cuando se presenta un problema en el entorno social, familiar o laboral siempre se buscan las
mejores opciones para su solución y, dependiendo del problema, también se busca resolverlo en
el menor tiempo posible.

El cerebro humano está diseñado para responder ante situaciones de manera automática y
también para analizar distintos caminos que permitan enfrentar esas situaciones. En principio se
busca entender la situación y de acuerdo a esa información recabada se da una respuesta. Todo
esto se hace siguiendo pasos o instrucciones.

En esta semana se estudiarán los algoritmos, sus tipos y aplicaciones, así como también los
elementos necesarios para la resolución de un problema haciendo uso de estos.

4
ESTE DOCUMENTO CONTIENE LA SEMANA 1
1. INTRODUCCIÓN A LOS ALGORITMOS
En la vida cotidiana se pueden encontrar procesos que quizás pasen desapercibidos, pero que en
realidad siguen patrones para llevarse a cabo con éxito. Desde la preparación de un plato de
comida hasta en un sistema computacional pueden encontrarse lineamientos para su ejecución y
resulta difícil imaginar que correspondan tanto a pautas establecidas generadas en la mente del
ser humano como a programas desarrollados en una máquina como un computador. A estos pasos
se les denomina algoritmos y se encuentran en toda actividad realizada consciente o
inconscientemente de la vida diaria.

1.1. ¿QUÉ ES UN ALGORITMO?


Se conoce como algoritmo a la serie de pasos o instrucciones a seguir para lograr solucionar un
problema dado. Estos pasos van en secuencia y deben cumplir una metodología determinada.

Con el uso de algoritmos se pueden describir de manera ordenada las instrucciones a seguir para
ejecutar un proceso y solucionar un problema, que puede ir desde un problema sencillo o
cotidiano hasta uno que sea más complejo y requiera un método sofisticado de resolución.
Muchas veces se realizan actividades en las cuales se emplean algoritmos y no se está consciente
de ello, como, por ejemplo, preparar una torta o realizar la limpieza del domicilio.

Para reforzar el concepto de un algoritmo se recomienda


revisar el siguiente video:

¿Qué es un algoritmo?

1.2. CARACTERÍSTICAS DE UN ALGORITMO


 Debe contener tres partes que son fundamentales: entrada, proceso y su respectiva salida.

 El algoritmo debe tener un fin y contener un número de pasos finito y realizable, que no
conlleve tiempos de ejecución infinitos.

 Debe tener pasos definidos y no poseer ambigüedad, presentando reglas para una ejecución
ceñida.

5
ESTE DOCUMENTO CONTIENE LA SEMANA 1
 Puede tener desde cero a muchas entradas, pero debe tener al menos una salida luego de su
ejecución.

 Así como debe poseer una cantidad exacta de pasos, debe estar pensado para un lapso de
tiempo definido, permitiendo suponer un tiempo de ejecución, optimizando los recursos
implementados para realizar la tarea.

 Debe poder ser interpretado de manera fácil y legible.

LA LINTERNA NO FUNCIONA

¿TIENE
COLOCAR BATERÍAS
BATERÍAS? NO

¿AMPOLLETA
COMPRAR AMPOLLETA
QUEMADA?

NO

COMPRAR NUEVA LINTERNA

6
ESTE DOCUMENTO CONTIENE LA SEMANA 1
1.3. CLASIFICACIÓN DE ALGORITMOS
La clasificación de un algoritmo viene dada según cuál será su aplicación y los elementos que se
reciben como entrada para realizar los procesos dentro del mismo. Por ejemplo, si se desea
realizar un algoritmo para efectuar un programa que calcule las notas finales de un alumno, se
puede decir que su clasificación será computacional.

1.3.1. COMPUTACIONAL

Los algoritmos computacionales son los que se utilizan para que un computador ejecute ciertas
actividades, obteniéndose resultados a partir de estas. Utilizando un computador se optimiza el
tiempo en que se puede solucionar un problema dado, debido a que se puede obtener
rápidamente una respuesta gracias a su velocidad de procesamiento y, a su vez, si se implementa
en forma correcta el algoritmo y sus reglas, puede ser mucho más confiable la solución.

Algunos ejemplos de algoritmos computacionales aplicados pueden ser el envío de correos


electrónicos o una aplicación procesadora de números positivos y negativos.

ABRIR APLICACIÓN

INGRESAR NÚMERO (x)

¿Es (x) ≥ 0? IMPRIMIR “NÚMERO NEGATIVO”


NO

IMPRIMIR “NÚMERO POSITIVO”

7
ESTE DOCUMENTO CONTIENE LA SEMANA 1
1.3.2. NO COMPUTACIONAL

Un algoritmo no computacional es aquel que se ejecuta sin la ayuda de un computador, aunque de


igual manera son instrucciones y deben seguirse reglas para obtener salidas.

Un ejemplo podría ser realizar una llamada telefónica:

LEVANTAR LA BOCINA

¿TIENE TONO? REVISAR TELÉFONO


NO

MARCAR NÚMERO

¿CONTESTAN?
REINTENTAR LLAMADA
NO

HABLAR

COLGAR TELÉFONO

8
ESTE DOCUMENTO CONTIENE LA SEMANA 1
1.3.3. CUALITATIVO

Los algoritmos cualitativos son aquellos donde no intervienen cálculos o aquellos en cuyos pasos
no se involucra un cálculo numérico. Por ejemplo, las instrucciones para inflar un globo o para
armar un rompecabezas.

ESCOGER GLOBO

INFLAR GLOBO

¿SE
MANTIENE CAMBIAR GLOBO
INFLADO? NO DEFECTUOSO

SELLAR Y DECORAR CON


GLOBO

1.3.4. CUANTITATIVO

Los algoritmos cuantitativos son aquellos cuyos pasos dentro del proceso de ejecución están
definidos a través del uso de cálculos numéricos, retornando una salida óptima y confiable.

Un claro ejemplo de este tipo de algoritmo es calcular la suma de dos números.

INGRESA VALOR DE (A)

INGRESA VALOR DE (B)

C = (A) + (B)

IMPRIME VALOR DE C

9
ESTE DOCUMENTO CONTIENE LA SEMANA 1
2. LOS ALGORITMOS Y LA COMPUTACIÓN
Desde que se conocen los algoritmos hasta la actualidad, se ha determinado que la ejecución de
procesos siguiendo lineamientos y reglas optmiza el tiempo de respuesta y los recursos utilizados
para ello. Es por esta razón que se hacen necesarios dentro de cada una de las pequeñas y grandes
aplicaciones informáticas o sistemas automatizados a través del uso de un computador.

Dentro de una organización se pueden fijar escenarios y la acción a llevar a cabo para resolver
cada una de las situaciones que se puedan dar al presentarse un problema específico y con la
ayuda de las aplicaciones destinadas a tal fin se pueden resolver, e incluso preveer, situaciones
fuera de lo normal, como lo es un sistema de alarma contra incendio o un antivirus computacional.

2.1. RELACIÓN MATEMÁTICA


El uso de los algoritmos en la matemática puede ser vital para la resolución de problemas y de
cálculos que siguen siempre un mismo lineamiento y que deben ser resueltos a través del uso de
fórmulas ya establecidas, o simplemente cálculos que están destinados a ser resueltos siempre de
la misma manera.

Un ejemplo de un algoritmo matemático es el algoritmo de Euclides, que se utiliza para encontrar


el máximo común divisor de dos números. Este algoritmo fue establecido en la Antigüedad y sufrió
una ligera modificación, por lo que hoy se conoce como algoritmo de Euclides extendido, que
además de entregar el mismo resultado del original permite una nueva salida matemática que
puede ser utilizada en la informática, álgebra o alguna ciencia que determine eficacia en su uso.

INICIO

A, B, MCD

A, B

F
A! = B MCD = A MCD FIN

A>B
V F
A=A-B B=B-A

10
ESTE DOCUMENTO CONTIENE LA SEMANA 1
2.2. COMPLEJIDAD DE LOS ALGORITMOS

2.2.1. DEFINICIÓN

La complejidad de un algoritmo permite determinar la eficiencia que se obtendrá al ser ejecutado.


Este concepto también se conoce como costo y está representado por la cantidad de recursos que
se necesitan para ejecutar las instrucciones que den paso a la solución de un problema dado
(recursos, tiempo o memoria) y que ayudarán al final a determinar cuán eficiente es dicho
algoritmo; además, la medida de la complejidad y su eficiencia van de la mano con el tamaño del
problema, por lo que se podría decir que mientras más grande sea el problema más complejo
puede ser un algoritmo.

La eficiencia del algoritmo va a depender de los datos de entrada y de su tamaño, y mientras


mejor organizada esté la data, mejor será su comportamiento.

2.2.2. TIPOS
La complejidad se representa con la letra “O”, que no se considera un número, sino una función
que permite calcular la complejidad de acuerdo al crecimiento o cantidad de iteraciones
realizadas.

Tipo de logaritmo Notación complejidad


Log O(log n)
Lineal O(n)
Cuadrático O(n)²
Exponencial O(c)ⁿ donde c debe ser mayor a 1

A. LOG

Son aquellos algoritmos en los cuales el tiempo de ejecución va aumentando según un criterio
logarítmico y esto es independiente del valor de su base siempre y cuando esta sea mayor a 1. En
algunos casos no se menciona la base debido a que carece de importancia. Su notación es O(log
n).

El mejor ejemplo de un algoritmo con complejidad O(log n) es el de búsqueda binaria. Para esto se
debe tener como entrada un conjunto de elementos ordenados, pues de esta manera el algoritmo
funciona correctamente.

11
ESTE DOCUMENTO CONTIENE LA SEMANA 1
Fuente: https://goo.gl/td9tdi

B. LINEAL

Este tipo de complejidad en un algoritmo se presenta de una manera muy simple debido a que su
ejecución depende de una constante, por lo cual sus bucles son terminados a través de
comparaciones internas con dicho valor. Es el más usado hasta ahora. Su notación de acuerdo al
tiempo de ejecución o crecimiento es O(n). En este tipo de algoritmo se puede observar que la
constante va desde 1 hasta n.

Ejemplo 1:

Calcular el área de un rectángulo. Tipo O(1):

Inicio
leer(base);
leer(altura);
a ← base * altura;
escribir(area);
Fin.

12
ESTE DOCUMENTO CONTIENE LA SEMANA 1
Ejemplo 2:

Calcular el máximo de n números x1, …, xn. Tipo O(n):

max ← x1
for i = 2 to n {
if (xi > max)
max ← xi
}

C. CUADRÁTICO

Es aquel algoritmo donde aparecen bucles o ciclos anidados doblemente. Si el valor de n se


duplica, aumenta 4 veces más su ejecución. En este tipo de algoritmos se enumeran todas las
parejas posibles conformadas en un conjunto. Su comportamiento viene dado por una función de
polinomio, por lo que se dificulta obtener un comportamiento calculado de forma sencilla.

Ejemplo:

Dado un conjunto de puntos en un plano (x1, y1),…, (xn, yn), encuentre la pareja de puntos más
cercana. Tipo O(n)²:

min ← (x1 – x2)² + (y1 – y2)²


for i = 1 to n {
for j = i+1 to n {
d ← (xi – xj) ²+ (xi – xj)²
if (d < min)
min ← d
}
}

D. EXPONENCIAL

Estos algoritmos no son muy utilizados debido a su alto grado de consumo de recursos y su
elevado tiempo de ejecución. Se pueden presentar en casos donde exista recursividad con dos o
más llamadas internamente. Se debe evitar que una función recursiva se llame a sí misma y estas
se encadenen. Un ejemplo de un algoritmo exponencial de tipo O(2)ⁿ es la factorización de un
número.

La variable número contiene el número a factorizar.

13
ESTE DOCUMENTO CONTIENE LA SEMANA 1
x←2
Lista ← array()
Mientras x < (numero+1) y (numero <> 1) Lista contendrá los números primos
buscados.
Si (x es primo) y (numero es divisible por x)
Lista ← x Se agrega x a la lista de números
primos.
numero ← numero/x
Sino
x ← x+1
FinSi
FinMientras
Retorna Lista

3. ESTRUCTURA DE DATOS Y DISEÑO DE ALGORITMOS


Las estructuras de datos representan la forma en que se almacena la información dentro de un
programa y su correcta distribución puede llegar a ser fundamental para la resolución de un
problema de manera óptima, simplificando los pasos para su solución. Se tienen dos tipos de
estructuras de datos: estáticas y dinámicas; las estáticas poseen un tamaño fijo en la memoria,
mientras que las dinámicas pueden ser de tamaño variable.

Si se tienen bien claras las estructuras de datos que se manejan y estas se mantienen organizadas,
esto se puede considerar un gran paso a la hora de diseñar un algoritmo, pues ayuda a una mejor
comprensión del problema, se aprovechan mejor los recursos de tiempo y memoria, y se obtiene
un algoritmo más eficiente, pues se pueden controlar y prevenir efectivamente los escenarios y
errores que se puedan presentar. Mientras más clara se tenga la información de entrada, mejor
será su procesamiento y más factible y confiable su salida.

Las estructuras de datos definen cómo están estos organizados y


almacenados, es decir, representan la parte estática. Por otro
lado, los algoritmos definen cómo se manipularán dichos datos, o
sea, representan la parte dinámica.

14
ESTE DOCUMENTO CONTIENE LA SEMANA 1
3.1. TÉCNICAS DE DISEÑO DE ALGORITMOS

3.1.1. DIVIDE Y VENCERÁS

La técnica de divide y vencerás se aplica cuando se tiene un problema muy complejo y la mejor
manera de resolverlo es dividirlo en pequeños subproblemas y así buscar resolverlos uno a uno.
Cuando ya se tengan todos resueltos se juntan las soluciones como un todo.

Primeramente, se divide el problema en n subproblemas, todos de un mismo tipo y de forma


equilibrada, pero siendo cada uno de menor tamaño. Para esto se dice que si el problema es de
tamaño m, entonces 1 ≤ n ≤ m, donde cada subproblema será de tamaño mn y, a su vez, 0 ≤ mn <
m.

Luego, se resuelve cada uno de manera independiente, pudiendo hacerse de forma recursiva si es
necesario. Al dividir m en problemas de tamaño n, se garantiza que se resolverá el caso base. Para
finalizar se combinan las soluciones obtenidas y se construye la solución general que da
finalmente un algoritmo fuerte y eficaz.

De manera general, el método divide y vencerás se representa de la


siguiente manera:
divyven(m)
if (m es manejable) {
return resuelve_directamente(m)
} else
{
divide m en { m1, .., .., mn }
for i=1 to n
yi ← divyven(mi) z ← combinar(z1.., .. , zn)
return z;
}

3.1.2. MÉTODO VORAZ

También conocido como método devorador, se refiere a la búsqueda de un valor dentro de una
función, bien sea un máximo o un mínimo, pero siempre el óptimo. La solución que ofrece este
método es a través de una secuencia de decisiones irreversibles y que evalúa un elemento una
sola vez, el cual es descartado o seleccionado para que forme parte de la solución al problema

15
ESTE DOCUMENTO CONTIENE LA SEMANA 1
presentado si lo amerita. Si el elemento es descartado, no formará parte de la solución, no se
considerará.

Se dice que los datos son tratados de manera voraz pues se reciben de entrada y estos son
estudiados para ser seleccionados o desechados, por lo cual no siempre se logrará solucionar un
problema a través de este método. De no encontrar una solución, se debe recurrir a la
implementación de otra técnica. A pesar de esta desventaja, es muy utilizado debido a su rapidez
en encontrar una solución si el problema está dentro de su alcance, lo que implica un bajo costo
de recursos y tiempo.

De manera general, el método voraz se desarrolla de la siguiente


forma:

voraz(C:conjunto):conjunto
{ C es el conjunto de todos los candidatos }
S ← vacio
{ S es el conjunto de soluciones}
mientras C <> vacío y no solución(S) hacer
x ← seleccionar (C)
C ← C- {x}
si es factible (S U {x}) entonces
S ← S U {x}
si solución(S)
entonces devolver S
si no devolver no existe solución

3.1.3. TÉCNICA TOP-DOWN

La técnica top-down (arriba-abajo) consiste en determinar los niveles de complejidad que


permitan solucionar un problema, ordenándolos de mayor a menor. Establece una jerarquía entre
las etapas de solución, relacionándolas a través de su entrada y salida, de manera que al culminar
un nivel su salida sea la entrada del siguiente nivel.

Al igual que el método divide y vencerás, con top-down el problema base se divide en
subproblemas para ser atacados uno a uno, de manera más sencilla. Es considerada una técnica
fundamental para la programación estructurada, pues se puede comprender mejor un programa
que ha quedado en forma de bloques refinados.

16
ESTE DOCUMENTO CONTIENE LA SEMANA 1
→ subproblema1 subpro1
→ subproblema1 → subproblema1 subpro2
→ subproblema1 subpro3

Problema m → subproblema2 → subproblema2 subpro1


→ subproblema3 subpro1
→ subproblema3
→ subproblema3 subpro2
→ subprobleman → subprobleman subpron

COMENTARIO FINAL
A través de los algoritmos se facilita la comprensión de un problema, permitiendo elaborar
programas más estructurados y entendibles para cualquier persona que no haya participado en el
proceso.

Haciendo uso de los distintos métodos y técnicas para encontrar una solución a un problema, se
puede generar una solución que será óptima, dependiendo del costo y del tiempo a emplear para
ello. Si se tiene un enfoque claro de lo que se busca junto con una buena organización de los datos
de entrada, el procesamiento de dichos datos será claro y la salida que se busca retornará con la
mejor solución.

Siempre que se plantee un problema dentro de una empresa, la mejor recomendación es


primeramente recolectar la data y definir su estructura y almacenamiento, y no comenzar a crear
un algoritmo si no se ha realizado un levantamiento completo de la información. Al ser más
organizado con la data y especificar sin ambigüedades la salida buscada, el algoritmo será solo una
receta fácil para el desarrollo del trabajo y el procesamiento de la información.

17
ESTE DOCUMENTO CONTIENE LA SEMANA 1
REFERENCIAS
Aho, A.; Ullman, J. y Hopcroft, J. (1998). Estructuras de datos y algoritmos. 2.ª edición. México: S.

A. Alhambra Mexicana.

Caselli, H. (2009). Manual de algoritmos y estructura de datos. 7.ª edición. Recuperado de:

http://biblioteca.uns.edu.pe/saladocentes/archivoz/publicacionez/manual_algoritmos_y_

estructura_de_datos.pdf

Knuth, D. (2002). Algoritmos fundamentales. Volumen. 1. España: Editorial Reverté S. A.

PARA REFERENCIAR ESTE DOCUMENTO, CONSIDERE:

IACC (2016). Introducción a los algoritmos. Estructuras de Datos. Semana 1.

18
ESTE DOCUMENTO CONTIENE LA SEMANA 1
19
ESTE DOCUMENTO CONTIENE LA SEMANA 1

También podría gustarte