martes, 26 de julio de 2011

DIAGRAMAS DE FLUJO





OPERACIONES DE ALGORITMOS


OPERACIONES

7 + 5 – 6
12-6= 6


9 + 7 ** (8 – 36) / 5
9+7**-28/5
9+2.17398E-24/5
9+4.348E-25
9.43


3) 7 * 5 ** 3 / 4 div 3
7*125/4 DIV 3
875/4 DIV 3
218.75 DIV 3
72.91


4) 7 * 8 (160 mod 3 ** 3) div 5 * 13 – 28
 7 * 8 (160 mod  27) div 5 * 13 – 28
7 * 8 (25) div 5 * 13 – 28
56 (25) div 5 * 13 – 28
1400 div 5 * 13 – 28
1400 div 65 – 28
21.53-28
-6.46


5) 15 / 2 * (68 – 15 * 33 + (45 ** 2 / 16) / 3) / 15) + 19
15 / 2 * (68 – 15 * 33 + (2025 / 16) / 3) / 15) + 19
15 / 2 * (68 – 15 * 33 + (126.56) / 3) / 15) + 19
15 / 2 * (68 – 15 * 33 + 42.18 / 15) + 19
15 / 2 * (68 – 495 + 42.18 / 15) + 19
15 / 2 * (427 + 2.81) + 19
15 / 2 * (429.81) + 19
15 /859.62 + 19
0.017 + 19
19.017


sábado, 23 de julio de 2011

DIAGRAMA DE ESTUDIANTES


DIAGRAMA DE PRODUCTOS


TAREA DE ALGORITMOS # 2

TIPOS DE ALGORITMOS QUE HAY

Un algoritmo voraz (también conocido como ávido, devorador o goloso) es aquel que, para resolver un determinado problema, sigue una metaheurística consistente en elegir la opción óptima en cada paso local con la esperanza de llegar a una solución general óptima. Este esquema algorítmico es el que menos dificultades plantea a la hora de diseñar y comprobar su funcionamiento. Normalmente se aplica a los problemas de optimización.

un algoritmo paralelo, en oposición a los algoritmos clásicos o algoritmos secuenciales, 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. Otro ejemplo, puede ser el cálculo de Pi en paralelo.

Un algoritmo probabilista (o probabilístico) es un algoritmo que basa su resultado en la toma de algunas decisiones al azar, de tal forma que, en promedio, obtiene una buena solución al problema planteado para cualquier distribución de los datos de entrada. Es decir, al contrario que un algoritmo determinista, a partir de unos mismos datos se pueden obtener distintas soluciones y, en algunos casos, soluciones erróneas.
Existen varios tipos de algoritmos probabilísticos dependiendo de su funcionamiento, pudiéndose distinguir:
§  Algoritmos numéricos, que proporcionan una solución aproximada del problema.
§  Algoritmos de Montecarlo, que pueden dar la respuesta correcta o respuesta erróneas (con probabilidad baja).
§  Algoritmos de Las Vegas, que nunca dan una respuesta incorrecta: o bien dan la respuesta correcta o informan del fallo.

un algoritmo determinista es un algoritmo que, en términos informales, es completamente predictivo si se conocen sus entradas. Dicho de otra forma, si se conocen las entradas del algoritmo siempre producirá la misma salida, y la máquina interna pasará por la misma secuencia de estados. Este tipo de algoritmos ha sido el más estudiado durante la historia y por lo tanto resulta ser el tipo más familiar de los algoritmos, así como el más práctico ya que puede ejecutarse en las máquinas eficientemente.
Un modelo simple de algoritmo determinista es la función matemática, pues esta extrae siempre la misma salida para una entrada dada. No obstante un algoritmo describe explícitamente cómo la salida se obtiene de la entrada, mientras que las funciones definen implícitamente su salida.



En la cultura popular, divide y vencerás hace referencia a un refrán que implica resolver un problema difícil, dividiéndolo en partes más simples tantas veces como sea necesario, hasta que la resolución de las partes se torna obvia. La solución del problema principal se construye con las soluciones encontradas.
En las ciencias de la computación, el término divide y vencerás (DYV) hace referencia a uno de los más importantes paradigmas de diseño algorítmico. El método está basado en la resoluciónrecursiva de un problema dividiéndolo en dos o más subproblemas de igual tipo o similar. El proceso continúa hasta que éstos llegan a ser lo suficientemente sencillos como para que se resuelvan directamente. Al final, las soluciones a cada uno de los subproblemas se combinan para dar una solución al problema original.
Esta técnica es la base de los algoritmos eficientes para casi cualquier tipo de problema como, por ejemplo, algoritmos de ordenamiento (quicksortmergesort, entre muchos otros), multiplicar números grandes (Karatsuba), análisis sintácticos (analisis sintáctico top-down) y la transformada discreta de Fourier.
Por otra parte, analizar y diseñar algoritmos de DyV son tareas que lleva tiempo dominar. Al igual que en la inducción, a veces es necesario sustituir el problema original por uno más complejo para conseguir realizar la recursión, y no hay un método sistemático de generalización.

Una metaheurística es un método heurístico para resolver un tipo de problema computacional general, usando los parámetros dados por el usuario sobre unos procedimientos genéricos y abstractos de una manera que se espera eficiente. Normalmente, estos procedimientos son heurísticos. El nombre combina el prefijo griego "meta" ("más allá", aquí con el sentido de "nivel superior") y "heurístico" (de ευρισκειν, heuriskein, "encontrar").
Las metaheurísticas generalmente se aplican a problemas que no tienen un algoritmo o heurística específica que dé una solución satisfactoria; o bien cuando no es posible implementar ese método óptimo. La mayoría de las metaheurísticas tienen como objetivo los problemas de optimización combinatoria, pero por supuesto, se pueden aplicar a cualquier problema que se pueda reformular en términos heurísticos, por ejemplo en resolución de ecuaciones booleanas.
Las metaheurísticas no son la panacea y suelen ser menos eficientes que las heurísticas específicas, en varios órdenes de magnitud, en problemas que aceptan este tipo de heurísticas crudas.


En informática, la programación dinámica es un método para reducir el tiempo de ejecución de un algoritmo mediante la utilización de subproblemas superpuestos y subestructuras óptimas, como se describe a continuación.
El matemático Richard Bellman inventó la programación dinámica en 1953 que se utiliza para optimizar problemas complejos que pueden ser discretizados y secuencializados.


El método de diseño de algoritmos Ramificación y poda (también llamado Ramificación y Acotación) es una variante delBacktracking mejorado sustancialmente. El término (del inglés, Branch and Bound) se aplica mayoritariamente para resolver cuestiones o problemas de optimización.
La técnica de Ramificación y poda se suele interpretar como un árbol de soluciones, donde cada rama nos lleva a una posible solución posterior a la actual. La característica de esta técnica con respecto a otras anteriores (y a la que debe su nombre) es que el algoritmo se encarga de detectar en qué ramificación las soluciones dadas ya no están siendo óptimas, para «podar» esa rama del árbol y no continuar malgastando recursos y procesos en casos que se alejan de la solución óptima.


"Vuelta atrás", (Backtracking) es una estrategia para encontrar soluciones a problemas que satisfacen restricciones. El término "backtrack" fue acuñado por primera vez por el matemático estadounidense D. H. Lehmer en los años 1950s.



En qué otras ciencias se apoya la algoritmia

  1. Ciencias de la Computación
  2. Matemáticas
  3. Ciencias Sociales
  4. Ciencias Políticas




Cómo podemos determinar la complejidad de un algoritmo

Es posible realizar el estudio de la complejidad de un algoritmo sólo en base a un conjunto reducido desentencias, aquellas que caracterizan que el algoritmo sea lento o rápido en el sentido que nos interesa. Tambiénes posible distinguir entre los tiempos de ejecución de las diferentes operaciones elementales,lo cual es necesario a veces por las características específicas del ordenador (por ejemplo, se podría considerarque las operaciones + y ÷ presentan complejidades diferentes debido a su implementación). Sin embargo, en estetexto tendremos en cuenta, a menos que se indique lo contrario, todas las operaciones elementales del lenguaje,y supondremos que sus tiempos de ejecución son todos iguales

REGLAS PARA EL CALCULO DE LA COMPLEJIDAD
DE UN ALGORITMO
§  El tiempo de ejecución de cada sentencia simple puede tomarse como complejidad de T(1)
§  Para las sentencias de bifurcación (if, case) el resultante de la complejidad será T(1)
§  La complejidad para los bucles (for, repeat, while) independientes será T(n)
§  La complejidad para los bucles anidados será: T(nm) donde m nos representa el numero de bucles anidados

Ejemplo 1:
El algoritmo a1 tarda n segundos en resolver un problema para una determinada cantidad
de datos mientras que el algoritmo n2 + 400n tarda también un determinado
tiempo en resolver el mismo problema.
Determine cual de los dos algoritmos es más eficiente en base a los datos de entrada
a1
a2
5n2
>=
n2+400n
4n2
>=
400n
n2
>=
100n
n
>=
100
n
< 
100
a1 es mejor
n
>=
100
a2 es mejor
Ejemplo 2:
Dado el siguiente algoritmo determine su complejidad
INICIO
T(1)
Leer a,b,c,sum
T(1)
if a>3 then b=c*a
T(1)
desde a=1 hasta b
T(n)
sum=sum+a
T(1)
Fin
T(1)
FINAL
T(1)
La complejidad del algoritmo es T(n)

viernes, 22 de julio de 2011

TAREA DE ALGORITMOS

ALGORITMOS PARA HACER HUEVOS FRITOS

1. Echar aceite en sartén.
2. Calentar el aceite.
3. echar  el huevo al sartén y agregar sal.
4. Esperar a que se cosa.
5. retirar  huevo y listo

ALGORITMO PARA HACER UNA LLAMADA NACIONAL Y UNA INTERNACIONAL
LLAMADA NACIONAL
DESCOLAGAR EL TELEFONO
MARCAR EL NUMERO AL QUE SE DESEA LLAMAR
LISTO YA PUEDE HABLAR
LLAMADA INTERNACIONAL
DESCOLGAR EL TELEFONO
MARCAR 001
MARCAR EL CODIGO DE AREA
MARCAREL NUMERO AL QUE SE DESEA LLAMAR
LISTO YA PUEDE HABLAR.

Algoritmo por multiplicación ingles
1.       Empezar a Opera la primera sifra del multiplicador de izquierda a derecha por toda la cantidad del multiplicando
2.       Operar la segunda sifra del multiplicador pero esta debe terminar donde inicia la primera operación
3.       Sumar los resultados y listo


Ejemplo:     20x12
    20
X 12
   20
     40
  240



Multiplicación de dos enteros por algoritmo divide y venceras y a la rusa
Divide y venceras
1.       Multiplicar primero la primera mitad de un número por la primera de otro  y se desplaza el número de cifras del segundo
2.       se multiplica la primera mitad de uno por la segunda mitad de otro y se desplaza la mitad de posiciones del segundo número
3.       se multiplica la segunda mitad del primero por la primera mitad del segundo y se desplaza la mitad de cifras del segundo
4.       se multiplican las dos últimas mitades  y  no se desplaza nada
5.       sumar los numero y listo


A la rusa
1.       Poner los dos numero en paralelo y al de la izquierda reducirlo por la mitad de manera consecutiva hasta llegar a que sea 1
2.       Al de la derecha aumentarlo el doble consecutivamente hasta que el número de la izquierda sea 1
3.       Todas las filas donde el número de la izquierda sea par se eliminan
4.       Sumar todos los números de la derecha y esa es la respuesta


Ejemplo
40*12
20*24
10*48
5*96
2.5*192
1.25*384
Eliminar todas las filas en la que el número de la primera  columna  sea par obiando si es entero o decimal

40*12
20*24
10*48
5*96
2.5*192
1.25*384
Luego sumar las cantidades de la segunda fila que nos quedaron y ese es el resultado de la multiplicacion
Suma ( 96 + 384)
Respuesta = 480

Algoritmo de un cajero

1.       Introducir su tarjeta y codigo
2.       Seleccionar la consulta de  saldo
3.       Seleccionar Retirar dinero de la cuenta ahorro
4.       Seleccionar cantidad y presionar aceptar
5.       Seleccionar Retirar dinero de la cuenta monetaria
6.       Seleccionar cantidad y presionar aceptar
7.       Imprimir comprobante
8.       Salir y listo