You are on page 1of 11

Algoritmo

1.- Es una secuencia de pasos o procesos lgicamente relacionados entre s a fin de obtener la solucin a
un problema planteado.
2.- Es una lista de instrucciones para efectuar paso a paso un proceso.
3.- Conjunto "FINITO" de pasos o instrucciones, seguidas en un orden lgico, los cuales nos llevan a la
solucin de un problema especfico.
4.- Una serie de instrucciones colocadas en cierta secuencia, necesarias para la descripcin de
las operaciones que llevan a la solucin de un problema.
5.- Es un procedimiento completo para resolver un problema especfico en un nmero "FINITO" de pasos.
6.- Es un mtodo para resolver un problema mediante una serie de datos precisos, definidos y finitos.
PASOS PARA PLANTEAR LA SOLUCIN A UN PROBLEMA:
1.- Anlisis del problema.
2.- Identificar las entradas, procesos y salidas del problema, declaracin de variables.
3.- Diseo del Algoritmo: Describe la secuencia ordenada de los pasos, sin ambigedad, es decir, siendo
preciso y veraz en la bsqueda de la solucin al problema.
4.- Codificacin del Algoritmo: Es la expresin en un lenguaje de programacin de los pasos definidos en
el algoritmo.
5.- Ejecucin y validacin del programa por el computador.
CARACTERSTICAS DE ALGORITMOS:
Las caractersticas fundamentales que debe cumplir todo algoritmo son:
1.- Un algoritmo debe ser preciso e indicar el orden de realizacin de cada paso.
2.- Un algoritmo debe estar bien definido, es decir, si se sigue la ejecucin dos veces del mismo se debe
obtener la misma secuencia lgica. El algoritmo debe definirse de forma precisa para cada paso, es decir,
hay que evitar toda ambigedad al definir cada paso. Puesto que el lenguaje humano es impreciso, los
algoritmos se expresan mediante un lenguaje formal, ya sea matemtico o de programacin para un
computador.
3.- Un algoritmo debe ser "FINITO", Si se sigue un algoritmo se debe terminar en algn momento; o sea,
debe tener un numero finito de pasos.
4.- Entrada: El algoritmo tendr cero o ms entradas, es decir, cantidades dadas antes de empezar el
algoritmo. Estas cantidades pertenecen adems a conjuntos especificados de objetos. Por ejemplo,
pueden ser cadenas de caracteres, enteros, naturales, fraccionarios, etc. Se trata siempre de cantidades
representativas del mundo real expresadas de tal forma que sean aptas para su interpretacin por el
computador.
5.- Salida: El algoritmo tiene una o ms salidas, en relacin con las entradas.
CLASIFICACIN DE LOS ALGORITMOS:
Directos: Son aquellos que permiten encontrar la solucin al problema de manera instntanea o directa,
en un nmero determinado de pasos.
Ejemplo: 23 = 2*2*2 = 8
Indirecto:
a) Se ignora el nmero de pasos.
b) Son aquellos donde se desconocen el nmero de pasos para lograr la solucin de un
problema.
Estos a su vez, se clasifican en:
Finito: El nmero de pasos a realizar son conocidos as como la factibilidad de solucin al problema
planteado, o sea, que va a ver una respuesta al proceso.
Ejemplo:
Medir distancia

Es factible que algn da pueda saber la distancia entre la Sede antigua del IUTEPAL (Av. Constitucin) y
la Sede Nueva del IUTEPAL (Urb. Caa de Azcar).
Infinito:
Se desconoce el nmero de pasos a realizar, as como la imposibilidad de encontrar la solucin al
problema planteado.
Cuando realmente es imposible lograr la solucin, por ms vueltas que le demos al problema.
Ejemplo:

Ejemplos de Algoritmos:
Podemos idear un algoritmo para un determinado proceso, as como tambin hacerlo en diferentes
formas.
Por ejemplo: Cmo podramos encontrar el promedio de un conjunto de nmeros?.
Una posible solucin sera:
1.- Sumar los nmeros dados.
2.- Contar dichos nmeros.
3.- Dividir el resultado obtenido en el punto 1 entre el resultado obtenido en el punto 2.
Otra clase de ejemplo de Algoritmos, sera el de una llamada telefnica, o el proceso para efectuar un
viaje en el Metro de Caracas, o la obtencin de la licencia para conducir o el cambio de un caucho que
est bajo de aire, etc; en fin, hay muchas formas de aplicar los algoritmos en cuestiones cotidianas
descomponiendo la accin en pasos lgicos, como es el caso de una llamada desde una cabina de
un telfono pblico:
1.- Inicio
2.- Descolgar el telfono
3.- Esperar la seal digital.
4.- Preguntamos si est daado. Si lo est: Vamos al paso 5.
Si no lo est: Vamos al paso 8.
5.- Vociferar una palabra de mal gusto y fruncir el ceo.
6.- Colgar.
7.- Fin.
8.- Digitar los nmeros.
9.- Verificamos si suena ocupado. Si suena ocupado: Vamos al paso 11.
Si no lo est: Vamos al paso 13.
10.-Insistir digitando los nmeros.
11.- Ir al paso 8.
12.- Verificamos si contestan. Si contestan: Vamos al paso 14
Si no contestan: Vamos al paso 21.
13.- Preguntamos si se encuentra la persona.
Si se encuentra: Vamos al paso 14.
Si no se encuentra: Vamos al paso 17.
14.- Hablar lo deseado.
15.- Colgar.
16.- Fin.
17.- Pensar algo malo.
18.- Tomar un caf y tranquilizarse.
19.- Ir al paso 15.
A continuacin, presentamos un ejemplo de algoritmo para el proceso de cambiar un caucho que est
bajo de aire.
1.- Levantar el carro con el gato hidralico.
2.- Quitar los tornillos del rin.
3.- Quitar el caucho daado.
4.- Poner el caucho de repuesto.
5.- Apretar los tornillos.
6.- Bajar el carro con el gato.
A los anteriores pasos, podramos agregar muchos ms detalles como por ejemplo, abrir la maleta, aflojar
tornillos antes de levantar el carro, etc. Presentamos a continuacin, dos versiones mas amplias del
algoritmo anterior:
Versin N 1
1.- Sacar el caucho de repuesto y herramientas de la maletera.
2.- Verificamos si est daado el caucho de repuesto.
Si lo est vamos al punto 3.
Si no lo est vamos al punto 4.
3.- Vociferamos ruidosamente algo.
Nos vamos caminando a buscar ayuda telefoneamos alguien para que ayude.
Vamos al punto 14.
4.- Verificamos si el caucho bajo de aire es el caucho delantero. Si lo es:
4.1.- Quitamos la tapa del centro de la rueda delantera.
4.2.- Aflojamos los tornillos.
4.3.- Levantamos el carro por delante, junto al caucho daado.
4.4.- Vamos al punto 5.
Si no lo es:
4.1.- Quitamos la tapa del centro de la rueda trasera.
4.2.- Aflojamos los tornillos.
4.3.- Levantamos el carro por detrs, junto al caucho daado.
5.- Quitamos los tornillos.
6.- Quitamos el caucho daado.
7.- Ponemos el caucho de repuesto.
8.- Colocamos los tornillos y las tapas.
9.- Bajamos el carro con el gato hidralico.
10.- Guardamos el caucho daado, el gato y las herramientas en la maletera.
11.- Nos limpiamos con estopa las manos.
12.- Encendemos el vehculo.
13.- Continuamos manejando.
14.- Fin.
Versin N 2
1.- Observamos si el caucho de repuesto est vaco.
Si lo est vamos al punto 2.
Si no lo est vamos al punto 3.
2.- Llamamos a un taller.
Vamos al punto 12.
3.- Levantamos el carro con el gato hidrulico.
4.- Quitamos un tornillo.
5.- Observamos si hemos quitado todos los tornillos.
Si lo hemos quitado vamos al punto 6.
Si no lo hemos quitado vamos al punto 4.
6.- Quitamos el caucho daado.
7.- Ponemos el caucho de repuesto.
8.- Apretamos un tornillo.
9.- Verificamos si se han apretado todos los tornillos.
10.- Si lo hemos apretado, vamos al punto 11.
Si no lo hemos apretado vamos al punto 8.
11.- Bajamos el carro con el gato hidrulico.
12.- Fin.
Descripcin de un algoritmo en forma grfica:
Cuando una secuencia de actividades que definen un problema es muy simple en su naturaleza, es decir
que slo implique seguir una serie de pasos, uno despus de otro, y que no tenga decisiones lgicas ni
alternativas a tomar, es muy fcil describirlo en palabras. Pero si esta secuencia de actividades se hace
ms compleja ser no slo difcil describirlo en palabras sino tambin retener todas las alternativas.
Para ilustrar lo anterior, analicemos la secuencia de eventos que tienen lugar todas las maanas para un
estudiante de Universidad que tiene clase los lunes y los mircoles a las 08:00 am y los martes y jueves a
las 09:00 am.
Una vez que el estudiante se despierta mira el reloj y si no son an las 06:30 am, contina durmiendo.
Los lunes y los mircoles, procura levantarse entre las 06:30 am y las 07:30 am. Si llegara a despertarse
despus de la hora como frecuentemente ocurre, pensar nuevamente en la falta que le hace el reloj
despertador, pero toma la decisin de no ir a clases en esa maana, sin embargo, despus de esta
decisin, se baa, se desayuna y se dedica a estudiar.
Si se despierta entre las 06:30 am y las 07:30 am, los lunes o los mircoles se baa, se desayuna y se
dedica a leer el peridico hasta que sean ms de las 07:30 am, luego toma el bus y llega a la Universidad.
Entra a clase solamente si han transcurrido menos de 15 minutos desde su comienzo, de otra manera, no
entra a clase y se dedica a leer las carteleras y a esperar la prxima clase.
Los martes y los jueves, procura levantarse entre las 07:30 am y las 08:30 am; si se despierta despus de
las 08:30 am realizar las mismas actividades que tendran lugar si se levantara los lunes o los mircoles
despus de las 07:30 am. De otra forma se baa, se desayuna y lee el peridico hasta que sean ms de
las 08:30 am, luego realiza las mismas actividades que tienen lugar los lunes o lo mircoles cuando sale
de su casa.
Los dems das de la semana, procura dormir hasta las 08:30 am, despus de esta hora se baa, se
desayuna y se dedica a estudiar.
Es dudoso que quien lea por primera vez lo anterior est en capacidad de seguir y mantener fielmente en
su memoria la cantidad de actividades, secuencias, decisiones y alternativas que tiene el ejemplo. Su
respuesta obvia para remediar lo anterior ser dibujar un grfico, y aun sin conocer todas las tcnicas de
los diagramas de flujo ser mucho ms fcil para una persona seguir las actividades a travs de un
grfico.
Algoritmos computacionales
Es importante el estudio y conocimiento de lo que hoy conocemos como Algoritmos Computacionales,
que desde su aparicin hasta nuestros das es, y seguir siendo; vital para el desarrollo de aplicaciones
para computadoras y el manejo y dominio de la lgica de programacin para resolver problemas.
Marco Histrico
Un algoritmo es un conjunto de operaciones y procedimientos que deben seguirse para resolver un
problema. La palabra algoritmo se deriva del nombre latinizado del gran Matemtico rabe Mohamed Ibn
Al Kow Rizmi, el cual escribi sobre los aos 800 y 825 su obra Quitad Al Mugabala, donde se recoga
el sistema de numeracin hind y el concepto del cero. Fue Fibinacci, el que tradujo la obra al latn y el
inicio con la palabra: Algoritmi Dicit.El lenguaje algortmico es aquel por medio al cual se realiza un
anlisis previo del problema a resolver y encontrar un mtodo que permita resolverlo. El conjunto de todas
las operaciones a realizar y e orden en que se deben efectuarse, se le denomina algoritmo.
Generalidades
El programador de computadoras es ante que nada una persona que resuelve problemas, por lo que para
llegar a ser un programador eficaz se necesita aprender a resolver problemas de un modo riguroso y
sistemtico. A la metodologa necesaria para resolver problemas mediante programas se denomina
Metodologa de la Programacin. El eje central de esta metodologa es el concepto, ya tratado, de
algoritmo.
Un algoritmo es un mtodo para resolver un problema. Aunque la popularizacin del trmino ha llegado
con el advenimiento de la era informtica, algoritmo proviene de Mohammed al-Khowarizmi, matemtico
persa que vivi durante el siglo IX y alcanzo gran reputacin por el enunciado de las reglas para sumar,
restar, multiplicar y dividir nmeros decimales; la traduccin al latn del apellido de la palabra algorismus
derivo posteriormente en algoritmo. Euclides, el gran matemtico griego (del siglo IV antes de Cristo) que
invento un mtodo para encontrar el mximo comn divisor de dos nmeros, se considera con Al-
Khowarizmi el otro gran padre de la algoritmia (ciencia que trata de los algoritmos).
El profesor Niklaus Wirth, inventor de Pascal, Modula-2 y Oberon, titulo uno de sus mas famosos libros,
Algoritmos + Estructuras de Datos = Programas, significndonos que solo se puede llegar a realizar un
buen programa con el diseo de un algoritmo y una correcta estructura de datos. Esta ecuacin ser de
una de las hiptesis fundamentales consideradas en esta obra.La resolucin de un problema exige el
diseo de un algoritmo que resuelva el problema propuesto.
Los pasos para la resolucin de un problema son:
Diseo de algoritmo, que describe la secuencia ordenada de pasos que conducen a la solucin
de un problema dado. (Anlisis del problema y desarrollo del algoritmo).
Expresar el algoritmo como un programa de lenguaje de programacin adecuado. (Fase de
codificacin.)
Ejecucin y validacin del programa por la computadora.
Para llegar a la realizacin de un programa es necesario el diseo previo de algoritmo, de modo que sin
algoritmo no puede existir un programa.Los algoritmos son independientes tanto del lenguaje de
programacin en que se expresan como de la computadora que lo ejecuta. En cada problema el algoritmo
se puede expresar en un lenguaje diferente de programacin y ejecutarse en una computadora distinta;
sin embargo, el algoritmo ser siempre el mismo. As, por ejemplo, en una analoga con la vida diaria, una
receta de un plato de cocina se puede expresar en espaol, ingles o francs, pero cualquiera que sea el
lenguaje, los pasos para la elaboracin del plato se realizaran sin importar el idioma del cocinero.
En la ciencia de la computacin y en la programacin, los algoritmos son ms importantes que
los lenguajes de programacin o las computadoras. Un lenguaje de programacin es tan solo un medio
para expresar un algoritmo y una computadora es solo un procesador para ejecutarlo. Tanto el lenguaje
de programacin como la computadora son los medios para obtener un fin: conseguir que el algoritmo se
ejecute y se efecte el proceso correspondiente.Dada la importancia del algoritmo en la ciencia de la
computacin, un aspecto muy importante ser el diseo de algoritmos. El diseo de la mayora de los
algoritmos requiere creatividad y conocimientos profundos de la tcnica de la programacin. En esencia,
la solucin de un problema se puede expresar mediante un algoritmo.
La definicin de un algoritmo debe definir tres partes: Entrada, Proceso y Salida. En el algoritmo de receta
de cocina citado anteriormente se tendr:
Entrada: ingrediente y utensilios empleados.
Proceso: elaboracin de la receta en la cocina.
Salida: terminacin del plato (por ejemplo, cordero).
Ejemplo de Algoritmo:Un cliente ejecuta un pedido a una fbrica. Esta examina en su banco de datos la
ficha del cliente; si el cliente es solvente entonces la empresa acepta el pedido; en caso contrario
rechazara el pedido. Redactar el algoritmo correspondiente.Los pasos del algoritmo son:
inicio
leer el pedido
examinar la ficha del cliente
si el cliente es solvente aceptar pedido; en caso contrario, rechazar pedido
fin
Diseo del Algoritmo:En la etapa de anlisis del proceso de programacin se determina que hace el
programa. En la etapa de diseo se determina como hace el programa la tarea solicitada.
Los mtodos mas eficaces para el proceso de diseo se basan en el conocido por Divide y Vencers, es
decir, la resolucin de un problema complejo se realiza dividiendo el problema en sub problemas y a
continuacin dividir estos sub problemas en otros de nivel mas bajo, hasta que pueda ser implementada
una solucin en la computadora. Este mtodo se conoce tcnicamente como diseo descendente (Top
Down) o modular. El proceso de romper el problema en cada etapa y expresar cada paso en forma ms
detallada se denomina refinamiento sucesivo.
Cada sub programa es resuelto mediante un modulo (sub programa) que tiene un solo punto de entrada y
un solo punto de salida.Cualquier programa bien diseado consta de un programa principal (el modulo de
nivel mas alto) que llama a sub programas (mdulos de nivel mas bajo) que a su vez pueden llamar a
otros sub programas. Los programas estructurados de esta forma se dice que tienen un diseo modular y
el mtodo de romper el programa en mdulos ms pequeo se llama Programacin Modular. Los mdulos
pueden ser planeados, codificados, comprobados y depurados independientemente (incluso por
diferentes programadores) y a continuacin combinarlos entre si. El proceso implica la ejecucin de los
siguientes pasos hasta que el programa se termina:
Programar mdulo.
Comprobar el mdulo.
Si es necesario, depurar el modulo.
Combinar el modulo con los mdulos anteriores.
El proceso que convierte los resultados del anlisis del problema en un diseo modular con refinamiento
sucesivo que permitan una posterior traduccin al lenguaje se denomina diseo de algoritmo.
El diseo del algoritmo es independiente del lenguaje de programacin en el que se vaya a codificar
posteriormente.
5. Tcnica de diseo de algoritmos
Diseo de Algoritmos: Hasta ahora se han realizado algunos comentarios respecto a la necesidad de
disear algoritmos correctos y eficientes utilizando los elementos de un lenguaje de programacin .Es
necesario en este momento mencionar algo sobre como hacerlo. El acto de disear un algoritmo puede
considerarse como una tarea que difcilmente podr ser del todo automatizada.
Todo problema algortmico es un reto para su diseador, algunos resultan inmediatos de resolver, otros
son bastante complejos. La investigacin en esta rea ha permitido descubrir un conjunto de mtodos o
esquemas de diseo hacia los cuales puede orientarse la realizacin de muchos algoritmos.No obstante,
y a pesar de que resulta mas adecuado en bastantes casos utilizar alguno de estos esquemas que
realizar un diseo desde cero, idear un algoritmo continua siendo una labor bastante creativa donde los
conocimientos y la experiencia del propio diseador tiene un papel fundamental.
El diseo de un algoritmo que resuelva un problema es, en general, una tarea difcil. Una forma de facilitar
esta labor consiste en recurrir a tcnicas conocidas de diseo de algoritmos, se decir, a esquemas muy
generales que pueden adaptarse a un problema particular al detallar las partes generales del esquema.
Muchos problemas pueden resolverse buscando una solucin fcil y directa pero, a la vez bastante
ineficiente. Este mtodo, llamado de fuerza bruta, puede ser muy directo, pero con un poco de anlisis
puede encontrarse algoritmos ms eficientes. El esquema mas sencillo quizs sea el llamado divide y
vencers, basado en la descomposicin de un problema en subproblemas.
Otros esquemas requieren un anlisis minucioso del problema de forma que la solucin se vaya
construyendo en etapas. Si puede preverse que decisin conviene en cada etapa para producir cierto tipo
de mejor resultado, tenemos una solucin voraz, si la decisin en una etapa, solo puede tomarse tras
considerar varias soluciones de otras etapas mas simples, la solucin es dinmica. Aun as, hay
problemas cuya solucin no puede hallarse sino mediante un proceso de bsqueda, a pesar de lo
complejas que son las operaciones de bsqueda, su uso adecuado mediante el esquema de bsqueda
con retroceso (o backtracking) permite ganar gran eficiencia respecto a soluciones de fuerza bruta.
Por ultimo, conviene conocer otros mtodos de diseo de algoritmos que tambin resultan
de utilidad prctica. Nos estamos refiriendo a mtodos basados en la mejora de la eficiencia (por ejemplo,
el uso de parmetros de acumulacin al resolver problemas utilizando divide y vencers, y el empleo de
tablas como estructura auxiliar para la resolucin eficiente de problemas donde se aplica programacin
dinmica), y a mtodos basados en transformaciones del dominio para encontrar una solucin mas
fcilmente a un problema en un dominio transformado, siendo dicha solucin finalmente adaptada al
dominio original.
Consideraciones generales:Si el hbil programador dispone de un recetario de algoritmos de
donde poder seleccionar el ms adecuado para cada problema, su tarea se simplifica. Supongamos que
disponemos de una especificacin precisa, completa y consistente del problema a resolver y queremos
obtener un algoritmo en el que, dados uno datos de entrada valido, se produzca cierto resultado. Si no
nos importa la eficiencia del algoritmo, podramos utilizar un algoritmo general llamado algoritmo del
museo britnico. Se programa un computador de manera que parta de un conjunto de
axioma matemticos y los que use para reducir aleatoriamente teoremas validos.
Aprender los principios bsicos del diseo de algoritmos podemos preguntarnos por un mtodo aceptable.
El mas entendido, y quizs el mejor, es organizar el diseo sobre un esquema de algoritmo o una tcnica
de diseo que haya demostrado su utilidad para otros problemas. Este mtodo de trabajo es practicable,
puesto que existe un nmero reducido de esquema y tcnicas de diseo.
El conocimiento de tcnicas de diseo es solo un primer paso para el diseador, que debe completarse
con otros conocimientos y, sobre todo, con la experiencia.
A menudo los algoritmos requieren una organizacin bastante compleja de los datos, y es por tanto
necesario un estudio previo de las estructuras de datos fundamentales. Dichas estructuras pueden
implementarse de diferentes maneras, y es ms, existen algoritmos para implementar dichas estructuras.
El uso de estructuras de datos adecuadas pueden hacer trivial el diseo de un algoritmo, o un algoritmo
muy complejo puede usar estructuras de datos muy simples.
Uno de los algoritmos ms antiguos conocidos es el algoritmo de Euclides. El trmino algoritmo proviene
del matemtico Muhammad ibn Musa al-Khwarizmi, que vivi aproximadamente entre los aos 780 y 850
d.C. en la actual nacin Iran. El describi la realizacin de operaciones elementales en el sistema de
numeracin decimal. De al-Khwarizmi se obtuvo la derivacin algoritmo.
- Clasificacin de algoritmos
* Algoritmo determinista: en cada paso del algoritmo se determina de forma nica el siguiente paso.
* Algoritmo no determinista: deben decidir en cada paso de la ejecucin entre varias alternativas y
agotarlas todas antes de encontrar la solucin.
Todo algoritmo tiene una serie de caractersticas, entre otras que requiere una serie de recursos, algo que
es fundamental considerar a la hora de implementarlos en una mquina.
Estos recursos son principalmente:
El tiempo: perodo transcurrido entre el inicio y la finalizacin del algoritmo. La memoria: la cantidad (la
medida vara segn la mquina) que necesita el algoritmo para su ejecucin.
Obviamente, la capacidad y el diseo de la mquina pueden afectar al diseo del algoritmo.
En general, la mayora de los problemas tienen un parmetro de entrada que es el nmero de datos que
hay que tratar, esto es, N. La cantidad de recursos del algoritmo es tratada como una funcin de N. De
esta manera puede establecerse un tiempo de ejecucin del algoritmo que suele ser proporcional a una
de las siguientes funciones:
1 : Tiempo de ejecucin constante. Significa que la mayora de las instrucciones se ejecutan una
vez o muy pocas.
logN : Tiempo de ejecucin logartmico. Se puede considerar como una gran constante. La base
del logaritmo (en informtica la ms comn es la base 2) cambia la constante, pero no demasiado. El
programa es ms lento cuanto ms crezca N, pero es inapreciable, pues logN no se duplica hasta que N
llegue a N2.
N : Tiempo de ejecucin lineal. Un caso en el que N valga 40, tardar el doble que otro en que N
valga 20. Un ejemplo sera un algoritmo que lee N nmeros enteros y devuelve la media aritmtica.
NlogN : El tiempo de ejecucin es NlogN. Es comn encontrarlo en algoritmos como Quick Sort
y otros del estilo divide y vencers. Si N se duplica, el tiempo de ejecucin es ligeramente mayor del
doble.
N2 : Tiempo de ejecucin cuadrtico. 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 ejecucin aumenta cuatro
veces. El peor caso de entrada del algoritmo Quick Sort se ejecuta en este tiempo.
N3 : Tiempo de ejecucin cbico. Como ejemplo se puede dar el de un bucle anidado triple. Si N
se duplica, el tiempo de ejecucin se multiplica por ocho.
2N : Tiempo de ejecucin exponencial. No suelen ser muy tiles en la prctica por el elevadsimo
tiempo de ejecucin. El problema de la mochila resuelto por un algoritmo de fuerza bruta -simple vuelta
atrs- es un ejemplo. Si N se duplica, el tiempo de ejecucin 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
tamao de entrada muy reducido.
- Notacin O-grande
En general, el tiempo de ejecucin es proporcional, esto es, multiplica por una constante a alguno de los
tiempos de ejecucin anteriormente propuestos, adems de la suma de algunos trminos ms pequeos.
As, un algoritmo cuyo tiempo de ejecucin sea T = 3N2 + 6N se puede considerar proporcional a N2. En
este caso se dira que el algoritmo es del orden de N2, y se escribe O(N2). Los grafos definidos
por matriz de adyacencia ocupan un espacio O(N2), siendo N el nmero de vrtices de ste.
La notacin O-grande ignora los factores constantes, es decir, ignora si se hace una mejor o peor
implementacin del algoritmo, adems de ser independiente de los datos de entrada del algoritmo. Es
decir, la utilidad de aplicar esta notacin a un algoritmo es encontrar un lmite superior del tiempo de
ejecucin, es decir, el peor caso.
A veces ocurre que no hay que prestar demasiada atencin a esto. Conviene diferenciar entre el peor
caso y el esperado. Por ejemplo, el tiempo de ejecucin del algoritmo Quick Sort es de O(N2). Sin
embargo, en la prctica este caso no se da casi nunca y la mayora de los casos son proporcionales a
NlogN. Es por ello que se utiliza esta ltima expresin para este mtodo de ordenacin.
Una definicin rigurosa de esta notacin es la siguiente:

- Clasificacin de problemas
Los problemas matemticos 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 cmputo. Sin embargo,
que un problema sea decidible no implica que se pueda encontrar su solucin, pues muchos problemas
que disponen de algoritmos para su resolucin son inabordables para un computador por el elevado
nmero 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 solucin.
* tratables: aquellos para los que existe al menos un algoritmo capaz de resolverlo en un tiempo
razonable.
Los problemas pueden clasificarse tambin atendiendo a su complejidad. Aquellos problemas para los
que se conoce un algoritmo polinmico 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 slo cuentan con una alternativa en cada paso.
Diagramas de flujo
Los diagramas de flujo son esquemas que representan grficamente un algoritmo por medio de los pasos
de un proceso, que se realizan para entender mejor al mismo y son utilizados en
programacin, economa y procesos industriales. Utilizan una series de smbolos con significados
especiales.
Un diagrama de flujo u organigrama es una representacin diagramtico que ilustra la secuencia de las
operaciones que se realizan para conseguir la solucin de un problema y son usados normalmente para
seguir la secuencia lgicas de las acciones en el diseo de problemas de computadoras y se dibujan
generalmente antes de comenzar a programar el cdigo frente a la computadora y una que se dibuja
el diagrama de flujo, llega hacer fcil escribir el programa en cualquier idioma de alto nivel.
1.- Lgica dibujada.
2.- Es la representacin grfica de la solucin a un problema utilizando smbolos predefinidos para su
interpretacin.
3.- Es la representacin grfica del algoritmo.
4.- A nivel de programacin es la representacin grfica de lo que se desea que la computadora realice.
5.- Son representaciones graficas de un algoritmo el cual muestra los pasos o procesos a seguir para
alcanzar la solucin de un problema. Es llamado diagramas de flujo porque los smbolos utilizados se
conectan por medio de flechas para indicar la secuencia de una operacin y son tambin
llamados flujogramas. Utilizan diversos smbolos para representar operaciones especficas.
Importancia de los Diagramas de Flujo:
Es importante ya que ayuda a designar cualquier representacin grfica de un procedimiento o parte de
ese, como su nombre lo indica representa el flujo de informacin de un proceso.
Tipos de Diagramas:
Diagrama de Programa: Representa grficamente un mtodo propuesto para la solucin de un problema
determinado.
Diagrama de Sistema: Representa la integracin; interaccin lgicas de los elementos dentro de un
sistema propuesto.
Diagrama de Procedimiento: Representa grficamente una operacin o flujo de datos dentro de un
sistema.

Diagrama de flujo sencillo con los pasos a seguir si una lmpara no funciona.
Un diagrama de flujo es la forma ms tradicional de especificar los detalles algortmicos de un proceso.
Se utiliza principalmente en programacin, economa y procesos industriales; estos diagramas utilizan
una serie de smbolos con significados especiales. Son la representacin grfica de los pasos de un
proceso, que se realiza para entenderlo mejor. Son modelos tecnolgicos utilizados para comprender los
rudimentos de la programacin lineal.
Definicin
Es un esquema para representar grficamente un algoritmo. Se basan en la utilizacin de diversos
smbolos para representar operaciones especficas. Se les llama diagramas de flujo porque los smbolos
utilizados se conectan por medio de flechas para indicar la secuencia de operacin.
Smbolos utilizados
Para poder hacer comprensibles los diagramas a todas las personas, los smbolos se someten a
una normalizacin; es decir, se hicieron smbolos casi universales, ya que, en un principio cada usuario
podra tener sus propios smbolos para representar sus procesos en forma de Diagrama de flujo. Esto
trajo como consecuencia que slo aquel que conoca sus smbolos, los poda interpretar. La simbologa
utilizada para la elaboracin de diagramas de flujo es variable y debe ajustarse a un patrn definido
previamente.
En teora, no es necesario usar un tipo especial de smbolos para crear un diagrama de flujo, pero existen
algunos ampliamente utilizados por lo que es adecuado conocerlos y utilizarlos, ampliando as las
posibilidades de crear un diagrama ms claro y comprensible para crear un proceso lgico y con opciones
mltiples adecuadas. Se utilizan los smbolos indicados a continuacin, estandarizados segn la
norma ISO 5807:
Flecha. Indica el sentido y trayectoria del proceso de informacin o tarea.
Rectngulo. Se usa para representar un evento o proceso determinado. ste es controlado
dentro del diagrama de flujo en que se encuentra. Es el smbolo ms comnmente utilizado. Se usa para
representar un evento que ocurre de forma automtica y del cual generalmente se sigue una secuencia
determinada.
Rectngulo redondeado: Se usa para representar un evento que ocurre de forma automtica
del cul generalmente se sigue una secuencia determinada.
Rombo. Se utiliza para representar una condicin. Normalmente el flujo de informacin entra por
arriba y sale por un lado si la condicin se cumple o sale por el lado opuesto si la condicin no se cumple.
El rombo adems especifica que hay una bifurcacin.
Crculo. Representa un punto de conexin entre procesos. Se utiliza cuando es necesario dividir
un diagrama de flujo en varias partes, por ejemplo por razones de espacio o simplicidad. Una referencia
debe darse dentro para distinguirlo de otros. La mayora de las veces se utilizan nmeros en los mismos.

Existen adems un sin fin de formas especiales para denotar las entradas, las salidas, los
almacenamientos, etctera.
De acuerdo al estndar ISO, los smbolos e incluso las flechas deben tener ciertas caractersticas para
permanecer dentro de sus lineamientos y ser considerados sintcticamente correctos. En el caso del
crculo de conexin, se debe procurar usarlo slo cuando se conecta con un proceso contenido dentro de
la misma hoja.
Existen tambin conectores de pgina, que asemejan a una "rectngulo oblicuo" y se utilizan para unir
actividades que se encuentran en otra hoja.
Caractersticas que debe cumplir un diagrama de flujo
En los diagramas de flujo se presuponen los siguientes aspectos:
Existe siempre un camino que permite llegar a una solucin (finalizacin del algoritmo).
Existe un nico inicio del proceso.
Existe un nico punto de fin para el proceso de flujo (salvo del rombo que indica una
comparacin con dos caminos posibles).
Recomendaciones
A su vez, es importante que al construir diagramas de flujo, se observen las siguientes recomendaciones:
Evitar sumideros infinitos, burbujas que tienen entradas pero no salidas.
Evitar las burbujas de generacin espontnea, que tienen salidas sin tener entradas, porque son
sumamente sospechosas y generalmente incorrectas.
Tener cuidado con los flujos y procesos no etiquetados. Esto suele ser un indicio de falta de
esmero, pero puede esconder un error an ms grave: a veces el analista no etiqueta un flujo o un
proceso porque simplemente no se le ocurre algn nombre razonable.
VARIABLE: Es un valor no fijo que permanece almacenado en la memoria del computador y que es
identificado con un nombre nico y irrepetible.
Podemos definirlo como cualquier cantidad o valor al cual hacemos referencia asignndole un nombre,
clave (casi siempre abreviada) y que tomar diferentes valores durante el proceso.
Ejemplo: Nombres y Apellidos, Sueldo, Nmero de Cdula de Identidad.
Fsicamente, una variable es un espacio o direccin en la memoria del computador.
CARACTERSTICAS DE LAS VARIABLES:
El nombre de una variable puede ir formado por una o ms letras, nmeros o la combinacin de
ambas.

Los nombres de las variables siempre debern comenzar por una letra.

Los nombres de las variables no debern ir separados por espacios en blanco.


Debe ser memotcnica.
Cdigo Empleado = CODEMP
Cdula= CED
Sueldo= SDO
Impuesto sobre la Renta= ISLR
Seguro Social Obligatorio= SS0
Monto= MTO
TIPOS DE VARIABLES:
Alfanumricas: Son aquellas que pueden almacenar cualquier carcter, letras (A-Z); nmeros
(0-9), espacios en blanco, o caracteres especiales ( , %, *, + , /, $, &, etc)
Ejemplos:
ISLR= 10%
CED$= V- &&.&&&.&&&
FEC= (__/__/__)
Numricas: Son aquellas que almacenan slo nmeros (Dgitos) de (0-9).

CONSTANTE:
Es un valor que no vara, definido con un nombre nico y irrepetible que no va a cambiar durante todo el
algoritmo (Programa).
Es cualquier cantidad, la cual puede aparecer en forma "LITERAL" y permanecer invariable durante el
proceso (Va a almacenar un valor inalterable).
Ejemplos:
CONTADOR:
Es un valor que se incrementa o decrementa, segn sea el caso, un contador en trminos constante es un
valor fijo que se va a ir contando, es decir cumpliendo una funcin cuantitativa.
Es un campo en memoria, el cual sirve (como su nombre lo indica) para contar, ste incrementa en el
valor de 1 y nos muestra el nmero de veces que el proceso ha detectado una ocurrencia determinada y
siempre deberemos expresarlo en forma cuantitativa.
C= 0
Ejemplo:

ACUMULADOR:
Es un campo de memoria, un valor que se incrementa en forma no definida esto por la suma de otro valor
a dicho campo.
Es un campo en memoria, pero que su incremento no es de 1, sino que viene alterndose por la suma de
un valor a dicho campo.
Ejemplo=
DECISIN:
Es una evaluacin o determinacin que va arrojar un valor verdadero o falso.
Partes: 1, 2

You might also like