You are on page 1of 21

OBJETOS Y ABSTRACCIÓN DE DATOS

DOCENTE:
Christian Torres Morán

CONTENIDO A TRATAR HOY:


Clases de complejidad Algorítmica y estructuras no lineales
Periodo: Mayo - Septiembre 2022
RETROALIMENTACIÓN:
Interrogantes de la clase anterior, debe contestar estas preguntas con sus
propias palabras y ejemplos, subirlos al aula virtual en el repositorio
retroalimentación”:
1. ¿Cuál es el propósito de una notación Big O?
2. ¿Cuáles son los recursos más importante que utilizan estas notaciones?
3. ¿Cómo se crear una métrica para analizar una notación Big O?
4. ¿Cuándo se aplica la notación Big O?
OBJETIVOS DE LA CLASE:

✔ ENTENDER LO QUE ES CLASES DE COMPLEJIDAD ALGORÍTMICA Y SU APLICACIÓN EN EL


ANÁLISIS DE LA COMPLEJIDAD COMPUTACIONAL
✔ ENTENDER COMO FUNCIONA LAS ESTRUCTURAS NO LINEALES, BASADO EN ÁRBOLES.
EXPRESIÓN DE COMPLEJIDAD
Complejidad Computacional
La complejidad computacional es la rama de la computación que estudia la clasificación de los problemas
computacionales de acuerdo a su dificultad y los recursos necesarios para resolverlos. Trata de clasificar los problemas
que pueden o no pueden ser resueltos con una cantidad determinada de recursos.
Como se puede esperar, hay un sin numero de problemas abstractos que pueden ser computados. Se puede además
hacer una clasificación de estos problemas en base a sus tiempos de ejecución y recursos que ocupan (cantidad de
memoria). Las categorías en que se encuentran estos problemas se llaman clases de complejidad.

Existe la posibilidad de aplicar análisis de complejidad algorítmica mediante las matemáticas


utilizando los recursos propuestos por las máquinas de Turing.

En efecto al aplicar teoremas matemáticos a los problemas que son resueltos por un algoritmo que corre en tiempo
polinomial o mas rápido se le dice tratable, mientras que a los problemas que no se pueden resolver vía un algoritmo
polinomial o mas eficiente les llamamos intratables.
LA MÁQUINA DE TURING (DEFINICIONES CONCEPTUALES)
La máquina de Turing consta de un cabezal lector/escritor y una cinta infinita en la que el cabezal lee el contenido, borra el contenido anterior y
escribe un nuevo valor. Las operaciones que se pueden realizar en esta máquina se limitan a:
Avanzar el cabezal lector/escritor hacia la derecha.
Avanzar el cabezal lector/escritor hacia la izquierda.
El cómputo es determinado a partir de una tabla de estados de la forma: (estado, valor) 🡪 (nuevo estado, nuevo valor, dirección)
Esta tabla toma como parámetros el estado actual de la máquina y el carácter leído de la cinta, dando la dirección para mover el cabezal, el
nuevo estado de la máquina y el valor a ser escrito en la cinta. Con este aparato extremadamente sencillo es posible realizar cualquier cómputo
que un computador digital sea capaz de realizar.
Mediante este modelo teórico y el análisis de complejidad de algoritmos, fue posible la categorización de problemas computacionales de
acuerdo a su comportamiento, apareciendo así, el conjunto de problemas denominados P y NP, cuyas soluciones en tiempo polinómico son
encontradas según el determinismo y no determinismo respectivamente de la máquina de Turing.

Uno de los teoremas más importantes sobre las máquinas de Turing es que pueden simular el comportamiento de una computadora. Por ello, si un
problema no puede ser resuelto por una de estas máquinas, entonces tampoco puede ser resuelto por una computadora (problema indecidible,
NP).
La notación de las máquinas de Turing es sencilla y exacta, por lo que es más cómodo trabajar con ellas a la hora de estudiar qué problemas
son decidibles (P) y cuáles indecidibles (NP).
P es la clase de complejidad que contiene problemas de decisión que se pueden resolver en un tiempo polinómico.
La clase de complejidad NP contiene problemas que no pueden resolverse en un tiempo polinómico. Cuando se dice que un algoritmo no puede
obtener una solución a un problema en tiempo polinómico siempre se intenta buscar otro procedimiento que lo consiga mejorar.
DEFINICIONES CONCEPTUALES
La entrada de una máquina de Turing viene determinada por el estado actual y el símbolo leído (un par [estado, símbolo]), siendo el cambio de
estado, la escritura de un nuevo símbolo y el movimiento las acciones a tomar en función de una entrada. En el caso de que para cada par estado
y símbolo posible exista a lo sumo una posibilidad de ejecución, se dirá que es una máquina de Turing determinista, mientras que en el caso de
que exista al menos un par [estado, símbolo] con más de una posible combinación de actuaciones se dirá que se trata de una máquina de Turing
no determinista.
Máquina de Turing cuántica.- La estructura de una máquina de Turing cuántica es muy similar a la de una máquina de Turing clásica, la única
diferencia es que cada elemento de la cinta de la máquina cuántica es un qubit. El alfabeto de esta nueva máquina está formado por el espacio
de valores del qubit (quantum bit).
Clases de complejidad
Esta definición conceptual esta basada en categorizar las clases de complejidades de un conjunto de problemas que poseen una misma
complejidad computacional. las clases de complejidades definidas como sencillas se definen teniendo en cuenta factores como:
El tipo de problema computacional: Los problemas más comúnmente utilizados son los problemas de decisión, pero las clases de
complejidad se pueden definir para otros tipos de problemas.
El modelo de cómputo: El modelo de cómputo más común es la Máquina de Turing determinista, pero muchas clases de complejidad se
basan en Máquinas de Turing no deterministas, Máquinas de Turing cuánticas, etc.
El recurso (o recursos) que está(n) siendo acotado(s) y la(s) cota(s): Estas dos propiedades usualmente se utilizan juntas, por ejemplo,
"tiempo polinomial", "espacio logarítmico", "profundidad constante", etc.

Por ejemplo, si determinar el camino óptimo que debe recorrer un repartidor que pasa por N casas necesita menos de 50N2+N
segundos, entonces el problema es resoluble en un "tiempo polinómico".
Ejemplo de expresiones polinómicas: n2+5n 2n6+8n4+5n2 O(log n) O(n) O(n2) O(n3)

La aplicación y resolución de ejercicios se tratarán al final del semestre


ESTRUCTURAS DE DATOS NO LINEALES
Recuerde que en una estructura lineal, cada elemento puede ir enlazado al siguiente y/o al anterior.

A las estructuras de datos no lineales se les llama también estructuras de datos multi-enlazadas.
▪ En estas estructuras cada elemento puede tener varios elementos “siguientes”, lo cual introduce el concepto de
estructuras de ramificación. Estas estructuras de datos de ramificación son llamadas grafos y arboles

Se trata de estructuras de datos en las que cada elemento puede tener varios sucesores y/o varios predecesores.
▪ Árboles: Un árbol es una estructura de datos homogénea, dinámica y no lineal en la que cada nodo (elemento)
puede tener varios nodos posteriores, pero solo puede tener un nodo anterior.
▪ Grafos: Cada elemento puede estar enlazado a cualquier otro basado en la relación existente entre ellos.
REPRESENTACIÓN GRÁFICA DE ESTRUCTURAS NO LINEALES:

Árboles: Grafos:
ESTRUCTURAS DE DATOS NO LINEALES: ÁRBOLES
✔ Un árbol es dinámico porque su estructura puede cambiar durante la ejecución de un programa. Y no lineal, ya que cada nodo
del árbol puede contener varios nodos que dependan de él.
▪ Existe un único camino entre el primer nodo de la estructura y cualquier otro nodo.
✔ La estructura de un árbol se forma de nodos y arcos (línea que une dos nodos),
el primero de los nodos del árbol recibe el nombre de raíz, del cual se
desprenden los nodos interiores y de éstos los nodos llamados hoja, que son los
nodos que se encuentran al final del árbol; todos ellos en conjunto forman un
árbol.
✔ En informática se utilizan para aplicaciones algorítmicas (ordenación, búsqueda), compilación (árboles sintácticos, árboles de
expresiones), etc..
✔ Se toma en cuenta los conceptos básicos al momento de construir o programar un árbol, estos conceptos se los clasifica en:
Relación con otros nodos, Posición dentro del árbol y Tamaño del árbol
En relación con otros nodos:
▪ Padre, es el nodo del cual se derivan otros nodos.
▪ Hijo, es el nodo que depende de otro.
▪ Hermano, es el nodo que se encuentra al lado del nodo hijo y que dependen del mismo nodo padre.

En cuanto a la posición dentro del árbol:


▪ Raíz, es el primero de los nodos y el único que no contiene un padre.
▪ Hoja, es el nodo que se encuentra al final del árbol.
▪ Interior, es un nodo que no es raíz ni hoja y se encuentre entre ellos.
ESTRUCTURAS DE DATOS NO LINEALES: ÁRBOLES
En relación a su tamaño:
▪ Orden, es el número potencial de nodos hijos que tiene un nodo padre (
Binario tiene orden 2).
▪ Grado, es el número máximo de hijos que tiene un nodo.
▪ Nivel, es el número de arcos que deben ser recorridos para llegar a un
determinado nodo más uno.
▪ Altura, es el número de niveles que deben pasar para llegar al final del
árbol o de la ramificación.
▪ Peso, es el número de nodos del árbol.
▪ Camino, es la serie de nodos que tienes que pasar para llegar hasta un
nodo.
▪ Longitud de camino, es el número de arcos más uno que debe cruzar
para llegar a un nodo.
▪ Rama, es el camino que se forma desde el nodo raíz hasta un nodo hoja.
ESTRUCTURAS DE DATOS NO LINEALES: ÁRBOLES
✔ Formalmente, un árbol A es un conjunto finito de elementos con 0 o más nodos de forma que:
▪ Se trata de una estructura vacía.
▪ Si tiene componentes, los nodos restantes se dividen en uno o más conjuntos disjuntos cada uno de los cuales es a su vez un
árbol. A estos nodos se les llama subárboles del raíz.
▪ Se trata de una estructura recursiva.

✔ Se utilizan para representar todo tipo de jerarquías: árbol genealógico, taxonomías, diagramas de organización, etc.
ÁRBOLES: UTILIZACIÓN DE VARIOS TÉRMINOS
✔ Nodo: los vértices o elementos de un árbol.
✔ Enlace/arco/arista: Conexión entre dos nodos consecutivos.
✔ Los nodos pueden ser:
▪ Nodo raíz: nodo superior de la jerarquía.
▪ Nodo terminal u hoja: nodo que no contienen ningún subárbol.
▪ Nodos interiores: nodos con uno o más subárboles; nodos que no son hojas.
▪ Descendientes o hijos: cada uno de los subárboles de un nodo.
▪ Ascendiente, antecesor o padre: nodo de jerarquía superior a uno dado.
▪ Nodos hermanos: nodos del mismo padre.
✔ Bosque: colección de árboles.
✔ Camino: enlace entre dos nodos.
▪ No existe un camino entre todos los nodos.
✔ Rama: camino que termina en una hoja.
✔ Grado de un nodo: número de subárboles que tiene.
✔ Grado de un árbol al mayor de los grados de todos sus nodos.
✔ Nivel de un nodo o longitud del camino: número de arcos o enlaces que hay desde el nodo raíz hasta un nodo dado.
✔ Altura o profundidad de un árbol: número máximo de nodos de una rama; el nivel más alto de un árbol más uno.
✔ Peso de un árbol: número de nodos terminales.
ÁRBOLES: Ejemplos de términos

Padre de C:
A A
Padre de E: B
B C
Padre de G
C
E G Padre de A:
D F NO
Hijos de A: C
B
Hijos de C:
F G
Hijos de F:
NO
ÁRBOLES: Ejemplos de términos

Secuencias
A
de A a G
B C de A a E
de A a F
D E F G
C es sucesor de A y
F es sucesor de C
ÁRBOLES: Ejemplos de términos

A Grado
de A: 2
B C de E: 3
de G: 1
D E F G
de J: 0
Grado del árbol: 3
H I J K
Nodos hojas:
D, H, I, J, F, K
Nodos ramas: A, B, C, E, G
ÁRBOLES: Ejemplos de términos

A Nivel
de A: 0
B C
de E:
2
D E F G de B:
1
de I:
3
H I de G:
2
ÁRBOLES: Ejemplos de términos

A Padre de G:
C
B C Hijos de C:
E F G
Hermanos de I:
H J
D E F G

H I J
ÁRBOLES: Ejemplos de términos
Un árbol binario es una estructura de datos homogénea, dinámica y no lineal en donde a cada nodo le pueden seguir como
máximo dos nodos hijos (que pueden estar vacíos), y cada hijo se designa ya sea como hijo izquierdo o como hijo derecho.

Un árbol binario es distinto cuando su estructura es


diferente a la de otros árboles binarios.

Un árbol binario es similar cuando su estructura es


idéntica a la de otros árboles binarios, pero la
información que guardan los nodos es diferente entre sí.

Un árbol binario es equivalente cuando su estructura e


información de sus nodos es idéntica a la de otros
árboles binarios.

Un árbol binario es equilibrado es aquel que todos


sus nodos cumplen con la propiedad:
altura (subárbol izq) – altura (subárbol der) <= 1
▪ El primero tiene una altura izquierda de 2 y derecha 1, 2-1 <= 1, la
condición es verdadera, por lo tanto es un árbol equilibrado.
▪ El segundo tiene una altura izquierda de 2 y derecha 0, 2-0 <= 1,
la condición es falsa, por lo tanto es un árbol no equilibrado.
ÁRBOLES: Ejemplos de términos
Un árbol degenerado es cuando todos sus nodos sólo tienen un subárbol.

Un árbol binario es completo cuando todos sus nodos excepto los del último nivel, tienen dos
hijos y todas las hojas están en el mismo nivel. Para calcular el número de nodos de un árbol
completo se aplica la formula:
Número de nodos = 2altura - 1
Ejemplo. La altura de este árbol anterior es 3, aplicando la fórmula del número de nodos seria.
Número de nodos = 23 – 1 = 8 – 1 = 7

✔ Árbol completo de nivel n A A


a un árbol en el que cada
nodo de nivel n es una hoja
y cada nodo de nivel menor B C B C
que n tiene, al menos, un
subárbol no vacío.
D E F G D E
Árbol completo de nivel 2 Árbol no completo de nivel 2
Cada nodo del nivel n es una hoja Un nodo del nivel n-1 es una hoja
ÁRBOLES: Otros términos
✔ Árbol ordenado a todo árbol para el que se considera el orden relativo de los sucesores o subárboles de cualquier nodo. Es
decir, en un árbol ordenado se habla de primero, segundo o último hijo de un nodo en particular. El primer hijo de un nodo de un
árbol ordenado es denominado el hijo mayor de ese nodo y el último hijo es denominado el menor.
✔ El Árbol es ordenado si al intercambiar el orden relativo de los subárboles de un nodo, representa una situación semánticamente
diferente.

EJEMPLOS: ÁRBOL GENEALÓGICO DE MARÍA (SIN LOS HERMANOS)

Marí
a
Jua Luis
El árbol es ordenado n a
El primer subárbol corresponde al padre.
El segundo subárbol a la madre. Jo El Ped Lis
sé sa ro a
ÁRBOLES: Otros términos
✔ Árbol orientado a un árbol para el cual no interesa el orden relativo de los sucesores o subárboles de cualquier nodo, ya que
sólo se tiene en cuenta la orientación de los nodos.

✔ La estructura organizativa de una empresa, donde no es importante el orden de los subdirectores a la hora de representarlos
en el árbol.

✔ En la solución de problemas informáticos, los más utilizados son los árboles ordenados.

✔ Una floresta es una colección de dos o más árboles disjuntos.

✔ Aclaraciones:
▪ Disjuntos significa que no hay nodos en común entre dos árboles cualesquiera de la misma.
▪ De un árbol se obtiene una floresta al quitarle la raíz, si tiene dos hijos o más.
▪ De una floresta se obtiene un árbol al añadir un nodo que sea raíz de todos los árboles que la conforman.
ÁRBOLES: Floresta

C B B
B

E G D E F G
D F

H J H I J
I

Es una
Es un árbol
floresta NO es una floresta

You might also like