Clasificaciones, modalidades y tendencias de investigación educativa.
Algoritmo
1.
2. Un algoritmo (del griego y latín, dixit
algorithmus y este a su vez del matemático
persa Al-Juarismi[1] ) es un conjunto preescrito
de instrucciones o reglas bien definidas,
ordenadas y finitas que permite realizar una
actividad mediante pasos sucesivos que no
generen dudas a quien deba realizar dicha
actividad.[2] Dados un estado inicial y una
entrada, siguiendo los pasos sucesivos se llega
a un estado final y se obtiene una solución. Los
algoritmos son el objeto de estudio de la
algoritmia.[1]
3. Un algoritmo se puede concebir como
una función que transforma los datos de
un problema (entrada) en los datos de
una solución (salida). Más aun, los datos
se pueden representar a su vez como
secuencias de bits, y en general, de
símbolos cualesquiera.[1] [9] [11] Como
cada secuencia de bits representa a un
número natural (véase Sistema binario),
entonces los algoritmos son en esencia
funciones de los números naturales en
los números naturales que sí se pueden
calcular. Es decir que todo algoritmo
calcula una función donde cada número
natural es la codificación de un
problema o de una solución.
4. Como medida de la eficiencia de un algoritmo, se suelen estudiar
los recursos (memoria y tiempo) que consume el algoritmo. El
análisis de algoritmos se ha desarrollado para obtener valores que
de alguna forma indiquen (o especifiquen) la evolución del gasto
de tiempo y memoria en función del tamaño de los valores de
entrada.
El análisis y estudio de los algoritmos es una disciplina de las
ciencias de la computación y, en la mayoría de los casos, su
estudio es completamente abstracto sin usar ningún tipo de
lenguaje de programación ni cualquier otra implementación; por
eso, en ese sentido, comparte las características de las disciplinas
matemáticas. Así, el análisis de los algoritmos se centra en los
principios básicos del algoritmo, no en los de la implementación
particular. Una forma de plasmar (o algunas veces "codificar") un
algoritmo es escribirlo en pseudocódigo o utilizar un lenguaje muy
simple tal como Lexico, cuyos códigos pueden estar en el idioma
del programador.
5. Dado un conjunto finito de números, se tiene el problema de
encontrar el número más grande. Sin pérdida de generalidad se
puede asumir que dicho conjunto no es vacío y que sus
elementos están numerados como .
Es decir, dado un conjunto se pide encontrar tal que para todo
elemento que pertenece al conjunto .
Para encontrar el elemento máximo, se asume que el primer
elemento () es el máximo; luego, se recorre el conjunto y se
compara cada valor con el valor del máximo número
encontrado hasta ese momento. En el caso que un elemento
sea mayor que el máximo, se asigna su valor al máximo.
Cuando se termina de recorrer la lista, el máximo número que
se ha encontrado es el máximo de todo el conjunto.
6. Sobre la notación:
"←" representa una asignación: ←
significa que la variable toma el valor de ;
"devolver" termina el algoritmo y devuelve
el valor a su derecha (en este caso, el
máximo de ).
7. Un algoritmo voraz (también conocido como
ávido, devorador o goloso) es aquel que, para
resolver un determinado problema, sigue una
heurí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.
8. El conjunto C de candidatos, entradas del problema.
Función solución. Comprueba, en cada paso, si el subconjunto
actual de candidatos elegidos forma una solución (no importa
si es óptima o no lo es).
Función de selección. Informa de cuál es el elemento más
prometedor para completar la solución. Éste no puede haber
sido escogido con anterioridad. Cada elemento es considerado
una sola vez. Luego, puede ser rechazado o aceptado y
pertenecerá a .
Función de factibilidad. Informa si a partir de un conjunto se
puede llegar a una solución. Lo aplicaremos al conjunto de
seleccionados unido con el elemento más prometedor C/S.
Función objetivo. Es aquella que queremos maximizar o
minimizar, el núcleo del problema.
9. En las ciencias de la computació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.
10. 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.
11. Se puede optar por la elección aleatoria si se tiene un problema cuya
elección óptima es demasiado costosa frente a la decisión aleatoria.
Un algoritmo probabilista puede comportarse de distinta forma
aplicando la misma entrada.
A un algoritmo determinista nunca se le permite que no termine:
hacer una división por 0, entrar en un bucle infinito, etc.
Si existe más de una solución para unos datos dados, un algoritmo
determinista siempre encuentra la misma solución (a no ser que se
programe para encontrar varias o todas).
Un algoritmo probabilista puede encontrar soluciones diferentes
ejecutándose varias veces con los mismos datos.
A un algoritmo determinista no se le permite que calcule una solución
incorrecta para ningún dato.
Un algoritmo probabilista puede equivocarse siempre que esto ocurra
con una probabilidad pequeña para cada dato de entrada.
12. Algoritmo de Montecarlo:
A veces da una solución incorrecta.
Con una alta probabilidad encuentra una solución correcta sea cual sea la
entrada.
Definición: Sea p un número real tal que 0.5<p<1.Un algoritmo de Montecarlo
es p–correcto si:
Devuelve una solución correcta con probabilidad mayor o igual que p,
cualesquiera que sean los datos de entrada.
A veces, p dependerá del tamaño de la entrada, pero nunca de los datos de la
entrada en sí.
Un ejemplo de algoritmo de Montecarlo (el más conocido): decidir si un
número impar es primo o compuesto.
Ningún algoritmo determinista conocido puede responder en un tiempo
“razonable” si el número tiene cientos de cifras.
La utilización de primos de cientos de cifras es fundamental en criptografía
13. Un algoritmo de Las Vegas nunca da una solución falsa.
Toma decisiones al azar para encontrar una solución antes que un
algoritmo determinista.
Si no encuentra solución lo admite.
Hay dos tipos de algoritmos de Las Vegas, según la posibilidad de no
encontrar una solución:
Los que siempre encuentran una solución correcta, aunque las
decisiones al azar no sean afortunadas y la eficiencia disminuya.
Los que a veces, debido a decisiones desafortunadas, no encuentran
una solución.
Tipo a: Algoritmos de Sherwood
Existe una solución determinista que es mucho más rápida en media
que en el peor caso.
14. Saltar a: navegación, búsqueda En ciencias de la computación,
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.
15. En Ciencias de la computación, un algoritmo no
determinístico es un algoritmo que con la misma
entrada ofrece muchos posibles resultados. No se
puede saber de antemano cuál será el resultado de la
ejecución de un algoritmo no determinístico. En la
teoría estándar de la computación la definición de
algoritmo deja en claro que de por sí un algoritmo es
determinístico.
Sin embargo, los algoritmos no determinísticos
emplean modelos de computación tales como la
Máquina de Turing probabilística, que no son
determinísticos. Se considera entonces que los
algoritmos no determinísticos son un caso especial.
16.
17.
18. Los algoritmos pueden ser expresados de muchas maneras,
incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y
lenguajes de programación entre otros. Las descripciones en lenguaje
natural tienden a ser ambiguas y extensas..
La descripción de un algoritmo usualmente se hace en tres niveles:
1.Descripción de alto nivel. Se establece el problema, se selecciona un
modelo matemático y se explica el algoritmo de manera verbal,
posiblemente con ilustraciones y omitiendo detalles.
2.Descripción formal. Se usa pseudocódigo para describir la secuencia
de pasos que encuentran la solución.
3.Implementación. Se muestra el algoritmo expresado en un lenguaje
de programación específico o algún objeto capaz de llevar a cabo
instrucciones.
También es posible incluir un teorema que demuestre que el algoritmo
es correcto, un análisis de complejidad o ambos.
19. Los diagramas de flujo son descripciones gráficas de
algoritmos; usan símbolos conectados con flechas para
indicar la secuencia de instrucciones y están regidos por
ISO. Los diagramas de flujo son usados para
representar algoritmos pequeños, ya que abarcan
mucho espacio y su construcción es laboriosa. Por su
facilidad de lectura son usados como introducción a los
algoritmos, descripción de un lenguaje y descripción de
procesos a personas ajenas a la computación.
Los algoritmos pueden ser expresados de muchas
maneras, incluyendo al lenguaje natural, pseudocódigo,
diagramas de flujo y lenguajes de programación entre
otros. Las descripciones en lenguaje natural tienden a
ser ambiguas y extensas.
20.
21. El pseudocódigo (falso lenguaje, el prefijo pseudo significa falso)
es una descripción de alto nivel de un algoritmo que emplea una
mezcla de lenguaje natural con algunas convenciones
sintácticas propias de lenguajes de programación, como
asignaciones, ciclos y condicionales, aunque no está regido por
ningún estándar. Es utilizado para describir algoritmos en libros
y publicaciones científicas, y como producto intermedio durante
el desarrollo de un algoritmo, como los |diagramas de flujo,
aunque presentan una ventaja importante sobre estos, y es que
los algoritmos descritos en pseudocódigo requieren menos
espacio para representar instrucciones complejas.El
pseudocódigo está pensado para facilitar a las personas el
entendimiento de un algoritmo, y por lo tanto puede omitir
detalles irrelevantes que son necesarios en una implementación.
22. La teoría de autómatas y la teoría de funciones
recursivas proveen modelos matemáticos que
formalizan el concepto de algoritmo. Los
modelos más comunes son la máquina de
Turing, máquina de registro y funciones μ-
recursivas. Estos modelos son tan precisos
como un lenguaje máquina, careciendo de
expresiones coloquiales o ambigüedad, sin
embargo se mantienen independientes de
cualquier computadora y de cualquier
implementación.
23. Muchos algoritmos son ideados para
implementarse en un programa. Sin embargo,
los algoritmos pueden ser implementados en
otros medios, como una red neuronal, un
circuito eléctrico o un aparato mecánico y
eléctrico. Algunos algoritmos inclusive se
diseñan especialmente para implementarse
usando lápiz y papel. El algoritmo de
multiplicación tradicional, el algoritmo de
Euclides, la criba de Eratóstenes y muchas
formas de resolver la raíz cuadrada son sólo
algunos ejemplos
24. Círculo: Procedimiento estandarizado.
Cuadrado: Proceso de control.
Línea ininterrumpida: Flujo de información vía formulario o documentación en soporte de
papel escrito.
Línea interrumpida: Flujo de información vía formulario digital.
Rectángulo: Formulario o documentación. Se grafica con un doble de ancho que su altura.
Rectángulo Pequeño: Valor o medio de pago (cheque, pagaré, etcétera).Se grafica con un
cuádruple de ancho que su altura, siendo su ancho igual al de los formularios.
Triángulo (base inferior): Archivo definitivo.
Triángulo Invertido (base superior): Archivo Transitorio.
Semi-óvalo: Demora.
Rombo: División entre opciones.
Trapezoide: Carga de datos al sistema.
Elipsoide: Acceso por pantalla.
Hexágono: Proceso no representado.
Pentágono: Conector.
Cruz de Diagonales: Destrucción de Formularios