Está en la página 1de 7

WORK PAPER # 1

PROGRAMA DE CONTROL DE CALIDAD

No. DE PROCEDIMIENTO: No. DE HOJAS

ELABORÓ: Ing. Janeth Giovanna Alanez Villegas CÓDIGO:

TÍTULO DEL WORK PAPER: Algoritmia

DPTO.: Facultad de Ciencias y Tecnología

DESTINADO A:

DOCENTES ALUMNOS X ADMINIST. OTROS

OBSERVACIONES: Asignatura Análisis y Complejidad de Algoritmos, Unidad I, Tema 1

FECHA DE DIFUSIÓN:

FECHA DE ENTREGA:
UNIDAD I. ALGORITMIA

ALGORITMO.

La palabra Algoritmo procede del vocablo "algoritm", que, a su vez, es la traducción latina del nombre árabe de Al-
Khwarizmi, matemático árabe del siglo IX (Abu Ja'far Muhammad ibn Musa Al-Khwarizmi nació en Bagdad en 780 y murió
en 850) quien en base a un estudio de geometría y trigonometría puedo establecer por las matemáticas diversos procesos
secuenciales lógicos y en un orden mínimamente establecido para dar soluciones numéricas, debido a esto es considerado
precursor del movimiento algorítmico de las ciencias exactas.

1. Algoritmo es una ciencia lógica de pasos finitos ponderables, los cuales se ejecutan para resolver de la mejor forma
problemas específicos.
2. Entonces =>Un algoritmo es una receta para lograr un fin determinado.

Los algoritmos son parte de la vida misma, se presentan en la vida diaria como el preparar una torta hasta los más
complejos dilemas diarios, la intelectualidad del hombre es en sí mismo un algoritmo ya que desde niño soluciona
problemas de muy elevada tridimensionalidad.

Por lo tanto podemos entender como algoritmo a una sucesión finita de pasos, que comienza con un dato inicial
arbitrario (comprendido entre un conjunto posible de datos iniciales) y está destinado a obtener un resultado totalmente
determinado por dicho dato inicial. El cálculo o proceso desarrollado se denomina Cálculo Algorítmico o bien Proceso
Algorítmico.

ALGORITMIA.

La algoritmia estudia las propiedades de los algoritmos y nos ayuda a elegir la solución más adecuada en cada situación.
Es el tratamiento sistemático de técnicas fundamentales para el diseño y análisis de algoritmos eficientes. En muchos
casos, una buena elección ahorra tiempo y eso implica ahorro de dinero.
En algunos casos, una buena elección marca la diferencia entre poder resolver un problema y no poder hacerlo.

CARACTERÍSTICAS DE UN ALGORITMO. Para que un algoritmo cumpla correctamente con su definición y otorgue los
resultados esperados debe cumplir con las siguientes características:

a) Precisión: Todo algoritmo debe ser preciso y exacto con operaciones y procesos exactos que indiquen el orden de la
realización de cada paso.

b) Definición exacta: todo algoritmo debe estar bien definido en contexto, lo que significa de que si dos personas
distintas ejecuten el mismo algoritmo, este debe devolver el mismo resultado.

c) Finitud: todo algoritmo debe ser finito, es decir debe terminar en algún momento.
PROPIEDADES DE LOS ALGORITMOS. Los algoritmos deben satisfacer las siguientes propiedades.

1. Entrada: todo algoritmo tendrá 0 o más entradas.

2. Salida: todo algoritmo debe tener por lo menos 1 salida.

3. Efectividad: todas las operaciones que realzan un algoritmo deber ser lo suficientemente factible y básicas
como para que el hombre pueda ejecutarlas manualmente.

FASES EN EL DESARROLLO DE UN ALGORITMO. Se pueden identificar las siguientes etapas de una manera más o
menos general:
1. Análisis del problema. Se refiere a la etapa en la cual el programador toma conocimiento del problema antes de
proceder a desarrollar una solución. (Necesitamos entender bien el problema para poder proponer la solución). Un análisis
inadecuado puede conducir a una mala interpretación del enunciado del problema. Los errores en esta etapa son, con
frecuencia, difíciles de detectar y consumen mucho tiempo al arrastrarse hacia fases posteriores.

2. Desarrollo de la solución. Una vez definido el problema y teniendo cierta idea de cómo resolverlo, se puede utilizar
alguna de las técnicas de diseño de algoritmos. Muchas veces, debido a la complejidad del problema, se puede ir
describiendo la solución como una secuencia de pasos bastante generales (esto puede hacerse en lenguaje natural), que
cada vez se van detallando o refinando más hasta obtener una solución. En esta etapa también se empiezan a tomar
decisiones sobre las estructuras de datos que se utilizarán para representar los datos del problema.

3. Codificación de la solución. Considerando que la solución algorítmica ha sido bien definida, este proceso resulta casi
completamente mecánico. Utilizando las reglas sintácticas y semánticas de un lenguaje de programación, el algoritmo se
escribe teniendo en cuenta también ciertos criterios de estilo o estructura.

4. Verificación y análisis de la solución. Con la verificación se trata de comprobar que el algoritmo codificado en la etapa
anterior es correcto; es decir, produce unos resultados correctos para todos los conjuntos posibles de datos válidos. Para
algoritmos sencillos, donde el conjunto de datos sea pequeño, existe la posibilidad de realizar pruebas (donde se
comprueba el comportamiento del algoritmo para ciertos conjuntos significativos de los datos). No obstante, aun cuando las
pruebas muestren la presencia de errores, nunca pueden demostrar la ausencia de éstos (ya que para ello sería preciso
examinar el resultado que produce el algoritmo para todos los conjuntos posibles de datos válidos).

Es bastante importante diseñar soluciones algorítmicas que resulten eficientes respecto a los recursos consumidos
(generalmente, el tiempo de ejecución y la memoria). Para ello, se hace necesario llevar a cabo un análisis de la
complejidad sobre los algoritmos codificados, por si fuera posible mejorar la solución propuesta.
2. HIPÓTESIS BÁSICA DE LA TEORÍA DE ALGORITMOS

DEFINICIÓN. La Teoría de Algoritmos es la parte de la Matemática en la que se desarrolla el estudio de las propiedades de
los algoritmos. En realidad, los fenómenos que dan origen al concepto de algoritmo se han observado y estudiado a lo largo
de la historia.

El concepto de función calculable fue precisado por primera vez en 1936, por A. Church, dando también el primer ejemplo
de función no calculable, e identificando el concepto de función con la recursión general.

Los algoritmos se refieren siempre a objetos constructivos que a su vez dan origen a otros objetos constructivos a lo largo
del proceso algorítmico. Cuando aplicamos la Teoría de Algoritmos a objetos no constructivos se hace necesario nombrar o
numerar a éstos como objetos constructivos, por lo que la Teoría de la Numeración se convierte en un interesante apartado
de la Teoría de Algoritmos.

ALGORITMIA. El estudio de los algoritmos incluye el de diferentes e importantes áreas de investigación y docencia, y se
suele llamar Algorítmica. Podemos definir a la Algoritmia como:

• Ciencia que estudia técnicas para construir algoritmos eficientes y técnicas para medir la eficacia de los algoritmos.

• Cuyo objetivo es: Dado un problema concreto encontrar la mejor forma de resolverlo.

Para algunos autores se tiene que:

ALGORITMIA = ANÁLISIS + DISEÑO

• Análisis de algoritmos: Estudio de los recursos que necesita la ejecución de un algoritmo. No confundir con análisis
de un problema.
• Diseño de algoritmos: Técnicas generales para la construcción de algoritmos. Por ejemplo, divide y vencerás: dado
un problema, divídelo, resuelve los sub problemas y luego junta las soluciones.

Los algoritmos deben expresarse de forma precisa, clara, e independientes de un lenguaje de programación en concreto
IMPORTANCIA DE LA TEORÍA DE ALGORITMOS.

Algunos ejemplos del uso de los algoritmos en diferentes áreas, serían las siguientes:

A. Algoritmos en la vida cotidiana. En la vida cotidiana usamos algoritmos en muchos lugares, claro que en estos no se
usa mucho la teoría de algoritmos para hacerlos más eficientes, pero siguen siendo importantes gracias a su cotidianeidad,
algunos ejemplos pueden ser:

• Al seguir una receta de cocina, se siguen un cierto algoritmo para poder cocinar el platillo deseado.
• Al querer llegar a un lugar en automóvil, usamos un algoritmo, aunque de forma empírica, de tal forma que nos
permita llegar al destino, buscando la ruta más corta.

B. Algoritmos en matemáticas. En matemáticas existen una gran cantidad de ejemplos de algoritmos, por mencionar
algunos tenemos los siguientes:

• Generación de números primos: Comúnmente se usan algoritmos sencillos como la Criba de Eratóstenes, pero con
conocimientos matemáticos, como teoría de números y álgebra, así como de teoría de algoritmos, cada vez estos
métodos se han vuelto más eficientes.
• Cálculo del máximo común divisor: Para esto existen algoritmos intuitivos sacados de conocimientos básicos de
álgebra, pero con algunos conocimientos de teoría de números y teoría de algoritmos, se han encontrado métodos
muy eficientes de calcular el máximo común divisor. Como una muestra de ejemplos sencillos de algoritmos
matemáticos, solo se enumeran los anteriores, aunque podrían enumerarse muchos más, y de complejidad mayor.

C. Algoritmos en la Industria. La aplicación de los algoritmos en la industria varían del problema que se desee abordar.
Para este rubro se mencionarán 2 ejemplos aplicados.

• “Optimización de los diámetros de las tuberías de una red de distribución de agua mediante el algoritmo de recocido
simulado”. El problema en general consiste en diseñar y colocar tuberías para conducir agua, desde los puntos fuentes
hasta los demandantes, satisfaciendo sus requerimientos en cuanto a gasto y presión, y que el costo de construcción
de la red sea mínimo. Para solucionar este problema se usó la teoría de algoritmos mediante la aplicación y simulación
de un algoritmo heurístico denominado RS (Kirkpatrick et al. 1983).
• Un ejemplo general, es el uso de algoritmos diversos en los estándares de institutos como el IEEE. Con una
investigación más profunda, se podrían encontrar muchos más ejemplos de proyectos reales, en donde interviene
directamente la teoría de algoritmos. Además pueden existir problemas donde se aplique indirectamente la teoría de
algoritmos, por ejemplo, ya teniendo un proceso en la industria, mejorarlo aplicando técnicas de optimización como
puede ser la programación dinámica, o alguna otra.
D. Algoritmos aplicados en la computación. Algunos algoritmos matemáticos, y algunos que han surgido después de
varias investigaciones en el campo de teoría de números, se han aplicado directamente en la computación, sin formar parte
directa del proceso de desarrollo de software. Algunos ejemplos, pueden ser los mencionados en la introducción, así como
algunos otros, entre los que se pueden enumerar los siguientes:

• Búsqueda de números primos muy grandes. Un ejemplo de la aplicación directa de los algoritmos y las mejoras
logradas con matemáticas y teoría de algoritmos, se puede ver en la búsqueda de los números primos más grandes,
conocidos hasta el momento.
La importancia de la teoría de algoritmos en aspectos de computación que no están relacionados directamente con un
proceso de desarrollo de software es muy diversa. Así también se pueden mencionar áreas del conocimiento diferentes, en
cualquier área donde se requiera que un proceso, método o algoritmos sea más eficiente se abre una puerta para la
aplicación de la teoría de algoritmos.

Un ejemplo claro de el uso de mejores algoritmos y la preocupación en la eficiencia de los mismos los podemos encontrar
en programas matemáticos y la eficiencia de los algoritmos es esencial. En general en el software en donde implique
simulaciones y cálculos matemáticos, la teoría de algoritmos es una parte clave de su diseño. Otro tipo de software en
donde la teoría de algoritmos ha tenido una gran aplicación es en lo juegos, ya que usan una gran cantidad de algoritmos
para las simulaciones, las búsquedas de caminos, la inteligencia artificial de los personajes, el mejoramiento de los motores
gráficos, etc.

3.CLASIFICACIÓN DE LOS ALGORITMOS

3.1. Tipos de Algoritmos. A través de los años los tipos de algoritmos que se podrían tener son:

Década 30: Problemas Computables y No Computables

Década 50: Complejidad de los problemas computables (búsqueda de algoritmos más eficaces)

Década 70: Clasificación de los problemas computables: P y NP

Otro tipos de Algoritmos puede ser:


a) Algoritmos Programables. Son todos aquellos algoritmos que dan solución a problemas reales con la utilización
de ciencias exactas, conocimiento científico y ante todo cálculos numéricos, se considera dentro de estos
algoritmos todos aquellos con base matemáticas solubles a través de procesos del mismo tipo. Ejemplo algoritmos
interactivos numéricos y algoritmos computacionales.
b) Algoritmos no Programables. Son aquellos algoritmos que utilizan la lógica intuitiva del hombre, es decir se
soluciona haciendo uso de elementos diarios para problemas comunes se considera intuitivos, pues los hombres
los desarrollan sin darse cuenta, y hasta inclusive son parte de su personalidad y formas de afrontar los
problemas. Ejemplo cruzar la calles, y leer un libro, etc. Dentro de los algoritmos programables se manejan una
terminología que es necesario conocerla para él domino de la programación.
3.2. Clasificación de Algoritmos. Los Algoritmos se pueden clasificar en:

• Algoritmo determinista: en cada paso del algoritmo se determina de forma única el siguiente paso.
Inicio
Leer a, b y c
Suma = a + b + c;
Prom = suma / 3
Escribir “El promedio es”, + prom

• Algoritmo no determinista: deben decidir en cada paso de la ejecución entre varias alternativas y agotarlas
todas antes de encontrar la solución.

Todo algoritmo tiene una serie de características, entre otras que requiere una serie de recursos, algo que es
fundamental considerar a la hora de implementarlos en una máquina. Estos recursos son principalmente:
 El tiempo: período transcurrido entre el inicio y la finalización del algoritmo.
 La memoria: la cantidad (la medida varía según la máquina) que necesita el algoritmo para su ejecución.
Obviamente, la capacidad y el diseño de la máquina pueden afectar al diseño del algoritmo.
En general, la mayoría de los problemas tienen un parámetro de entrada que es el número de datos que hay
que tratar, esto es, N. La cantidad de recursos del algoritmo es tratada como una función de N. De esta
manera puede establecerse un tiempo de ejecución del algoritmo que suele ser proporcional a una de las
siguientes funciones:
a) 1: Tiempo de ejecución constante. Significa que la mayoría de las instrucciones se ejecutan una vez o muy
pocas.
b) logN: Tiempo de ejecución logarítmico. Se puede considerar como una gran constante. La base del
logaritmo (en informática la más común es la base 2) cambia la constante, pero no demasiado. El
programa es más lento cuanto más crezca N, pero es inapreciable, pues logN no se duplica hasta que N
llegue a N2.
c) N: Tiempo de ejecución lineal. Un caso en el que N valga 40, tardará el doble que otro en que N valga 20.
Un ejemplo sería un algoritmo que lee N números enteros y devuelve la media aritmética.
d) N·logN: El tiempo de ejecución es N·logN. Es común encontrarlo en algoritmos como Quick Sort y otros
del estilo divide y vencerás. Si N se duplica, el tiempo de ejecución es ligeramente mayor del doble.
e) N2: Tiempo de ejecución cuadrático. Suele ser habitual cuando se tratan pares de elementos de datos,
como por ejemplo un bucle anidado doble. Si N se duplica, el tiempo de ejecución aumenta cuatro veces.
El peor caso de entrada del algoritmo Quick Sort se ejecuta en este tiempo.
f) N3: Tiempo de ejecución cúbico. Como ejemplo se puede dar el de un bucle anidado triple. Si N se
duplica, el tiempo de ejecución se multiplica por ocho. 2N : Tiempo de ejecución exponencial. No suelen
ser muy útiles en la práctica por el elevadísimo tiempo de ejecución. El problema de la mochila resuelto
por un algoritmo de fuerza bruta -simple vuelta atrás- es un ejemplo. Si N se duplica, el tiempo de
ejecución se eleva al cuadrado.
 Algoritmos polinomiales: aquellos que son proporcionales a Nk. Son en general factibles.
 Algoritmos exponenciales: aquellos que son proporcionales a kN. En general son infactibles
salvo un tamaño de entrada muy reducido.
3.3. Clasificación de Problemas. Los problemas matemáticos se pueden dividir en primera instancia en dos grupos:

 Problemas indecidibles: aquellos que no se pueden resolver mediante un algoritmo.


 Problemas decidibles: aquellos que cuentan al menos con un algoritmo para su cómputo.
Sin embargo, que un problema sea decidible no implica que se pueda encontrar su solución, pues muchos problemas
que disponen de algoritmos para su resolución son inabordables para un computador por el elevado número de
operaciones que hay que realizar para resolverlos. Esto permite separar los problemas decidibles en dos:
 intratables: aquellos para los que no es factible obtener su solución.
 tratables: aquellos para los que existe al menos un algoritmo capaz de resolverlo en un tiempo razonable.
Los problemas pueden clasificarse también atendiendo a su complejidad. Aquellos problemas para los que se conoce
un algoritmo polinómico que los resuelve se denominan clase P. Los algoritmos que los resuelven son deterministas.
Para otros problemas, sus mejores algoritmos conocidos son no deterministas. Esta clase de problemas se denomina
clase NP. Por tanto, los problemas de la clase P son un subconjunto de los de la clase NP, pues sólo cuentan con una
alternativa en cada paso.

También podría gustarte