SlideShare una empresa de Scribd logo
1 de 38
Figure:




     Algoritmos
Conceptos básicos.
Programación:

3. Establecer una secuencia de acciones que:
   • puedan ser ejecutadas por el procesador
   • realicen una determinada tarea

5. Fases:
   • Resolución del problema propuesto => determinación de
      un algoritmo.
   • Adaptación del algoritmo al computador => codificar el
      algoritmo en un lenguaje que el computador pueda
      comprender.
Conceptos básicos.

•   Acción: Etapa en la realización de un trabajo
•   Acción primitiva: Acción que el procesador puede ejecutar
    sin necesidad de información adicional.
•   Algoritmo: Secuencia ordenada de acciones primitivas que
    realizan un trabajo. Ejemplos:
      Ir al trabajo              Cálculo de la media aritmética de
      1.Levantarse               dos números con una calculadora
      2.Darse una ducha          1.Pulsar la tecla AC
      3.Vestirse                 2.Teclear el primer número
      4.Desayunar                3.Pulsar la tecla +
      5.Tomar locomoción         4.Teclear el segundo número
                                 5.Pulsar la tecla +
                                 6.Pulsar la tecla /
                                 7.Teclear el número 2
                                 8.Pulsar la tecla =
Confección de un pájaro a partir de un papel cuadrado
Confección de un pájaro a partir de un papel cuadrado
Primitivas Origami
Primitivas Origami
Conceptos básicos.
Aspectos que se deben considerar a la hora de escribir un algoritmo:
•   Determinación de las primitivas de las que partimos
•   Lenguaje simbólico a utilizar para desarrollar el algoritmo
•   Representación de los datos
•   Establecer datos de entrada
•   Establecer datos de salida
•   Establecer las relaciones entre los datos de entrada y los de salida


Condiciones que debe cumplir un algoritmo:
•    Ser finito: El algoritmo debe acabar tras un número finito de pasos
•    Estar bien definido: Todas las ejecuciones del algoritmo con los mismos datos de
    entrada deben devolver los mismos datos de salida.

Diferencias entre un algoritmo y un programa:
•    Los algoritmos no son directamente interpretables por el computador => deben ser
    traducidos a un lenguaje de programación concreto.
Definition de algoritmo




  Es un procedimiento computacional bien definido que
  toma un conjunto de valores como entrada y produce
  otro conjunto de valores como salida.
Representación de algoritmos

• Métodos para representar un algoritmo:
    – Pseudolenguaje
    – Diagramas de flujo

• Pseudolenguaje
     – Es un lenguaje específico de descripción de algoritmos
     – La traducción de un algoritmo escrito en pseudolenguaje a un programa en un
     lenguaje de programación determinado es relativamente simple

• Herramientas de un pseudolenguaje para representar un algoritmo
    – Conjunto de palabras clave que proporcionan:
         • las estructuras de control
         • declaraciones de variables
         • características de modularidad
    – Sintaxis libre de un lenguaje natural que describe las características del proceso
    – Elementos para la definición y llamada a subprogramas
Metodología de diseño


Un problema => muchos algoritmos para resolverlo
¿Cómo elegir el más adecuado? Basándonos en las siguientes
características:
    – Legibilidad        – Eficiencia
    – Portabilidad       – Modularidad
    – Modificabilidad    – Estructuración
Metodología de diseño

Programación estructurada
   – Conjunto de técnicas que aumentan la productividad de un programa,
   reduciendo el tiempo para:
       • Escribir • Depurar
       • Verificar • Mantener

   – Utiliza un número limitado de estructuras de control que minimizan la
   complejidad de los problemas

   – Teorema de BOHM-JACOPINI: cualquier programa, por complejo
   que sea, puede escribirse utilizando sólo tres estructuras de control:
       – Secuencial
       – Selectiva
       – Repetitiva
Secuencial



             Actividad 1


             Actividad 2




             Actividad n
Selección           Doble:
Simple:
                      sí
      Condición                                      sí                     no
                                                              condición

                      actividad           Actividad 1
          no                                                                Actividad 2




          Múltiple:
                                  sino                                    sino
                      Condición          Condición         Condición


                            sí                 sí                 sí
                  Actividad 1        Actividad 2          Actividad n-1 Avtividad n
Repetición

               Test       false
             condition


                   true
             activity
Estratégia: Dividir para conquistar


 Dividir el problema en subproblemas

 En la resolución de un problema complejo, se divide en 
  varios sub problemas y seguidamente se vuelven a 
  dividir los sub problemas en otros mas sencillos, 
  hasta que puedan implementarse en el computador.
  
Ordenamiento

    Entrada:
   • secuencia de n números  <a1, a2,..,an>
   Salida:
   • Una permutación <a'1, a'2,..,a'n> 
      reordenamiento de la secuencia, tal que:
      a'1  <  a'2  <  ...  <  a'n
   Ejemplo instancia:
       Entrada: <5,3,1,6,0>
       Salida: <0,1,3,5,6>
Ordenando una lista en forma alfabética
Ordenando una lista en forma alfabética (cont.)
Ordenando una lista en forma alfabética (cont.)
Algoritmo de sort por inserción en pseudocódigo
Búsqueda
    Entrada:
   •  secuencia de n números  <a1, a2,..,an>
   • Un número b
   Salida:
   • un entero i, tal que b == ai  (igual)
   • 0 si b != ai, para i = 1,...,n
   Ejemplo instancia:
           Entrada: <5, 6, 9, 12>   y   9
           Salida: 3
Búsqueda binaria en pseudocódigo
Buscando en una lista




Copyright © 2003 Pearson Education, Inc.   Slide 4-24
Ordenamiento por inserción
           situación de peor caso
 Insertion-Sort(A)
 1 for i <- 2 to n do
 3   temp <- A[i]
 4   j <- i-1
 5   while j>0 and A[j] > temp do
 6        A[j+1] <- A[j]            Se ejecutan: (n-1)*(n)/2 veces
 7        j <- j-1
 8   A[j+1] <- temp                 => O(n2)
Gráfico del análisis del peor caso
ordenamiento por inserción O(n2)
Gráfico del análisis del peor caso
búqueda binaria O(log2 n)
Algoritmos
recursivos
Recursividad

  • Son funciones que se llaman a sí mismas.
  • Requisitos:
     – Deben retornar un valor.
     – Deben tener expresiones en las que se llaman a sí mismas: 
       “ciclo activo”.
     – Deben incluir, en una sentencia de selección, una opción en 
       la cual terminen la ejecución y no se llamen a sí mismas: 
       “caso base”.
     – Si no poseen un opción que les permita terminar su 
       ejecución, se producirán llamadas hasta agotar los recursos 
       de memoria del sistema.
     – Si se alcanza el “caso base” en una llamada del “ciclo 
       activo”, entonces se inicia el “ciclo pasivo” o de retorno.



                                                                29
Recursividad código C




tipo_de_retorno nombre_funcion(tipo argumentos){
          if ( caso_base ) return valor_base;
        else {
              ................
               return nombre_funcion(argumentos');
        }
}




                                                     30
Recursividad (ejemplo)


Obtener el factorial de un número
Casos base:
   - el factorial de cero es uno
   - factorial de uno es uno
   - factorial de un número negativo lo hacemos cero.
   Ciclo activo:
       - llamar a partir del número en forma descendente
        hasta llegar al caso base.

                                                        31
Recursividad (Ejemplo cont.)
  #include <stdio.h>

  int factorial(int n){
          if (n<0) return 0;
          if (n==0) return 1;
          else if (n==1) return 1;
          else return n*factorial(n-1);
  }

  int main(){
          int x,fac;
          printf("Ingrese un número para calcularle el factorial = “);
          scanf("%d",&x);
          fac=factorial(x);
          printf("%d!=%dn",x,fac);
          return 0;
  }




                                                                         32
Simulación: ciclo activo

main(){
   int x = 3;
        factorial(3){
   fac =factorial(3);
          factorial(x);
         if (3==0) return 1;
         else if (3==1) return 1;
         else return 3*factorial(3-1);
                       factorial(2){
                     3*factorial(2);
                          if (2==0) return 1;
                          else if (2==1) return 1;
                          else return 2*factorial(1);
                                      2*factorial(2-1);
                                        factorial(1){
                                          if (1==0) return 1;
                                          else if (1==1) return 1
                                                                1;




                                              Caso Base alcanzado!!



                                                                      33
Simulación: ciclo pasivo

main(){
   int x = 3;factoria
        factorial(3){
   fac =        l(3);
          if (3==0) return 1;
   factorial(x);
          else if (3==1) return 1;
                         3*factorial(2
                        factorial(2){
          else return 3*factorial(3-1);
                            );
                          if (2==0) return 1;
                          else if (2==1) return 1;
                          else return 2*factorial(2-1);
                                              2*1




                                                          34
Simulación: ciclo pasivo

main(){
   int x = 3;factoria
        factorial(3){
   fac =        l(3);
          if (3==0) return 1;
   factorial(x);
          else if (3==1) return 1;
                         3*factorial(2
                        factorial(2){
          else return 3*factorial(3-1);
                            );
                          if (2==0) return 1;
                          else if (2==1) return 1;
                          else return 2;




                                                     35
Simulación: ciclo pasivo

main(){
   int x = 3;factoria
        factorial(3){
   fac =        l(3);
          if (3==0) return 1;
   factorial(x);
          else if (3==1) return 1;
          else return 3*factorial(3-1);
                              3*2




                                          36
Simulación: ciclo pasivo

main(){
   int x = 3;factoria
        factorial(3){
   fac =        l(3);
          if (3==0) return 1;
   factorial(x);
          else if (3==1) return 1;
          else return 6;




                                     37
Simulación: ciclo pasivo

main(){
   int x = 3;
              6;
   fac =
   factorial(x);




                            38

Más contenido relacionado

La actualidad más candente

La actualidad más candente (19)

Tema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con HaskellTema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con Haskell
 
Metodologia de la programacion recursividad
Metodologia de la programacion   recursividadMetodologia de la programacion   recursividad
Metodologia de la programacion recursividad
 
Tema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellTema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en Haskell
 
Matlab
MatlabMatlab
Matlab
 
03 tda1 t2018
03 tda1 t201803 tda1 t2018
03 tda1 t2018
 
Razonando Vulnerabilidades con SMT Solvers
Razonando Vulnerabilidades con SMT SolversRazonando Vulnerabilidades con SMT Solvers
Razonando Vulnerabilidades con SMT Solvers
 
Recursividad
RecursividadRecursividad
Recursividad
 
Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell
 
11 Funciones
11 Funciones11 Funciones
11 Funciones
 
Programacion imperativa
Programacion imperativaProgramacion imperativa
Programacion imperativa
 
Interpolaion c++
Interpolaion c++Interpolaion c++
Interpolaion c++
 
I1M2011-T4: Definición de funciones en Haskell
I1M2011-T4: Definición de funciones en HaskellI1M2011-T4: Definición de funciones en Haskell
I1M2011-T4: Definición de funciones en Haskell
 
Estructurada 7
Estructurada 7Estructurada 7
Estructurada 7
 
1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos
 
Unidad 4 est. dat. recursividad
Unidad 4  est. dat. recursividadUnidad 4  est. dat. recursividad
Unidad 4 est. dat. recursividad
 
Curso recursividad
Curso   recursividadCurso   recursividad
Curso recursividad
 
Programación Funcional con Scheme
Programación Funcional con SchemeProgramación Funcional con Scheme
Programación Funcional con Scheme
 
Recursividad
RecursividadRecursividad
Recursividad
 
Reporte viernes 24
Reporte viernes 24Reporte viernes 24
Reporte viernes 24
 

Similar a Algoritmos y Estructura de Datos (20)

Funciones recursivas
Funciones recursivasFunciones recursivas
Funciones recursivas
 
Recursividad.pdf
Recursividad.pdfRecursividad.pdf
Recursividad.pdf
 
Capítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimientoCapítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimiento
 
5-Unidad 1. Paradigma de la Programación-Orientación a Objetos
5-Unidad 1. Paradigma de la Programación-Orientación a Objetos5-Unidad 1. Paradigma de la Programación-Orientación a Objetos
5-Unidad 1. Paradigma de la Programación-Orientación a Objetos
 
Parte2
Parte2Parte2
Parte2
 
Funciones
FuncionesFunciones
Funciones
 
Programando con Python
Programando con PythonProgramando con Python
Programando con Python
 
Paralela6
Paralela6Paralela6
Paralela6
 
Wx maxima
Wx maximaWx maxima
Wx maxima
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
4 algoritmos
4 algoritmos4 algoritmos
4 algoritmos
 
Catalan
CatalanCatalan
Catalan
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Inducción y Recursión
Inducción y RecursiónInducción y Recursión
Inducción y Recursión
 
Analisis Clase2
Analisis  Clase2Analisis  Clase2
Analisis Clase2
 
Funciones y procedimientos
Funciones y procedimientosFunciones y procedimientos
Funciones y procedimientos
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmos
 

Algoritmos y Estructura de Datos

  • 1. Figure: Algoritmos
  • 2. Conceptos básicos. Programación: 3. Establecer una secuencia de acciones que: • puedan ser ejecutadas por el procesador • realicen una determinada tarea 5. Fases: • Resolución del problema propuesto => determinación de un algoritmo. • Adaptación del algoritmo al computador => codificar el algoritmo en un lenguaje que el computador pueda comprender.
  • 3. Conceptos básicos. • Acción: Etapa en la realización de un trabajo • Acción primitiva: Acción que el procesador puede ejecutar sin necesidad de información adicional. • Algoritmo: Secuencia ordenada de acciones primitivas que realizan un trabajo. Ejemplos: Ir al trabajo Cálculo de la media aritmética de 1.Levantarse dos números con una calculadora 2.Darse una ducha 1.Pulsar la tecla AC 3.Vestirse 2.Teclear el primer número 4.Desayunar 3.Pulsar la tecla + 5.Tomar locomoción 4.Teclear el segundo número 5.Pulsar la tecla + 6.Pulsar la tecla / 7.Teclear el número 2 8.Pulsar la tecla =
  • 4. Confección de un pájaro a partir de un papel cuadrado
  • 5. Confección de un pájaro a partir de un papel cuadrado
  • 8. Conceptos básicos. Aspectos que se deben considerar a la hora de escribir un algoritmo: • Determinación de las primitivas de las que partimos • Lenguaje simbólico a utilizar para desarrollar el algoritmo • Representación de los datos • Establecer datos de entrada • Establecer datos de salida • Establecer las relaciones entre los datos de entrada y los de salida Condiciones que debe cumplir un algoritmo: • Ser finito: El algoritmo debe acabar tras un número finito de pasos • Estar bien definido: Todas las ejecuciones del algoritmo con los mismos datos de entrada deben devolver los mismos datos de salida. Diferencias entre un algoritmo y un programa: • Los algoritmos no son directamente interpretables por el computador => deben ser traducidos a un lenguaje de programación concreto.
  • 9. Definition de algoritmo Es un procedimiento computacional bien definido que toma un conjunto de valores como entrada y produce otro conjunto de valores como salida.
  • 10. Representación de algoritmos • Métodos para representar un algoritmo: – Pseudolenguaje – Diagramas de flujo • Pseudolenguaje – Es un lenguaje específico de descripción de algoritmos – La traducción de un algoritmo escrito en pseudolenguaje a un programa en un lenguaje de programación determinado es relativamente simple • Herramientas de un pseudolenguaje para representar un algoritmo – Conjunto de palabras clave que proporcionan: • las estructuras de control • declaraciones de variables • características de modularidad – Sintaxis libre de un lenguaje natural que describe las características del proceso – Elementos para la definición y llamada a subprogramas
  • 11. Metodología de diseño Un problema => muchos algoritmos para resolverlo ¿Cómo elegir el más adecuado? Basándonos en las siguientes características: – Legibilidad – Eficiencia – Portabilidad – Modularidad – Modificabilidad – Estructuración
  • 12. Metodología de diseño Programación estructurada – Conjunto de técnicas que aumentan la productividad de un programa, reduciendo el tiempo para: • Escribir • Depurar • Verificar • Mantener – Utiliza un número limitado de estructuras de control que minimizan la complejidad de los problemas – Teorema de BOHM-JACOPINI: cualquier programa, por complejo que sea, puede escribirse utilizando sólo tres estructuras de control: – Secuencial – Selectiva – Repetitiva
  • 13. Secuencial Actividad 1 Actividad 2 Actividad n
  • 14. Selección Doble: Simple: sí Condición sí no condición actividad Actividad 1 no Actividad 2 Múltiple: sino sino Condición Condición Condición sí sí sí Actividad 1 Actividad 2 Actividad n-1 Avtividad n
  • 15. Repetición Test false condition true activity
  • 16. Estratégia: Dividir para conquistar Dividir el problema en subproblemas En la resolución de un problema complejo, se divide en  varios sub problemas y seguidamente se vuelven a  dividir los sub problemas en otros mas sencillos,  hasta que puedan implementarse en el computador.  
  • 17. Ordenamiento Entrada: • secuencia de n números  <a1, a2,..,an> Salida: • Una permutación <a'1, a'2,..,a'n>  reordenamiento de la secuencia, tal que:    a'1  <  a'2  <  ...  <  a'n Ejemplo instancia: Entrada: <5,3,1,6,0>     Salida: <0,1,3,5,6>
  • 18. Ordenando una lista en forma alfabética
  • 19. Ordenando una lista en forma alfabética (cont.)
  • 20. Ordenando una lista en forma alfabética (cont.)
  • 21. Algoritmo de sort por inserción en pseudocódigo
  • 22. Búsqueda Entrada: •  secuencia de n números  <a1, a2,..,an> • Un número b Salida: • un entero i, tal que b == ai  (igual) • 0 si b != ai, para i = 1,...,n Ejemplo instancia: Entrada: <5, 6, 9, 12>   y   9         Salida: 3
  • 23. Búsqueda binaria en pseudocódigo
  • 24. Buscando en una lista Copyright © 2003 Pearson Education, Inc. Slide 4-24
  • 25. Ordenamiento por inserción situación de peor caso Insertion-Sort(A) 1 for i <- 2 to n do 3 temp <- A[i] 4 j <- i-1 5 while j>0 and A[j] > temp do 6 A[j+1] <- A[j] Se ejecutan: (n-1)*(n)/2 veces 7 j <- j-1 8 A[j+1] <- temp => O(n2)
  • 26. Gráfico del análisis del peor caso ordenamiento por inserción O(n2)
  • 27. Gráfico del análisis del peor caso búqueda binaria O(log2 n)
  • 29. Recursividad • Son funciones que se llaman a sí mismas. • Requisitos: – Deben retornar un valor. – Deben tener expresiones en las que se llaman a sí mismas:  “ciclo activo”. – Deben incluir, en una sentencia de selección, una opción en  la cual terminen la ejecución y no se llamen a sí mismas:  “caso base”. – Si no poseen un opción que les permita terminar su  ejecución, se producirán llamadas hasta agotar los recursos  de memoria del sistema. – Si se alcanza el “caso base” en una llamada del “ciclo  activo”, entonces se inicia el “ciclo pasivo” o de retorno. 29
  • 30. Recursividad código C tipo_de_retorno nombre_funcion(tipo argumentos){ if ( caso_base ) return valor_base; else { ................ return nombre_funcion(argumentos'); } } 30
  • 31. Recursividad (ejemplo) Obtener el factorial de un número Casos base: - el factorial de cero es uno - factorial de uno es uno - factorial de un número negativo lo hacemos cero. Ciclo activo: - llamar a partir del número en forma descendente hasta llegar al caso base. 31
  • 32. Recursividad (Ejemplo cont.) #include <stdio.h> int factorial(int n){ if (n<0) return 0; if (n==0) return 1; else if (n==1) return 1; else return n*factorial(n-1); } int main(){ int x,fac; printf("Ingrese un número para calcularle el factorial = “); scanf("%d",&x); fac=factorial(x); printf("%d!=%dn",x,fac); return 0; } 32
  • 33. Simulación: ciclo activo main(){ int x = 3; factorial(3){ fac =factorial(3); factorial(x); if (3==0) return 1; else if (3==1) return 1; else return 3*factorial(3-1); factorial(2){ 3*factorial(2); if (2==0) return 1; else if (2==1) return 1; else return 2*factorial(1); 2*factorial(2-1); factorial(1){ if (1==0) return 1; else if (1==1) return 1 1; Caso Base alcanzado!! 33
  • 34. Simulación: ciclo pasivo main(){ int x = 3;factoria factorial(3){ fac = l(3); if (3==0) return 1; factorial(x); else if (3==1) return 1; 3*factorial(2 factorial(2){ else return 3*factorial(3-1); ); if (2==0) return 1; else if (2==1) return 1; else return 2*factorial(2-1); 2*1 34
  • 35. Simulación: ciclo pasivo main(){ int x = 3;factoria factorial(3){ fac = l(3); if (3==0) return 1; factorial(x); else if (3==1) return 1; 3*factorial(2 factorial(2){ else return 3*factorial(3-1); ); if (2==0) return 1; else if (2==1) return 1; else return 2; 35
  • 36. Simulación: ciclo pasivo main(){ int x = 3;factoria factorial(3){ fac = l(3); if (3==0) return 1; factorial(x); else if (3==1) return 1; else return 3*factorial(3-1); 3*2 36
  • 37. Simulación: ciclo pasivo main(){ int x = 3;factoria factorial(3){ fac = l(3); if (3==0) return 1; factorial(x); else if (3==1) return 1; else return 6; 37
  • 38. Simulación: ciclo pasivo main(){ int x = 3; 6; fac = factorial(x); 38