1. Nombre: Moreno Baltazar Luis Ángel
1
Matrícula: S08007009
Tarea No. 2
_______________________________________________________________________________
INTRODUCCIÓN
E
l trabajo de investigación que a continuación presento es la introducción hacia la
Experiencia Educativa Análisis de Algoritmos, impartida por la Profra LSCA Leyva Picazzo
Fabiola, con la finalidad de retomar los conceptos que ya previamente en semestres
pasados. Aunque para ser francos nosotros los jóvenes se nos llegan a olvidar las cosas, así que
por nuestro propio bien la catedrática nos solicitó que respondiéramos unas preguntas que nos
servirá de apoyo en esta E.E.
¿Qué es Algoritmo?, ¿Por qué analizarlo?, ¿Que es un análisis de algoritmo?, ¿Que es la
eficiencia de un algoritmo? Son las interrogantes que se darán solución y explicación a las mismas,
esta información fue extraída de la maravilla de la internet, aunque es cierto que existe infinidad de
información solo fue recopilada la mejor, a mi criterio. Dentro del mismo contenido se mencionaran
algunos métodos de análisis de algoritmos.
Sin más preámbulos, los dejo con la primera interrogante antes mencionada, la cual
encontré de donde proviene.
1
Generación 2008 Fac. Admón. LSCA
Luis Ángel Moreno Baltazar
2. Historia:
La palabra algoritmo proviene del nombre del matemático
2
llamado Abu Abdullah Muhammad bin Musa al-Khwarizmi (hay muchas
variantes para el nombre al usar el alfabeto latin, tales como Al-
Khorezmi, Al-Khwarizmi, Al-Khawarizmi, Al-Khawaritzmi o Al-
Khowarizmi) que vivió entre los siglos VIII y IX.
Su trabajo consistió en preservar y difundir el conocimiento de la antigua Grecia y de la
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 amplio público. Cabe
destacar cómo señaló las virtudes del sistema decimal indio (en contra de los sistemas
tradicionales árabes) y cómo explicó que, mediante una especificación clara y concisa de cómo
calcular sistemáticamente, se podrían definir algoritmos que fueran usados en dispositivos
mecánicos similares a un ábaco en vez de las manos. También estudió la manera de reducir el
número de operaciones necesarias que formaban el cálculo.
Por esta razón, aunque no haya sido él el inventor del primer algoritmo, merece que este
concepto esté asociado a su nombre. Al-Khorezmi fue sin duda el
primer pensador algorítmico.
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 en 1842. Por ello que es considerada
por muchos como la primera programadora aunque, desde Charles
Babbage, nadie completó su máquina, por lo que el algoritmo nunca se
implementó.
La idea de resolver un problema o de disponer de un algoritmo es bastante antigua, tal es
así, que existía la errada creencia que no había problema que no se pudiera resolver y en base a
ello, el matemático David Hilbert quiso descubrir un algoritmo para los algoritmos. Hoy en dia
gracias a los trabajos de Kurt Gödel, Alonzo Church (calculo lamba), Alan Turing (maquina de
turing), se sabe que dentro del universo de problemas, una pequeña parte es computable, luego
que el objetivo que perseguia David Hilbert no era computable, es lo que se ha denominado como
la computabilidad de los algoritmos.
2
http://docencia.izt.uam.mx/pece/pagina_academica/AA/Docum/alk.html
Luis Ángel Moreno Baltazar
3. ¿QUÉ ES ALGORITMO3?
Existe gran variedad de Definiciones en textos de libros de programación y dentro del
ciberespacio que han sido transcritos tanto sencillas como complejas, de los cuales cito:
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 exacta de la secuencia en que se ha de realizar un conjunto de
actividades tendientes a resolver un determinado tipo de problema o procedimiento.
Conjunto de sentencias / instrucciones en lenguaje nativo, los cuales expresan la
lógica de un programa.
Es un sistema por el cual se llega a una solución, teniendo en cuenta que debe de ser
definido, finito y preciso.
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 determinado a partir de ciertas
reglas definidas.
Descripción precisa de una sucesión de instrucciones que permite llevar a cabo un
trabajo en un número finito de pasos.
Un conjunto de símbolos y procedimientos usados en la realización de un cálculo.
Las definiciones más completas o formales:
Secuencia finita de instrucciones, reglas o pasos que describen de forma precisa las
operaciones de un ordenador debe realizar para llevar a cabo un tarea en un tiempo
más finito. [Donald E. Knuth, 1968]
Descripción de un esquema de comportamiento expresado mediante un reportorio
finito de acciones y de informaciones elementales, identificadas, bien comprendidas y
realizables a priori. Este repertorio se denomica lexico [Pierre Scholl, 1988]
Un algoritmo es 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 esta a un problema en un
tiempo determinado. [Rodolfo Quispe-Otazu, 2004].
3
(del latín, dixit algorithmus). Conjunto finito de instrucciones para llevar a cabo una tarea. Constan de
pasos finitos, no ambiguos y, de ser posible, eficientes.
Luis Ángel Moreno Baltazar
4. ¿POR QUÉ ANALIZAR UN ALGORITMO?
El análisis de algoritmos es de suma importancia ya que usualmente existen varios
algoritmos disponibles para una aplicación particular y quisiéramos conocer cuál es el mejor o más
apropiado.
En este sentido la pregunta clave es: ¿Cuántos recursos (tiempo de ejecución y espacio
en memoria) requiere un algoritmo dado?
Para responder esta pregunta típicamente se siguiente los siguientes pasos:
1. Identificar las características de los datos de entrada y decidir el tipo de análisis a realizar.
2. Identificar las operaciones abstractas.
3. Efectuar el análisis matemático.
Usualmente el análisis de un algoritmo incluye:
Un caso medio y su medida de dispersión (indicación cuantitativa de cuán cercano al caso
promedio esperamos que trabaje nuestro algoritmo).
Un caso pesimista (peor caso).
Un caso optimista (mejor caso).
Luis Ángel Moreno Baltazar
5. ¿QUÉ ES UN ANÁLISIS DE ALGORITMO?
Es una parte importante de la Teoría de complejidad computacional más amplia, que
provee estimaciones teóricas para los recursos que necesita cualquier algoritmo que resuelva un
problema computacional dado. Estas estimaciones resultan ser bastante útiles en la búsqueda de
algoritmos eficientes. El análisis de algoritmos estudia, desde el punto de vista teórico, los
recursos computacionales que necesita la ejecución de un programa de ordenador: su eficiencia.
A la hora de realizar un análisis teórico de algoritmos es corriente calcular su complejidad
4
en un sentido asintótico , es decir, para un tamaño de entrada suficientemente grande. La cota
superior asintótica, y la notación omega y theta se usan con esa finalidad.
La medida exacta (no asintótica) de la eficiencia a veces puede
ser computada pero para ello suele hacer falta aceptar supuestos
acerca de la implementación concreta del algoritmo, llamada modelo de
computación. Un modelo de computación puede definirse en términos
de un ordenador abstracto, como la Máquina de Turing, y/o postulando
que ciertas operaciones se ejecutan en una unidad de tiempo. Por
ejemplo, si al conjunto ordenado al que aplicamos una búsqueda binaria
tiene n elementos, y podemos garantizar que una única búsqueda
binaria puede realizarse en un tiempo unitario, entonces se requieren como mucho log2 N + 1
unidades de tiempo para devolver una respuesta.
Las medidas exactas de eficiencia son útiles para quienes verdaderamente implementan y
usan algoritmos, porque tienen más precisión y así les permite saber cuanto tiempo pueden
suponer que tomará la ejecución. Para algunas personas, como los desarrolladores de
videojuegos, una constante oculta puede significar la diferencia entre éxito y fracaso.
Las estimaciones de tiempo dependen de cómo definamos un paso. Para que el análisis
tenga sentido, debemos garantizar que el tiempo requerido para realizar un paso esté acotado
superiormente por una constante. Hay que mantenerse precavido en este terreno; por ejemplo,
algunos análisis cuentan con que la suma de dos números se hace en un paso. Este supuesto
puede no estar garantizado en ciertos contextos. Si por ejemplo los números involucrados en la
computación pueden ser arbitrariamente grandes, dejamos de poder asumir que la adición
requiere un tiempo constante (usando papel y lápiz, compara el tiempo que necesitas para sumar
dos enteros de 2 dígitos cada uno y el necesario para hacerlo con enteros de 1000 dígitos).
Del idioma griego: ἀσύμπτωτος — asýmptōtos— “aquello que no cae”
4
[http://es.wikipedia.org/wiki/As%C3%ADntota]
Luis Ángel Moreno Baltazar
6. ¿QUÉ ES LA EFICIENCIA DE UN ALGORITMO?
La Eficiencia de un algoritmo es comprobar que dicho análisis debe ser empírico y teórico,
5
en cualquiera de los diferentes métodos de los algoritmos de ordenamiento , los cuales son:
Bubble sort
Selection sort
Insertion sort
Shell sort
Heap sort
Merge sort
Quick sort
¿Por qué estudiar la eficiencia de los algoritmos?
Porque nos sirve para establecer la frontera entre lo factible y lo imposible.
Ejemplo: Algoritmos de ordenación
Observación
El tiempo de ejecución depende del tamaño del conjunto de datos.
Objetivo
Parametrizar el tiempo de ejecución en función del tamaño del conjunto
de datos, intentando buscar una cota superior que nos sirva de garantía.
Tipos de Análisis
• Peor de los Casos: Se corresponde con el peor tiempo. T(n) es el tiempo máximo sobre las
entradas.
• Mejor Caso: Límite inferior en el tiempo. T(n) es el menor tiempo de todas las posibles entradas
• Caso Promedio: Es el tiempo medio esperado sobre todas las posibles entradas de tamaño n.
Se considera una distribución de probabilidad sobre las entradas.
• Análisis Probabilístico: Es el tiempo de ejecución esperado para una entrada aleatoria. Se
expresa tanto el tiempo de ejecución y la probabilidad de obtenerlo.
• Análisis Amortizado: El tiempo que se obtiene para un conjunto de ejecuciones, dividido por el
número de ejecuciones.
5
http://www.slideshare.net/PARKANGEL/Algoritmica_ordenamiento
Luis Ángel Moreno Baltazar
7. CONCLUSIONES
Bueno este trabajo si me costó un poco de trabajo para poder desarrollarlo tal cual se nos
pidió, al igual de comprender algunos conceptos ya que bueno en lo personal no me quedo muy
claro la E.E de algorítmica y vaya que es lo esencial sobre todo en mi carrera. Pero al final
retomando ciertos contenidos que vi en las clases fui reforzando y recordando las funciones
básicas de algorítmica, ya que algoritmo o algorítmica son instrucciones que se escriben para que
puedan ser computados dentro de una programación (Pseudocódigo), también se representan
gráficamente dicha orden con diagramas de flujo. Lo interesante de esta investigación es que al
indagar por la web me encontré con el primer matemático árabe que uso el sistema decimal para
crear pseudocódigos, aunque también de nombre el nombre Ada Byron fue la primera mujer en
crear un algoritmo para un computador.
Ahora bien es importante el análisis de un algoritmo para entregar un trabajo de calidad
gracias también a la ayuda de ingeniería del software entre otros, se debe ser cuidadoso para
ordenar que el computador ejecute la orden que se le designa, ya que bueno las maquinas no
hacen todo el trabajo, es cierto que te facilitan el trabajo, pero si nosotros le damos una instrucción
equivoca por ende el proceso y el producto será erróneo. Solo espero que en el transcurso de esta
E.E veamos claramente los procesos que se deben tomar en cuenta para no cometer errores.
Luis Ángel Moreno Baltazar