Está en la página 1de 23

Página 1 de 23

UNIVERSIDAD TECNOLOGICA DE SANTIAGO


UTESA

Nombre:
Joel Antonio Rosa Morillo
Matricula:
1-17-3654
Profesor:
Eduardo Arvelo
Practica:
Investigación sobre los algoritmos
Materia:
Algoritmos paralelos
Página 2 de 23

Índice
 Historia del algoritmo.
 Definición de algoritmo.
 Elementos básicos de los algoritmos.
 Las diferentes formas que existen para escribir un
algoritmo.
 Papel e importancia de los algoritmos en el mundo
informáticos.
 Tipos de algoritmos.
- Algoritmo y su escritura en un idioma natural
determinado (ingles o español) y ejemplos.
- Algoritmo diagrama de flujo y ejemplos.
- Algoritmo pseudocódigo y ejemplos.
- Algoritmo y los lenguajes de programación y
ejemplos.
- Algoritmo y la estructura de datos de los
lenguajes de programación y ejemplos.
- Algoritmo y las técnicas de dividir y conquistar y
ejemplos.
Página 3 de 23

- Algoritmo en la programación secuencial,


concurrente y paralela y ejemplos.
 Especificar las característica particulares de los
algoritmos paralelos.
Página 4 de 23

Introducción
A continuación vamos a ver y analizar lo que podemos
aprender sobre los algoritmos paralelos
Un algoritmo paralelo es un algoritmo que puede realizar
múltiples indicaciones simultáneamente en diferentes dispositivos
de procesamiento, después combinar cada una de las salidas
particulares para generar el resultado final.
Todos los días procesamos enormes volúmenes de data
que necesitan cálculos complicados y aquello también en una
época record. En ocasiones requerimos sustraer data de eventos
semejantes o interrelacionados que ocurren simultáneamente.
Aquí es donde requerimos procesamiento simultáneo que puede.
La facilidad de ingreso a las pcs y el aumento de Internet han
cambiado la manera en que almacenamos y procesamos los
datos. Vivimos en una época en la que las datas están accesibles
en copiosidad.
Página 5 de 23

Historia de los algoritmos


El primer caso de algoritmos computacionales proviene del
año 1842 de los escritos de la matemática británica Ada Lovelace
para la maquina analítica de Charles Babbage, De allí que sea
considerada como el primer programador de la historia, que
además en su honor a un lenguaje de programación se le ha
colocado su nombre, este es el lenguaje de programación Ada.
Sin embargo, dado que Babbage nunca terminó su máquina
analítica, el algoritmo que realizó no llegó a implementarse, No
obstante, su trabajo inspiró a otros investigadores que se
dedicaron a este campo.
La palabra algoritmo proviene de la traducción al latín de Al-
Khwārizmī que es el nombre de un matemático y astrónomo
quien escribió un tratado sobre manipulación de números y
ecuaciones en el siglo IX llamado Quitab Al Jabr Al Mugabala. En
sus escritos se recolectan el sistema de numeración hindú, el
concepto del cero y desarrolló con un número limitados de
procesos para resolver ecuaciones de primer y segundo grado.
Alcanzó gran reputación por el enunciado de las reglas paso a
paso para sumar, restar, multiplicar y dividir números decimales.
En el año 1931 el matemático Kurt Gödel publica el Teorema de
incompletud donde postula que existen proposiciones que son
indecidibles. En base a este problema entre los años 1930 y 1940
derivó el desarrollo teórico y formalización de los algoritmos con
los trabajos de Alan Turing, Emil Post, Stephen Kleene y Alonzo
Church con el objetivo de resolver este problema o demostrar el
Teorema.
Años más tarde en el 1900 el matemático David Hilbert había
propuesto varias preguntas fundamentales sobre problemas
teóricos de las matemáticas, como es el caso del problema de la
decisión planteada por el matemático Gottfrie Leibniz que decía:
Página 6 de 23

"¿Es posible encontrar una manera sencilla de decidir si un


problema matemático cualquiera tiene solución?". Entre los años
1950 y 1960 los lenguajes de programación, compiladores y
sistemas operativos estaban en desarrollo, por lo tanto, se
convirtieron tanto en el sujeto como la base para la mayoría del
trabajo teórico sobre los algoritmos. Sin embargo, no fue hasta la
década de 1980 de la mente de Paul Benioff y Richard Feynman
que una nueva revolución en la teoría de los algoritmos resurge,
esta fue la computación cuántica, que a diferencia de las clásicas
funciona sobre los principios de la mecánica cuántica, en donde
los bits podían estar supe posicionados en diferentes estados a la
vez a diferencia de las computadoras clásicas que solo pueden
estar en 1 o 0.
Página 7 de 23

Definición de algoritmo.
Los algoritmos son el objeto de estudio de la algoritmia.
Es un conjunto de instrucciones o reglas definidas y no-
ambiguas, ordenadas y finitas que permite, típicamente,
solucionar un problema, realizar un cómputo, procesar datos y
llevar a cabo otras tareas o actividades. Dados un estado inicial y
una entrada, siguiendo los pasos sucesivos se llega a un estado
final y se obtiene una solución.
En la vida cotidiana, se emplean algoritmos frecuentemente
para resolver problemas determinados. Algunos ejemplos son los
manuales de usuario, que muestran algoritmos para usar un
aparato, o las instrucciones que recibe un trabajador de su
patrón. Algunos ejemplos en matemática son el algoritmo de
multiplicación, para calcular el producto, el algoritmo de la
división para calcular el cociente de dos números, el algoritmo de
Euclides para obtener el máximo común divisor de dos enteros
positivos, o el método de Gauss para resolver un sistema de
ecuaciones lineales.
En general, la parte común en todas las definiciones se puede
resumir en las siguientes tres propiedades siempre y cuando no
consideremos algoritmos paralelos:
 Tiempo secuencial. Un algoritmo funciona en tiempo
discretizado –paso a paso–, definiendo así una secuencia
de estados computacionales por cada entrada válida (la
entrada son los datos que se le suministran al algoritmo
antes de comenzar).
 Estado abstracto. Cada estado computacional puede ser
descrito formalmente utilizando una estructura de primer
orden y cada algoritmo es independiente de su
implementación (los algoritmos son objetos abstractos) de
Página 8 de 23

manera que en un algoritmo las estructuras de primer orden


son invariantes bajo isomorfismo.

 Exploración acotada. La transición de un estado al siguiente


queda completamente determinada por una descripción fija
y finita; es decir, entre cada estado y el siguiente solamente
se puede tomar en cuenta una cantidad fija y limitada de
términos del estado actual.
Página 9 de 23

Elementos básicos de los algoritmos.


 Palabras reservadas: Son palabras especiales utilizadas
solo por el lenguaje para ejecutar una función específica y
que no podemos utilizar en el desarrollo del programa para
un fin distinto, por ejemplo (Inicio, fin, escribir, leer, si-
entonces…, etc).
 Identificadores: Los identificadores son los nombres que
les damos a las variables, funciones, al programa, etc.) para
identificarlos.
 Caracteres especiales: Son elementos como comas,
comillas, punto y coma, paréntesis, que son parte del
lenguaje algorítmico o de programación.
 Constantes: Son datos que no van a modificarse en la
ejecución de programa.
 Variables: Datos cuyo valor se puede modificar en la
ejecución del programa.
 Expresiones: Son combinaciones de constantes, variables
y operadores para ejecutar una operación.
 Instrucciones: Son las sentencias o podríamos decir
pasos, que se ejecutan en un programa
 Bucles: es una secuencia de instrucciones de código que
se ejecuta repetidas veces, hasta que la condición asignada
a dicho bucle deja de cumplirse.
 Contadores: es una variable que se suele utilizar en los
bucles (también llamado ciclo, es una sentencia que se
ejecuta una cierta cantidad de veces, hasta que se cumpla
la condición que se le haya asignado)
 Acumuladores: es un registro en el que son almacenados
temporalmente los resultados aritméticos y lógicos
intermedios que serán tratados por el circuito operacional de
la unidad aritmético-lógica
 Interruptores: a una variable que únicamente toma dos
valores, los cuales se identifican con “abierto / cerrado”,
Página 10 de 23

“verdadero / falso”, “on / off”, “start / stop”, “válido / no


válido”, etc.
 Estructuras: es la forma de organización de los datos
elementales con la intención de facilitar el trabajo de
programación.
 Secuenciales: Significa que un grupo de elementos es
accedido en un predeterminado orden secuencial (un
registro a la vez).
 Selectivas: es aquella que utiliza cierto tipo de lenguaje,
que con ayuda de una interpretación adecuada puede
transmitir datos de gran importancia
 Repetitivas: e utilizan cuando se quiere que un conjunto de
instrucciones se ejecuten un cierto número finito de veces.
Página 11 de 23

Las diferentes formas que existen para escribir


un algoritmo.
Lenguaje natural : Son aquellas lenguas que han sido generadas
espontáneamente en un grupo de hablantes con propósito de
comunicarse, a diferencia de otras lenguas, como puedan ser una lengua
construida, los lenguajes de programación o los lenguajes formales usados
en el estudio de la lógica formal, especialmente la lógica matemática.

Pseudocodigo
• Mezcla de lenguaje de programación y español (o ingles o
cualquier otro idioma) que se emplea, dentro de la programación
estructurada, para realizar el diseño de un programa. En esencia, el
pseudocodigo se puede definir como un lenguaje de
especificaciones de algoritmos.
• Es la representación narrativa de los pasos que debe seguir un
algoritmo para dar solución a un problema determinado. El
pseudocodigo utiliza palabras que indican el proceso a realizar.

Diagramas de flujo
Se basan en la utilización de diversos símbolos para representar
operaciones específicas. Se les llama diagramas de flujo porque los
símbolos utilizados se conectan por medio de flechas para indicar la
secuencia de la operación.

Diagramas estructurados (Nassi-Schneiderman)


•El diagrama estructurado N-S también conocido como diagrama de
chapin es como un diagrama de flujo en el que se omiten las flechas
de unión y las cajas son contiguas. Las acciones sucesivas se
pueden escribir en cajas sucesivas y como en los diagramas de
flujo, se pueden escribir diferentes acciones en una caja.
Página 12 de 23

•Los diagramas estructurados, son una técnica que permite formular


algoritmos mediante una representación geométrica y de asignación
de espacios de un bloque específico.

Papel e importancia de los algoritmos en el


mundo informáticos.

Nuestro subconsciente sigue una seria de pasos minúsculos


para producir una acción más compleja como en un baile, un
deporte u otra actividad. Así que nosotros también poseemos una
serie de algoritmos sub mentales que nos dicen cómo actuar
frente a actividades rutinarias, vividas anteriormente. Para esto
es muy importante el uso de algoritmos ya que nos permite
controlar mejor nuestras acciones y respuestas rutinarias con el
hecho de analizar nuestras acciones e igualmente programarlas a
nuestra conveniencia.

Las personas hoy en día somos más como maquinas.


Realizamos procedimientos “mecánicos” en los que sin analizar
cada acción que realizamos, las hacemos. Esto sucede porque
estas acciones se vuelven cada día más normales para nosotros,
llegando a ser pre-programadas e inconscientes.

Debemos conocer su forma de trabajar y saberla manejar porque


está en nuestras manos usarla de una mejor manera y realmente
para lo q queramos ya que podrán realizar muchas funciones
pero depende del programador, en este caso nosotros, darle su
función y su trabajo.

Por esto debemos conocer muy bien su manejo a través de


algoritmos informáticos que finalmente, no son más que pasos
cotidianos que logramos transcribir al lenguaje computacional.
Página 13 de 23

Tipos de algoritmos.
Algoritmo y su escritura en un idioma
natural determinado (inglés o español)
Son aquellas lenguas que han sido generadas
espontáneamente en un grupo de hablantes con propósito de
comunicarse, a diferencias de otras lenguas, como puedan ser
una lengua construida, los lenguajes de programación o los
lenguajes formales usados en el estudio de la lógica formal,
especialmente la lógica matemática.

La primera y más sencilla forma de describir un algoritmo es


empleado el lenguaje natural: por ejemplo, el algoritmo para
sumar 2 números.
 Inicio suma
 Ingresar primer número
 Guardar número en variable a
 Ingresar segundo número
 Guardar numero en variable b
 Sumar a y b
 Guardar resultado en R
 Mostrar R
 Fin
Página 14 de 23

Algoritmo diagrama de flujo & Ejemplos


Los diagramas de flujo emplean rectángulos, óvalos,
diamantes y otras numerosas figuras para definir el tipo de paso,
junto con flechas conectoras que establecen el flujo y la
secuencia. Pueden variar desde diagramas simples y dibujados a
mano hasta diagramas exhaustivos creados por computadora
que describen múltiples pasos y rutas. Si tomamos en cuenta
todas las diversas figuras de los diagramas de flujo, son uno de
los diagramas más comunes del mundo, usados por personas
con y sin conocimiento técnico en una variedad de campos.

Un diagrama de flujo es un diagrama que describe un


proceso, sistema o algoritmo informático. Se usan ampliamente
en numerosos campos para documentar, estudiar, planificar,
mejorar y comunicar procesos que suelen ser complejos en
diagramas claros y fáciles de comprender. Los diagramas de flujo
a veces se denominan con nombres más especializados, como
"diagrama de flujo de procesos", "mapa de procesos", "diagrama
de flujo funcional", "mapa de procesos de negocios", "notación y
modelado de procesos de negocio (BPMN)" o "diagrama de flujo
de procesos (PFD)". Están relacionados con otros diagramas
populares, como los diagramas de flujo de datos (DFD) y los
diagramas de actividad de lenguaje unificado de modelado
(UML).

Son la representación gráfica de un algoritmo o proceso. Se


utiliza en disciplinas como programación, economía, procesos
industriales y psicología cognitiva.

En Lenguaje Unificado de Modelado (UML), es un diagrama de


actividades que representa los flujos de trabajo paso a paso. Un
diagrama de actividades muestra el flujo de control general.
Página 15 de 23

En SysML el diagrama ha sido extendido para indicar flujos


entre pasos que mueven elementos físicos (p. ej., gasolina)
o energía (p. ej., presión). Los cambios adicionales
permiten al diagrama soportar mejor flujos de
comportamiento y datos continuos.
Página 16 de 23

Algoritmo pseudocódigo y ejemplos


Utiliza las convenciones estructurales de un lenguaje de
programación real, pero está diseñado para la lectura humana en
lugar de la lectura mediante máquina, y con independencia de
cualquier otro lenguaje de programación.
Es una descripción de alto nivel compacta e informal del
principio operativo de un programa informático u otro algoritmo.
El pseudocódigo omite detalles que no son esenciales para
la comprensión humana del algoritmo, tales como declaraciones
de variables, código específico del sistema y algunas subrutinas.
El lenguaje de programación se complementa, donde sea
conveniente, con descripciones detalladas en lenguaje natural, o
con notación matemática compacta. Se utiliza pseudocódigo
pues este es más fácil de entender para las personas que el
código del lenguaje de programación convencional, ya que es
una descripción eficiente y con un entorno independiente de los
principios fundamentales de un algoritmo.
Es comúnmente utilizado por los programadores para omitir
secciones de Código o para dar una explicación del paradigma
que tomó el mismo programador para hacer sus códigos, esto
quiere decir que el pseudocódigo no es programable sino facilita
la programación.
Página 17 de 23

Algoritmo y los lenguajes de


programación y ejemplos

Un programa es una secuencia lógica de instrucciones para


ejecutar tareas específicas en una computadora. Dichas
secuencias están escritas en código y son diseñadas por
programadores, usando uno o más algoritmos.
Los algoritmos son de uso común en el día a día, y se
pueden encontrar en manuales de uso, instrucciones para
ejecutar un plan, o guías para ejecutar procesos. Sin embargo, el
uso del término es más común en el ámbito de la programación.
La diferencia entre un algoritmo y un programa, es que si
bien ambos hacen referencia una serie de instrucciones, los
algoritmos pueden estar escritos en código o en lenguaje natural,
mientras que los programas sólo pueden estar escritos en
lenguaje de programación.

Ejemplos:
 Java
 C
 Python
 C++
 C#
 Visual Basic.
 JavaScript
Página 18 de 23

Algoritmo y la estructura de datos de los


lenguajes de programación y ejemplos

Por lo general, las estructuras de datos eficientes son clave


para diseñar algoritmos eficientes. Algunos métodos formales de
diseño y lenguajes de programación destacan las estructuras de
datos, en lugar de los algoritmos, como el factor clave de
organización en el diseño de software.
Es una forma particular de organizar datos en una
computadora para que puedan ser utilizados de manera eficiente.
Diferentes tipos de estructuras de datos son adecuados
para diferentes tipos de aplicaciones, y algunos son altamente
especializados para tareas específicas.
Las estructuras de datos son un medio para manejar
grandes cantidades de datos de manera eficiente para usos tales
como grandes bases de datos y servicios de indización de
Internet.
Página 19 de 23

Algoritmo y las técnicas de dividir y


conquistar y ejemplos

Este paradigma, divide y vencerás, separa un problema en


sub-problemas que se parecen al problema original, de manera
recursiva resuelve los sub-problemas y, por último, combina las
soluciones de los sub-problemas para resolver el problema
original.
Tanto el ordenamiento por mezcla como el ordenamiento
rápido emplean un paradigma algorítmico común que se basa en
la recursividad. Como divide y vencerás resuelve subproblemas
de manera recursiva, cada subproblema debe ser más pequeño
que el problema original, y debe haber un caso base para los
subproblemas.
Debes pensar que los algoritmos de divide y vencerás
tienen tres partes:
- Divide el problema en un número de subproblemas que son
instancias más pequeñas del mismo problema.
- Vence los sub-problemas al resolverlos de manera
recursiva. Si son los suficientemente pequeños, resuelve los
subproblemas como casos base.
- Combina las soluciones de los subproblemas en la solución
para el problema original.
Página 20 de 23

Algoritmo en la programación secuencial,


concurrente y paralela y ejemplos.
Son importantes porque es más rápido tratar grandes tareas
de computación mediante la paralelización que mediante técnicas
secuenciales.
Esta es la forma en que se trabaja en el desarrollo de los
procesadores modernos, ya que es más difícil incrementar la
capacidad de procesamiento con un único procesador que
aumentar su capacidad de cómputo mediante la inclusión de
unidades en paralelo, logrando así la ejecución de varios flujos de
instrucciones dentro del procesador.
Es un algoritmo que puede ser ejecutado por partes en el
mismo instante de tiempo por varias unidades de procesamiento,
para finalmente unir todas las partes y obtener el resultado
correcto.
Algunos algoritmos son fácilmente divisibles en partes; como por
ejemplo, un algoritmo que calcule todos los números primos entre
1 y 100, donde se podría dividir los números originales en
subconjuntos y calcular los primos para cada uno de los
subconjuntos de los números originales; al final, uniríamos todos
los resultados y tendríamos la solución final del algoritmo.
Página 21 de 23

Especificar las característica particulares de los


algoritmos paralelos

Los algoritmos paralelos son importantes porque es más


rápido tratar grandes tareas de computación mediante la
paralelización que mediante técnicas secuenciales.
Esta es la forma en que se trabaja en el desarrollo de los
procesadores modernos, ya que es más difícil incrementar la
capacidad de procesamiento con un único procesador que
aumentar su capacidad de cómputo mediante la inclusión de
unidades en paralelo, logrando así la ejecución de varios flujos de
instrucciones dentro del procesador. Pero hay que ser cauto con
la excesiva paralelización de los algoritmos ya que cada
algoritmo paralelo tiene una parte secuencial y debido a esto, los
algoritmos paralelos puedes llegar a un punto de saturación (ver
Ley de Amdahl). Por todo esto, a partir de cierto nivel de
paralelismo, añadir más unidades de procesamiento puede sólo
incrementar el coste y la disipación de calor.
El coste o complejidad de los algoritmos secuenciales se
estima en términos del espacio (memoria) y tiempo (ciclos de
procesador) que requiera. Los algoritmos paralelos también
necesitan optimizar la comunicación entre diferentes unidades de
procesamiento. Esto se consigue mediante la aplicación de dos
paradigmas de programación y diseño de procesadores distintos:
memoria compartida o paso de mensajes.
La técnica memoria compartida necesita del uso de cerrojos
en los datos para impedir que se modifique simultáneamente por
dos procesadores, por lo que se produce un coste extra en ciclos
de CPU desperdiciados y ciclos de bus. También obliga a
serializar alguna parte del algoritmo.
Página 22 de 23

La técnica paso de mensajes usa canales y mensajes pero


esta comunicación añade un coste al bus, memoria adicional
para las colas y los mensajes y latencia en el mensaje. Los
diseñadores de procesadores paralelos usan buses especiales
para que el coste de la comunicación sea pequeño pero siendo el
algoritmo paralelo el que decide el volumen del tráfico.
Finalmente, una subclase de los algoritmos paralelos, los
algoritmos distribuidos son algoritmos diseñados para trabajar en
entornos tipo clusters y de computación distribuida, donde se
usan otras técnicas, fuera del alcance de los algoritmos paralelos
clásicos.
Página 23 de 23

Conclusión
Al concluir con este trabajo quiero decirles que estudiar los
algoritmos paralelos nos puede servir de mucho.
Espero que al estudiar o ver este material sus dudas sobre lo que
son los algoritmos paralelos puedan ser aclaradas, ya que tocamos
muchos puntos importantes sobre ellos.
A la hora de terminar de estudiar los algoritmos paralelos puede
pensar de manera diferente sobre los algoritmos ya que casi siempre lo
conocemos por lo normal, pero al ver lo estudiado en este material nos
podemos dar cuenta de que es algo más allá de lo que pensábamos.

También podría gustarte