UNIVERSIDAD DE PANAMA
Facultad de Informática, Electrónica y Comunicación.
INTEGRANTES:
• YESENIA CAMARENA
• GÉNESIS JIMÉNEZ
• MARCOS LUCERO
INDICE
 Extructuras dinamicas no lineales
 Estructuras no lineales
 Aplicciones
 Recorrido de arboles
 Formas de recorrido
 Recursividad
 Programacion recursiva
 Procedimiento de recurso
 Pseudocodigo de la función factorial.
INTRODUCCION
En el siguiente tema, hablaremos de las estructuras de datos no lineales también llamada
arboles. Estaremos dando una introducción al análisis de la eficiencia de algoritmos.
El estudio de las estructuras de datos se hace desde diversos puntos de vista, diseño de
estructura en respuesta a necesidades especificas, encapsulamiento de los tipos de datos
usándolos en base a su especificación y no a su implementación y estudio de los
principales tipos, tanto elementos y no elementales, dividiendo estos últimos en
estructuras lineales o arboles gráficos.
Analizándolos primero desde el punto de vista teórico sin perder de vista su aplicaciones
graficas.
Estructuras Dinámicas No Lineales
Son aquellas que ocupan bloques de memoria no continuos/lineales. Para lidiar con el
problema de la fragmentación y, sobre todo del crecimiento dinámico. Los bloques deben
estar enlazados unos con otros para poder “navegar” por la estructura, es decir, tener
acceso a otro(s) dato(s) a partir de la actual.
Estructuras no lineales
Un árbol es una estructura de datos ramificada (no lineal) que puede representarse como
un conjunto de nodos enlazados entre sí por medio de ramas. La información contenida
en un nodo puede ser de cualquier tipo simple o estructura de datos.
Aplicaciones
Los árboles tienen una gran variedad de aplicaciones. Por ejemplo, se pueden utilizar para
representar fórmulas matemáticas, para organizar adecuadamente la información, para
construir un árbol genealógico, en la toma de decisiones, para el análisis de circuitos
eléctricos y para numerar los capítulos y secciones de un libro.
Las aplicaciones de los árboles binarios son muy variadas ya que se les puede utilizar para
representar una estructura en la cual es posible tomar decisiones con dos opciones en
distintos puntos.
RECORRIDO DE ARBOLES
se refiere al proceso de visitar de una manera sistemática, exactamente una
vez, cada nodo en una estructura de datos de árbol (examinando y/o
actualizando los datos en los nodos). Tales recorridos están clasificados por
el orden en el cual son visitados los nodos. Los siguientes algoritmos son
descritos para un árbol binario , pero también pueden ser generalizados a
otros árboles.
FORMAS DE RECORRIDOS
RECORRIDOS EN ÁRBOLES BINARIOS:
en una estructura de datos lineal sólo es posible un tipo de recorrido en dos sentidos
distintos:
 Del primero al último o del último al primero
RECORRIDOS DE PROFUNIDAD
Tres tipos de recorridos dependiendo del orden en que se acceda al subárbol izquierdo, al
subárbol derecho o al nodo raíz
En los tres recorridos se accede antes al hijo izquierdo que al hijo derecho.
La variación reside en el momento en que se recorrerá la información del nodo.
Recorrido preorden u orden previo (RID, raíz-hijo izquierdo-hijo derecho).
Recorrido inorden u orden simétrico (IRD, hijo izquierdo-raíz-hijo derecho).
Recorrido postor den u orden posterior (IDR, hijo izquierdo- hijo derecho-raíz).
 Recorridos en profundidad
 Recorrido preorden.
 Por cada elemento no vacío:
 Se accede primero al nodo raíz.
 Se accede al hijo izquierdo en preorden.
 Se accede al hijo derecho en preorden.
 Recorrido inorden.
 Por cada elemento no vacío:
 Se accede al hijo izquierdo en inorden.
 Se accede primero al nodo raíz.
 Se accede al hijo derecho en inorden.
 Recorrido postorden.
 Por cada elemento no vacío:
 Se accede al hijo izquierdo en postorden.
 Se accede al hijo derecho en postorden.
 Se accede primero al nodo raíz.
RECURSIVIDAD
Es un concepto bastante importante y bien básico de la programación. Sin
embargo es bastante difícil de asimilar al principio. Se supone que es algo
que se va entendiendo con práctica y tiempo.
Es una forma mucho más natural que la iteración de expresar un gran
número de funciones y procedimientos.
PROGRAMACION RECURSIVA
Es mucho mas difícil desarrollar una solución recursiva en un lenguaje
determinado para resolver un problema especifico cuando no se tiene un
algoritmo. No es solo el programa sino las definiciones originales y los
algoritmos los que deben desarrollarse. En general, cuando encaramos la
tarea de escribir un programa para resolver un problema no hay razón para
buscar una solución recursiva. La mayoría de los problemas pueden
resolverse de una manera directa usando métodos no recursivos. Sin
embargo, otros pueden resolverse de una manera mas lógica y elegante
mediante la recursión.
 Ejemplo PARA CALCULAR 0,1,2En matemáticas, la sucesión de Fibonacci es la siguiente sucesión infinita de
números naturales: 0,1,1,2,3,5,8,13,21,34,55,89,144...
El primer elemento es 0, el segundo es 1 y cada elemento restante es la suma de los dos anteriores:
0 si i = 0
fi = 1 si i = 1 f(i-2)+f(i-1) si i > 1
A cada elemento de esta sucesión se le llama número de Fibonacci. Esta sucesión fue descrita en
Europa por Leonardo de Pisa, matemático italiano del siglo XIII también conocido como Fibonacci.
El código en C++ que representa la función Fibonacci es el siguiente:
 #include <iostream>
 #include <cstdlib>
 using namespace std;
 int Fibonacci(int n);
PROGRAMACION RECURSIVA
int main(){
int valor;
system("clear");
cout << "Introduzca numero a calcular: ";
cin >> valor;
cout << "nEl Fibonacci de " << valor << " es: " << Fibonacci(valor) << endl;
return 0;
}
int Fibonacci(int n){ if (n < 0){
cout << “No existe Fibonacci para numeros negativos.”;
} else if (n == 0) {
return 0;
} else if (n == 1) {
return;
}else
return Fibonacci(n-2) + Fibonacci(n -1);
PROCEDIMIENTOS RECURSIVO
es aquél que se llama a sí mismo. En general, esta no suele ser la manera
más eficaz de escribir código en Visual Basic. En el siguiente procedimiento
se utiliza la recursividad para calcular el factorial de su argumento original.
 Se puede utilizar el siguiente método para escribir cualquier rutina recursiva.
 Primero obtener una función exacta del problema a resolver.
 A continuación, determinar el tamaño del problema completo que hay que resolver, este
tamaño determina los valores de los parámetros en la llamada inicial al procedimiento o
función.
 Resolver el caso base en el que el problema puede expresarse no recursivamente, esto
asegura una respuesta afirmativa a la pregunta base.
 Por último, resolver el caso general correctamente en términos de un caso más pequeño
del mismo problema, es decir una respuesta afirmativa a las preguntas 2 y 3 del método
de las 3 preguntas.
El siguiente ejemplo es sobre el uso de recursividad
A) FUNCIÓN FACTORIAL
El Producto de los enteros positivos, desde 1 hasta N se llama FACTORIAL, y normalmente se denota por N!
Por ejemplo N!=1X2X3... (N-2)(N-1)N
También podemos decir que 0! = 1, esto significa que cero factorial es igual a 1, entonces para todos los
valores enteros no negativos la función está bien definida.
Esto queda como resultado: N!=N(N-1)!
De acuerdo con esto queda entonces de la siguiente forma:
si N=0 entonces N!= 1, quiere decir que si los valores de factorial son 0 o 1 el resultado da 1
si N>0 entonces N!(N-1)!
Se observa que esta definición es recursiva, ya que se llama así misma la función factorial para obtener su
resultado.
El siguiente es el pseudocódigo de la función factorial
Pseudocodigo de la función factorial.
FUNCION FACTORIAL(n)
INICIO
Si n= 0 entonces
FACTORIAL =1
Sino
FACTORIAL= n*FACTORIAL (n-1)
FinSi
Fin Funcion
Programa en C# de función factorial
BIBLIOGRAFIA
• Robotica.uv.es
• https://unload.wikimedia.org
• Decsai.urg.es
• Interactivepython.org

Genesis grupo 1

  • 1.
    UNIVERSIDAD DE PANAMA Facultadde Informática, Electrónica y Comunicación. INTEGRANTES: • YESENIA CAMARENA • GÉNESIS JIMÉNEZ • MARCOS LUCERO
  • 2.
    INDICE  Extructuras dinamicasno lineales  Estructuras no lineales  Aplicciones  Recorrido de arboles  Formas de recorrido  Recursividad  Programacion recursiva  Procedimiento de recurso  Pseudocodigo de la función factorial.
  • 3.
    INTRODUCCION En el siguientetema, hablaremos de las estructuras de datos no lineales también llamada arboles. Estaremos dando una introducción al análisis de la eficiencia de algoritmos. El estudio de las estructuras de datos se hace desde diversos puntos de vista, diseño de estructura en respuesta a necesidades especificas, encapsulamiento de los tipos de datos usándolos en base a su especificación y no a su implementación y estudio de los principales tipos, tanto elementos y no elementales, dividiendo estos últimos en estructuras lineales o arboles gráficos. Analizándolos primero desde el punto de vista teórico sin perder de vista su aplicaciones graficas.
  • 4.
    Estructuras Dinámicas NoLineales Son aquellas que ocupan bloques de memoria no continuos/lineales. Para lidiar con el problema de la fragmentación y, sobre todo del crecimiento dinámico. Los bloques deben estar enlazados unos con otros para poder “navegar” por la estructura, es decir, tener acceso a otro(s) dato(s) a partir de la actual.
  • 5.
    Estructuras no lineales Unárbol es una estructura de datos ramificada (no lineal) que puede representarse como un conjunto de nodos enlazados entre sí por medio de ramas. La información contenida en un nodo puede ser de cualquier tipo simple o estructura de datos.
  • 6.
    Aplicaciones Los árboles tienenuna gran variedad de aplicaciones. Por ejemplo, se pueden utilizar para representar fórmulas matemáticas, para organizar adecuadamente la información, para construir un árbol genealógico, en la toma de decisiones, para el análisis de circuitos eléctricos y para numerar los capítulos y secciones de un libro. Las aplicaciones de los árboles binarios son muy variadas ya que se les puede utilizar para representar una estructura en la cual es posible tomar decisiones con dos opciones en distintos puntos.
  • 7.
    RECORRIDO DE ARBOLES serefiere al proceso de visitar de una manera sistemática, exactamente una vez, cada nodo en una estructura de datos de árbol (examinando y/o actualizando los datos en los nodos). Tales recorridos están clasificados por el orden en el cual son visitados los nodos. Los siguientes algoritmos son descritos para un árbol binario , pero también pueden ser generalizados a otros árboles.
  • 8.
    FORMAS DE RECORRIDOS RECORRIDOSEN ÁRBOLES BINARIOS: en una estructura de datos lineal sólo es posible un tipo de recorrido en dos sentidos distintos:  Del primero al último o del último al primero RECORRIDOS DE PROFUNIDAD Tres tipos de recorridos dependiendo del orden en que se acceda al subárbol izquierdo, al subárbol derecho o al nodo raíz En los tres recorridos se accede antes al hijo izquierdo que al hijo derecho. La variación reside en el momento en que se recorrerá la información del nodo. Recorrido preorden u orden previo (RID, raíz-hijo izquierdo-hijo derecho). Recorrido inorden u orden simétrico (IRD, hijo izquierdo-raíz-hijo derecho). Recorrido postor den u orden posterior (IDR, hijo izquierdo- hijo derecho-raíz).
  • 9.
     Recorridos enprofundidad  Recorrido preorden.  Por cada elemento no vacío:  Se accede primero al nodo raíz.  Se accede al hijo izquierdo en preorden.  Se accede al hijo derecho en preorden.  Recorrido inorden.  Por cada elemento no vacío:  Se accede al hijo izquierdo en inorden.  Se accede primero al nodo raíz.  Se accede al hijo derecho en inorden.  Recorrido postorden.  Por cada elemento no vacío:  Se accede al hijo izquierdo en postorden.  Se accede al hijo derecho en postorden.  Se accede primero al nodo raíz.
  • 10.
    RECURSIVIDAD Es un conceptobastante importante y bien básico de la programación. Sin embargo es bastante difícil de asimilar al principio. Se supone que es algo que se va entendiendo con práctica y tiempo. Es una forma mucho más natural que la iteración de expresar un gran número de funciones y procedimientos.
  • 11.
    PROGRAMACION RECURSIVA Es muchomas difícil desarrollar una solución recursiva en un lenguaje determinado para resolver un problema especifico cuando no se tiene un algoritmo. No es solo el programa sino las definiciones originales y los algoritmos los que deben desarrollarse. En general, cuando encaramos la tarea de escribir un programa para resolver un problema no hay razón para buscar una solución recursiva. La mayoría de los problemas pueden resolverse de una manera directa usando métodos no recursivos. Sin embargo, otros pueden resolverse de una manera mas lógica y elegante mediante la recursión.
  • 12.
     Ejemplo PARACALCULAR 0,1,2En matemáticas, la sucesión de Fibonacci es la siguiente sucesión infinita de números naturales: 0,1,1,2,3,5,8,13,21,34,55,89,144... El primer elemento es 0, el segundo es 1 y cada elemento restante es la suma de los dos anteriores: 0 si i = 0 fi = 1 si i = 1 f(i-2)+f(i-1) si i > 1 A cada elemento de esta sucesión se le llama número de Fibonacci. Esta sucesión fue descrita en Europa por Leonardo de Pisa, matemático italiano del siglo XIII también conocido como Fibonacci. El código en C++ que representa la función Fibonacci es el siguiente:  #include <iostream>  #include <cstdlib>  using namespace std;  int Fibonacci(int n);
  • 13.
    PROGRAMACION RECURSIVA int main(){ intvalor; system("clear"); cout << "Introduzca numero a calcular: "; cin >> valor; cout << "nEl Fibonacci de " << valor << " es: " << Fibonacci(valor) << endl; return 0; } int Fibonacci(int n){ if (n < 0){ cout << “No existe Fibonacci para numeros negativos.”; } else if (n == 0) { return 0; } else if (n == 1) { return; }else return Fibonacci(n-2) + Fibonacci(n -1);
  • 14.
    PROCEDIMIENTOS RECURSIVO es aquélque se llama a sí mismo. En general, esta no suele ser la manera más eficaz de escribir código en Visual Basic. En el siguiente procedimiento se utiliza la recursividad para calcular el factorial de su argumento original.
  • 15.
     Se puedeutilizar el siguiente método para escribir cualquier rutina recursiva.  Primero obtener una función exacta del problema a resolver.  A continuación, determinar el tamaño del problema completo que hay que resolver, este tamaño determina los valores de los parámetros en la llamada inicial al procedimiento o función.  Resolver el caso base en el que el problema puede expresarse no recursivamente, esto asegura una respuesta afirmativa a la pregunta base.  Por último, resolver el caso general correctamente en términos de un caso más pequeño del mismo problema, es decir una respuesta afirmativa a las preguntas 2 y 3 del método de las 3 preguntas.
  • 16.
    El siguiente ejemploes sobre el uso de recursividad A) FUNCIÓN FACTORIAL El Producto de los enteros positivos, desde 1 hasta N se llama FACTORIAL, y normalmente se denota por N! Por ejemplo N!=1X2X3... (N-2)(N-1)N También podemos decir que 0! = 1, esto significa que cero factorial es igual a 1, entonces para todos los valores enteros no negativos la función está bien definida. Esto queda como resultado: N!=N(N-1)! De acuerdo con esto queda entonces de la siguiente forma: si N=0 entonces N!= 1, quiere decir que si los valores de factorial son 0 o 1 el resultado da 1 si N>0 entonces N!(N-1)! Se observa que esta definición es recursiva, ya que se llama así misma la función factorial para obtener su resultado. El siguiente es el pseudocódigo de la función factorial
  • 17.
    Pseudocodigo de lafunción factorial. FUNCION FACTORIAL(n) INICIO Si n= 0 entonces FACTORIAL =1 Sino FACTORIAL= n*FACTORIAL (n-1) FinSi Fin Funcion Programa en C# de función factorial
  • 18.