Algoritmos - generalidades
-
Upload
tomodachi-flores -
Category
Documents
-
view
605 -
download
0
description
Transcript of Algoritmos - generalidades
Company
LOGO
Algoritmos
L.I. Tomodachi F. Flores Ortiz
Definición
Hughes, David
The algorithm—a clearly defined sequence of steps to achieve some goal—is a key programming concept
Cormen, Thomas H, [Et.Al.]
Informally, an algorithm is any well-defined computational procedure that takes some value, or set of values, as input and produces some value, or set of values, as output. An algorithm is thus a sequence of computational steps that transform the input into the output.
Fundamentos
Herramienta para
especificar la solución
de un problema
computacional
Implementación
Especificación del
problema, indicando
entradas y salidas
deseadas
Procedimiento
Ejemplo 1: algoritmo de ordenamiento
Entrada: Una secuencia de números {a1, a2, . . . , an}
Salida: Una permutación (reordenamiento )
{a1’ , a2
’, . . . , an’} de la entrada, tal que a1
’ ≤ a2’ ≤ · ·
· ≤ an’ .
Dada la secuencia {31, 41, 59, 26, 41, 58}, el
algoritmo deberá calcular como salida la secuencia
{26, 31, 41, 41, 58, 59}
Esta entrada es llamada instancia del problema.
Independientemente de que cumplan las limitantes o no
de la declaración del problema
Caracteristicas de un
algoritmo
Se dice que un algoritmo es correcto si
para cada instancia de entrada, termina
con una salida correcta
Eficiencia
Eficacia
Consistencia
Si la tasa de error es controlable, un
algoritmo incorrecto podría ser útil
Representación
Notación formal Definidos por una
sintaxis y una semántica formal para especificar el funcionamiento y comportamiento del sistema.
Los métodos formales son técnicas de base matemática usadas para describir las propiedades de un sistema
Definen un marco de referencia para especificar, desarrollar y verificar los sistemas de manera sistemática
Representación
Lenguaje natural Lenguaje hablado y/o
escrito y/o signado por humanos para propósitos generales de comunicación
Pseudocódigo. Es una serie de normas léxicas y gramaticales parecidas a la mayoría de los lenguajes de programación, pero sin llegar a la rigidez de sintaxis de estos ni a la fluidez del lenguaje coloquial.
Representación
Gráficos
Permite especificar y
describir un sistema
desde diferentes
perspectivas, con una
notación fácil de usar,
interpretar y
comunicar
Componentes de un
algoritmo
Variables
Estructuras de datos
Estructuras de control
Variables
Una variable es un elemento auxiliar que almacena valores temporales En un programa de
computadora es una región de la memoria, que sobrevive mientras el equipo de cómputo está encendido
Las variables están asociadas con un tipo de dato y operaciones Números (enteros, reales,
imaginarios)
Caracteres
Cadenas (de caracteres)
Lógicos (booleanos)
Fecha
Estructuras de datos
Las estructuras de datos permiten la construcción de nuevos tipos de datos, más complejos, que amplían las herramientas para la solución de problemas Unidimensionales
Registros
Clases
Multidimensionales Arreglos
Pilas
Colas
Listas
Estructuras de control
Las estructuras son herramientas para el control de flujo de una solución Selección
Si – Entonces
Caso
Iteración Mientras…
Para…
Repite…
Saltos Ir A
Paro
Regresa
Ejecuta
Código
fuente
Código
objeto
Código
ejecutable
Imagen
binaria (en
memoria)
EDITO
R
Programa
en
ejecución
Compilador
Ligador
Cargador
Intérprete
De la idea al binario
Algoritmo
Librerías del
L.D.P.
Librerías del
S.O.
Bibliotecas
dinámicas
(OVL)
Ejecución de un programa
Shell
• Interfaz con el usuario
• Gráfico, menú, línea de comando
Cargador
• Programa o componente del sistema operativo que acarrera un código ejecutable a la RAM
CPU
• Unidad Central de Proceso
• Registros
• Buses
Estructura básica de una
computadora
Lenguaje de máquina
Lenguaje de bajo
nivel
Son las instrucciones
(básicas) que puede
utilizar un
computadora
Es un código
propietario
Arquitectura
RISC
CISC
Lenguaje de programación
Alto nivel Orientado al
programador
Diferentes paradigmas
Estructurado
Orientado a objetos
Programación eventual
Programación funcional
Programación lógica
Bajo nivel Orientados al hardware
Ensambladores
Nemotécnicos
Lenguaje de programación
Herramientas
Editores
CASE
IDE
Robots
Modularización
Un subprograma es un
fragmento de código que
se comporta de manera
independiente dentro de
un programa.
Los subprogramas
pueden ser invocados
varias veces desde otras
partes del programa.
Se comunican mediante
parámetros.
Modularización
Cada subprograma tiene
su propio espacio de
variables (identificadores
locales)
Algunos identificadores
pueden ser compartidos
entre subprogramas y el
programa principal
(identificadores globales).
Los subprogramas son
una herramienta de
modularización.
Funciones y procedimientos
Una función es un
subprograma que retorna
un valor.
Las funciones se invocan
dentro de una expresión.
Funciones estándar:
integradas en el LDP.
Funciones definidas por
el programador:
desarrolladas para
resolver una operación
en particular.
Los procedimientos no
retornan un valor como
resultado de su ejecución.
Se invocan como una
instrucción independiente.
Solo pueden retornar valores
en sus parámetros (por
referencia).
Parámetros
Paso de parámetros
por valor
Implica escribir un
valor (tipo de dato)
manejado por el
programa
Pueden ser el
resultado de una
expresión o la llamada
a una función
No pueden ser
modificados (el valor
se almacena en la
variable local)
Paso de parámetros
por referencia
Utiliza una dirección
en la memoria de la
computadora
(apuntador a una
variable)
Puede ser una
variable local o global
Si se hacen
modificaciones se
reflejarán en las dos
instancias (local y
global)
Ejemplos
Inicio Calculadora
Resultado = 0
Opción = 0
Salir = "N"
Repite
Escribe "1. Sumar"
Escribe "2. Restar"
Escribe "3. Multiplicar"
Escribe "4. Dividir"
Escribe "5. Terminar"
Lee Opción
Caso (Opción)
Caso 1: Resultado = sumar(10, 20)
Caso 2: Resultado = restar(50, 20)
Caso 3: Resultado = multiplicar(6, 5)
Caso 4: Resultado = Dividir(120, 4)
Fin(caso)
Hasta que
Fin (Calculadora)
Función sumar(número1,número2):numérico
regresa número1+número2
Fin(sumar)
Función restar(número1,número2):numérico
regresa número1-número2
Fin(sumar)
Función multiplicar(número1,número2):numérico
regresa número1*número2
Fin(sumar)
Función dividir(número1,número2):numérico
si número2 <> 0
regresa número1/número2
fin(si)
Fin(sumar)
Recursión
Una función es recursiva
cuando se llama a si misma.
A recursive process is one in
which objects are defined in
terms of other objects of the
same type
Esto no ahorra memoria
(hay múltiples copias de
variables), por lo que hay
que tener cuidado de no
realizar una recursión
demasiado grande, o sin
salida De hacerlo, esta multiplicación
de las variables automáticas
de la función haría que el
programa corra fuera del stack
Ejemplo
/* calculo del factorial usando recursión */
#include <stdio.h>
double Factorial(int N);
main()
{
int i;
for(i = 1; i < 10; i++)
printf("%d!=%f\n", Factorial(i);
}
double Factorial(int N)
{
if(N == 0) /* Solución Trivial */
return 1;
return N * Factorial(N-1); /* Solución Recursiva */
}