Anda di halaman 1dari 11

ITS FELIPE CARRILLO PUERTO

PROFESORA: ARIZBE DEL

SOCORRO ARANA KANTUN


MATERIA: FUNDAMENTOS DE

PROGRAMACION

INSTITUTO TECNOLOGICO FELIPE CARRILO PUERTO. INGENIERIA EN SISTEMAS COMPUTACIONALES. NOMBRES: CESAR ARISTEO BLANCO CASTRO. FREDDY AARON MAGAAPOOT YOAVIISRAEL SOSAKANTUN DAVID PUC POOT TRABAJO:
ALGORITMO VENTAJAS DESVENTAJAS FUNCIONALIDAD REPRESENTACION

FECHA DE EN TREGA:
JUEVES 29 DE SEPTIEMBRE

FELIPE CARRILLO PUERTO QUINTANA ROO SEPTIEMBRE 2011

INTRODUCCIN:
En la vida cotidiana nos encontramos con distintos problemas para los cuales hay que ser ingeniosos para buscar la solucin mas adecuada para eso debemos considerar la utilizacin de algoritmos. Los cuales nos facilita la resolucin de dichos problema, ,sabemos que para llegar a la solucin de un problema se necesita pasar por todo un proceso desde saber o ms bien reconocer cual es el verdadero problema pasando por todo un proceso de anlisis de investigacin. Hay problemas tan sencillos de resolver que se nos podra dificultar debido a la mala eleccin de mtodo de resolucin; para eso veremos y analizaremos el mtodo y el proceso de resolucin de problemas por medio de un algoritmo, as como su etimologa y sus beneficios al utilizar este mtodo adecuado. Adems conoceremos el origen del algoritmo as como su proceso y funcionalidad, nos daremos cuenta de su importancia; analizaremos en cuanto a cmo se representan los algoritmos y que tan creativos pudiese llegar a ser para resolver problemas mediante el mtodo de codificacin de algoritmos.

Concepto de algoritmo
Esta palabra, proviene del nombre de un matemtico persa, nacido alrededor del 780 d.C. en KhoWrizm, conocido como Mohammad Al-KhoWrizmi. Se le considera el padre de la algoritmia porque defini las reglas paso a paso para sumar, restar, multiplicar y dividir nmeros decimales. La traduccin al latn de AlKhwrizm es algoritmi, que da origen a la palabra algoritmo (Joyanes & Zohanero, 2005). Formalmente, un algoritmo se define como una secuencia finita de instrucciones precisas y eficaces para resolver un problema, que trabaja a partir de cero o ms datos (entrada) y devuelve un resultado (salida). Para poder comprender mejor esta informacin se ilustra en el siguiente ejemplo llamado el mundo de la ardilla: Supongamos que tenemos una ardilla, la cual ha sido entrenada para realizar determinadas funciones o movimientos sobre un tablero o mundo. Hasta el momento, las instrucciones que sabe llevar a cabo son las que se muestran en la siguiente tabla: Lista de Instrucciones que puede ejecutar la ardilla INSTRUCCIN avanza() giraIzquierda() dejaBellota() hayBellota() hayPared() DESCRIPCIN DE LOS MOVIMIENTOS DE LA ARDILLA Se mueve una ubicacin en la direccin actual Voltea a la izquierda Coloca una bellota en la ubicacin actual Responde si hay o no bellotas en la posicin actual Responde si hay o no pared en la ubicacin siguiente La ardilla coloca en su boca una bellota que est en la recogeBellota() ubicacin actual bellotasRecogidas() Dice el nmero de bellotas que tiene en la boca Los parntesis al final de cada instruccin sirven para identificar que se trata de una orden que puede ejecutar la ardilla. Si observas la lista de instrucciones podrs darte cuenta que, la ardilla no es capaz de voltear a la derecha y mucho menos de responder a rdenes ms complejas como mueve una bellota que se encuentra en la primera casilla del

tablero al final del mismo. Sin embargo, podra realizar ambas tareas si se le dan las instrucciones precisas en trminos de las acciones que sabe hacer. Por ejemplo, para que la ardilla gire a la derecha tendramos que ordenarle tres veces que girara a la izquierda, es decir, la secuencia de instrucciones que debe ejecutar es: giraIzquierda() giraIzquierda() giraIzquierda() Estos pasos constituyen un algoritmo, el cual soluciona el problema de hacer que la ardilla gire a la derecha. Una de las caractersticas principales de los algoritmos es que cada paso debe estar definido de forma clara y precisa, sin ambigedades, de tal manera que pueda ejecutarse de forma inequvoca, por ejemplo, en el mundo de la ardilla, la instruccin gira() sera una instruccin ambigua, ya que la ardilla no sabra si debe girar a la derecha o a la izquierda. Otra caracterstica es que siempre terminan, por lo que no puede ser una lista infinita de pasos. Y tampoco puede contener pasos que sean irrealizables o cuya ejecucin sea infinita, pues en este caso no sera posible calcular el resultado deseado, si una instruccin est bien definida y es eficaz se puede asegurar que su ejecucin termina con xito, sin embargo, esto no garantiza, de ninguna manera, que el algoritmo tambin termine.

Por lo anterior, al disear un algoritmo se debe garantizar que dada cualquier entrada siempre termine y calcule la respuesta correcta. Es por eso que todo algoritmo debe contar con las siguientes caractersticas:

1. Contar con entrada y salida. 2. Estar definido. 3. Ser eficaz. 4. Tener una terminacin.

Una vez que se ha diseado un algoritmo, se recomienda realizar una prueba de escritorio para verificar si funciona correctamente, esta prueba consiste en ejecutar el algoritmo utilizando papel y lpiz, es decir, se proponen datos de entrada especficos (como los que se ingresaran al programa ya funcionando) y se realiza cada una de las instrucciones indicadas en el algoritmo de acuerdo con el orden establecido, registrando los cambios que se producen despus de la

ejecucin de cada instruccin. De esta manera, se valida que el resultado obtenido en la prueba de escritorio corresponda al resultado deseado (el correcto). Ventajas Resolucin de problemas complejos Este modelo algortmico es una herramienta potente para solucionar problemas complejos, tales como el clsico juego de las torres de Hani. Todo lo que necesita este algoritmo es dividir el problema en subproblemas ms sencillos, y stos en otros ms sencillos hasta llegar a unos subproblemas sencillos (tambin llamados casos base). Una vez ah, se resuelven y se combinan los subproblemas en orden inverso a su inicio. Cmo dividir los problemas es, a menudo, la parte ms compleja del algoritmo. Por eso, en muchos problemas, el modelo slo ofrece la solucin ms sencilla, no la mejor. Eficiencia del algoritmo Normalmente, esta tcnica proporciona una forma natural de disear algoritmos eficientes. Por ejemplo, si el trabajo de dividir el problema y de combinar las soluciones parciales es proporcional al tamao del problema (n); adems, hay un nmero limitado p de subproblemas de tamao aproximadamente igual a n/p en cada etapa; y por ltimo, los casos base requieren un tiempo constante (O(1)); entonces el algoritmo divide y vencers tiene por cota superior asinttica a O(nlogn). Esta cota es la que tienen los algoritmos divide y vencers que solucionan problemas tales como ordenar y la transformada discreta de Fourier. Ambos procedimientos reducen su complejidad, anteriormente definida por O(n2). Para terminar, cabe destacar que existen otros enfoques y mtodos que mejoran estas cotas. Paralelismo Este tipo de algoritmos se adapta de forma natural a la ejecucin en entornos multiprocesador, especialmente en sistemas de memoria compartida donde la comunicacin de datos entre los procesadores no necesita ser planeada por adelantado, por lo que subproblemas distintos se pueden ejecutar en procesadores distintos. Acceso a memoria Los algoritmos que siguen el paradigma Divide y vencers, tienden naturalmente a hacer un uso eficiente de las memorias cachs. La razn es que una vez que un subproblema es lo suficientemente pequeo, l y todos sus subproblemas se pueden, en principio, solucionar dentro de esa cach, sin tener acceso a la memoria principal, que es del orden de decenas de veces ms lenta. Un algoritmo diseado para aprovechar la memoria cach de esta manera se llama modelo

cach-olvidadiza, olvidadiza porque no contiene el tamao de la memoria como parmetro explcito. Por otra parte, estos algoritmos se pueden disear para muchos problemas importantes, tales como ordenacin, la multiplicacin de matrices, de manera que se haga un uso ptimo de la cach. En contraste, el acercamiento tradicional para explotar la cach es hacer bloques, de esta forma, el problema se divide explcitamente en las partes de tamaos apropiados para que se pueda utilizar al cach de forma ptima, pero solamente cuando el algoritmo es mejorado para el tamao especfico de la cach de una mquina particular. La misma ventaja existe en lo que respecta a otros sistemas jerrquicos de memoria, por ejemplo NUMA o memoria virtual, as como para niveles mltiples de cach: una vez que un subproblemas es suficientemente pequeo, puede ser solucionado dentro de un nivel dado de la jerarqua, sin tener que acceder al ms alto (ms lento). Sin embargo, la clase de optimabilidad asinttica descrita aqu, anloga a notacin O mayscula, no hace caso de factores constantes, y el aadir mejoras adicionales especficas de la mquina y cach no es un requerimiento para alcanzar el ptimo en un sentido absoluto. Control del redondeo En computaciones con aritmtica redondeada, por ejemplo con los nmeros en aritmtica flotante, un algoritmo de divide y vencers podra dar resultados ms exactos que un problema iterativo equivalente superficialmente. Por ejemplo, se pueden sumar N nmeros tanto como con un bucle simple que suma cada dato a una variable simple, o mediante un algoritmo de DyV que rompe el conjunto de datos en dos mitades, recursivamente computa cada suma y luego une las 2 sumas. Mientras que el segundo mtodo realiza las mismas sumas que el primero, y cuesta ms por las llamadas recursivas, normalmente es ms exacto. Desventajas La principal desventaja de este mtodo es su lentitud en la repeticin del proceso recursivo: los gastos indirectos de las llamadas recursivas a la resolucin de los subproblemas, junto con el hecho de tener que almacenar la pila de llamadas (el estado en cada punto en la repeticin), pueden empeorar cualquier mejora hasta entonces lograda. Esta tarea, sin embargo, depende del estilo de la implementacin: con casos base lo suficientemente grandes, se reducen los gastos indirectos de la repeticin de las llamadas. Otra desventaja o inconveniente importante, es la dificultad o incluso inconveniencia de aplicar el mtodo a situaciones en las que la solucin al problema general no se deriva de la suma directa y simple de los subproblemas (partes). Esto se presenta por ejemplo cuando son relevantes las interacciones o efectos mutuos entre los subproblemas, lo que genera nuevos subproblemas, al considerar cada una de estas interacciones, incrementando exponencialmente el

nmero de subproblemas a considerar, al incrementarse la complejidad de la situacin general y de sus componentes. De modo similar, el algoritmo puede no ser aplicable cuando las interacciones no son predecibles de preciso.

Representacin de algoritmos
El pseucdigo y el de diagrama de flujo. La primera, generalmente se utiliza por su parecido con el lenguaje natural (espaol, ingls, francs o cualquier otro) y porque su codificacin en un lenguaje de programacin estructurado y modular, como C, es directa. En cambio, los diagramas de flujo son totalmente grficos, lo que hace ms fcil seguir el orden en que se ejecutan las instrucciones. Es importante mencionar que se pueden utilizar cualquiera de las dos representaciones para disear un algoritmo, pues en cualquiera de las dos se puede expresar cualquier algoritmo estructurado, de tal manera que la ms conveniente depende de cada programador.

Pseucdigo.
El pseudocdigo es un lenguaje de especificacin formal de algoritmos. La solucin de un problema se representa de manera narrativa utilizando palabras clave, generalmente verbos escritos en un lenguaje natural, que en nuestro caso ser espaol. Para ilustrar el concepto dado se tomara el ejemplo del mundo de la ardilla. En la figura 2.1 (a) se muestra el estado inicial del mundo, el cual contiene en la primera casilla (de izquierda a derecha) una bellota, y a la ardilla que est de frente a la bellota. El problema consiste en disear un algoritmo que la ardilla pueda ejecutar para llegar al estado meta representado en la figura 2.1 (b), que implica que la ardilla lleve la bellota a la ltima casilla. Para resolverlo se tiene la siguiente informacin: 1. El mundo es conocido, es decir, se sabe de antemano que el tablero est cercado por paredes y slo tiene seis casillas colocadas en lnea. 2. Al inicio la ardilla est en la primera casilla volteando hacia arriba y no tiene ninguna bellota en la boca. 3. En la primera casilla hay una bellota.

Haciendo un rpido anlisis del problema, nos podemos dar cuenta que la ardilla debe recoger la bellota, avanzar cinco casillas y soltar la bellota, esto traducido en un algoritmo queda como se muestra en la imagen de abajo: En este caso las instrucciones son parecidas al lenguaje natural.

DIAGRAMAS DE FLUJO
Los diagramas de flujo son una representacin grfica de un algoritmo que utiliza smbolos para representar las instrucciones y flechas para unirlas e indicar el orden en que deben ejecutarse llamadas lneas de flujo. Estos smbolos fueron normalizados por el Instituto Norteamericano de Normalizacin ANSI (American National Standars Institute, por sus siglas en ingls). Los smbolos ms utilizados se muestran a continuacin.

CONCLUSION:
Un algoritmo en la vida cotidiana nos puede servir para resolver problemas en el rea laboral donde en el cual ejercemos una profesin adecuada. Ahora sabemos la utilidad de un algoritmo que nos ser ms fcil enfrentar problemas resolvindolos de manera as eficiente. Tenemos una nueva perspectiva del proceso de solucin de problemas y podemos tomar mejores decisiones tomando en cuenta todas las posibilidades de soluciones. La representacin nos resulta muy practica en el uso de pseudocdigos adems nos propicia una mayor habilidad, mental. Dicho pseudocdigo suele ser ms acorde a nuestro lenguaje cotidiano en nuestro caso el espaol. En cuanto al diagrama de flujo es ms representativa pues la utilizacin de figuras las cuales ya conocemos ahora el significado y dichas figuras lo hacen ms prcticos y dinmico. En conclusin la facilidad para resolver un problema se basa en la capacidad para entenderla del programador y el camino que este tome para lograrlo.

REFERENCIAS: Fundamentos de programacin, Luis Joyanes Aguilar, 4 edicin, pagina 64-80. Fundamentos de programacin, Luis Joyanes Aguilar, 3 edicin, pagina 724-730. www.abiertayadistancia.sep.gob.mx