Está en la página 1de 5

Universidad del Quindío

Programa de ingeniería de sistemas y computación


Análisis de algoritmos I
Actividad: Análisis de estructuras de datos

1 Análisis de algoritmos aplicados a estructuras de datos

El propósito de esta actividad es que el estudiante realice el análisis de la complejidad computacional de las
estructuras de datos: listas, pilas, colas, árboles y grafos. Para cada estructura de datos, se plantean una serie
de métodos a los que se deben determinar su complejidad computacional. Esta actividad se realizará de forma
progresiva y se hará una única entrega, con el análisis de las estructuras mencionadas anteriormente.

1.1 Análisis de listas enlazadas

Las listas son estructuras de datos de datos lineales y dinámicas que pueden modificar su tamaño en tiempo de
ejecución, según sea el requerimiento. Generalmente las listas están conformadas por nodos, los cuales son
elementos que almacenan un valor y una referencia. El acceso a la información de los elementos de la lista puede
realizarse de distintas formas. Es posible hacer consultas, eliminación o modificación, en los extremos de las
listas o en algún determinado lugar de la misma. También se acostumbra hacer recorridos en la lista para hacer
búsquedas de información. Otros tipos de listas más especializadas, permiten modificar, eliminar o insertar nodos
a la izquierda o a la derecha, de acuerdo a una referencia específica. Teóricamente, no se tiene acceso aleatorio
a los elementos de lista.

- Los siguientes métodos corresponden a operaciones que se pueden realizar sobre una lista enlazada simple.
Para cada método, se debe establecer el orden de complejidad considerando el peor caso.

Método Descripción Orden de


complejidad
public Lista() Constructor de la lista enlazada O( 1 )

void eliminar() Elimina todos los elementos de la lista O( 1 )

boolean estaVacia() Determina si la lista está vacía. O( 1 )

int getCantidadNodos() Determina la cantidad de nodos de la O( 1 )


lista
void insertarFinal(int valor) Agrega un nuevo nodo al final de la O( 1 )
lista.
void insertarInicio(int valor) Agrega un nuevo nodo al inicio de la O( 1 )
lista.
void insertarEnPosicion(int posicion, Inserta un nuevo nodo después en una O( n )
int valor) posición determinada.
Object getValor(int posicion) Obtiene el valor de un nodo en una O( n )
determinada posición
boolean buscar(Object referencia) Busca si existe un valor en la lista. O( n )

int getPosicion(Object referencia) obtiene un valor con la posición del O( n )


elemento de la lista
void removerPorPosicion(int posicion) Elimina un nodo en la posición indicada O( n )

void imprimir() Imprime todos los elementos de la lista O( n )


Universidad del Quindío
Programa de ingeniería de sistemas y computación
Análisis de algoritmos I
Actividad: Análisis de estructuras de datos
- Los siguientes métodos corresponden a operaciones que se pueden realizar sobre una lista sencilla circular.
Para cada método, se debe establecer el orden de complejidad considerando el peor caso.

Método Descripción Orden de


complejidad
public Lista() Constructor de la lista enlazada O( 1 )

void eliminar() Elimina todos los elementos de la lista O( 1 )

boolean estaVacia() Determina si la lista está vacía. O( 1 )

int getCantidadNodos() Determina la cantidad de nodos de la O( 1 )


lista
void insertarFinal(int valor) Agrega un nuevo nodo al final de la O( 1 )
lista.
void insertarInicio(int valor) Agrega un nuevo nodo al inicio de la O( 1 )
lista.
void insertarEnPosicion(int posicion, Inserta un nuevo nodo después en una O( n )
int valor) posición determinada.
Object getValor(int posicion) Obtiene el valor de un nodo en una O( n )
determinada posición
boolean buscar(Object referencia) Busca si existe un valor en la lista. O( n )

int getPosicion(Object referencia) obtiene un valor con la posición del O( n )


elemento de la lista
void removerPorPosicion(int posicion) Elimina un nodo en la posición indicada O( n )

void imprimir () Imprime todos los elementos de la lista O( n )

- Los siguientes métodos corresponden a operaciones que se pueden realizar sobre una lista doblemente
enlazada. Para cada método, se debe establecer el orden de complejidad considerando el peor caso.

Método Descripción Orden de


complejidad
public Lista() Constructor de la lista enlazada O( 1 )

void eliminar() Elimina todos los elementos de la lista O( 1 )

boolean estaVacia() Determina si la lista está vacía. O( 1 )

int getCantidadNodos() Determina la cantidad de nodos de la O( 1 )


lista
void insertarFinal(int valor) Agrega un nuevo nodo al final de la O( 1 )
lista.
void insertarInicio(int valor) Agrega un nuevo nodo al inicio de la O( 1 )
lista.
void insertarEnPosicion(int posicion, Inserta un nuevo nodo después en una O( n )
int valor) posición determinada.
Object getValor(int posicion) Obtiene el valor de un nodo en una O( n )
determinada posición
boolean buscar(Object referencia) Busca si existe un valor en la lista. O( n )
Universidad del Quindío
Programa de ingeniería de sistemas y computación
Análisis de algoritmos I
Actividad: Análisis de estructuras de datos
int getPosicion(Object referencia) obtiene un valor con la posición del O( n )
elemento de la lista
void removerPorPosicion(int posicion) Elimina un nodo en la posición indicada O( n )

void imprimir () Imprime todos los elementos de la lista O( n )

- Los siguientes métodos corresponden a operaciones que se pueden realizar sobre una lista circular
doblemente enlazada. Para cada método, se debe establecer el orden de complejidad considerando el peor
caso.

Método Descripción Orden de


complejidad
public Lista() Constructor de la lista enlazada O( 1 )

void eliminar() Elimina todos los elementos de la lista O( 1 )

boolean estaVacia() Determina si la lista está vacía. O( 1 )

int getCantidadNodos() Determina la cantidad de nodos de la O( 1 )


lista
void insertarFinal(int valor) Agrega un nuevo nodo al final de la O( 1 )
lista.
void insertarInicio(int valor) Agrega un nuevo nodo al inicio de la O( 1 )
lista.
void insertarEnPosicion(int posicion, Inserta un nuevo nodo después en una O( n )
int valor) posición determinada.
Object getValor(int posicion) Obtiene el valor de un nodo en una O( n )
determinada posición
boolean buscar(Object referencia) Busca si existe un valor en la lista. O( n )

int getPosicion(Object referencia) obtiene un valor con la posición del O( n )


elemento de la lista
void removerPorPosicion(int posicion) Elimina un nodo en la posición indicada O( n )

void imprimir () Imprime todos los elementos de la lista O( n )

1.2 Análisis de la estructura pila

En el contexto de las estructuras de datos, una pila (stack, por su nombre en inglés), es al igual que las listas,
una estructura lineal cuyos elementos se pueden acceder, insertar o por un único lugar. La pila sigue el principio
LIFO (Last In First Out), mediante el cual se puede afirmar que el último elemento en entrar es el primer elemento
en salir. Es por ello que la forma de acceder a los elementos de esta estructura es desde el tope de la línea.
Universidad del Quindío
Programa de ingeniería de sistemas y computación
Análisis de algoritmos I
Actividad: Análisis de estructuras de datos
- Los siguientes métodos corresponden a operaciones que se pueden realizar sobre una pila basada en nodos.
Para cada método, se debe establecer el orden de complejidad considerando el peor caso.

Método Descripción Orden de


complejidad
public Pila() Constructor de la pila O( 1 )
boolean estaVacia() Determina si la pila está vacía. O( 1 )
void push (Object valor) Agrega un elemento a la pila O( 1 )
Object top () Retorna el elemento tope de la pila O( 1 )
Object pop () Elimina el elemento tope de la pila O( 1 )

1.3 Análisis de la estructura cola

La estructura de datos cola se caracteriza porque las inserciones de nuevos elementos solo se permiten en uno
de los extremos de la estructura, que tradicionalmente se llama final de la cola, mientras que las consultas y
eliminación solo se permiten en el extremo opuesto de la cola, llamado frente de la cola.

Una cola es un contenedor de objetos que se insertan y se eliminan siguiendo el principio “Primero en entrar,
primero en salir” (FIFO: First In First Out).

- Los siguientes métodos corresponden a operaciones que se pueden realizar sobre una cola basada en nodos.
Para cada método, se debe establecer el orden de complejidad considerando el peor caso.

Método Descripción Orden de


complejidad
public Cola() Constructor de la cola O( 1 )
boolean estaVacia() Determina si la cola está vacía. O( 1 )
void enqueue (Object nuevo) Agrega un elemento a la cola O( 1 )
Object front () Retorna el elemento frente de la cola O( 1 )
Object dequeue () () Elimina un elemento de la cola O( 1 )
int size () Determina la cantidad de elementos de O( 1 )
la cola

1.4 Análisis de la estructura árbol

Los árboles son estructuras de datos dinámicas con una naturaleza diferente en cuanto a las estructuras de datos
lineales. Esta naturaleza está determinada por su estructura, la cual impone una jerarquía sobre una colección
de elementos. Sobre ellos se encuentra definida una relación de “paternidad” que define la estructura jerárquica.
Un árbol es una colección de elementos llamados nodos, uno de los cuales se distingue como raíz. Los nodos de
un árbol contienen dos o más enlaces. El nodo raíz es el primer nodo de un árbol. Cada enlace del nodo raíz
puede hacer referencia a un hijo. El hijo izquierdo es el primer nodo del subárbol izquierdo, y el hijo derecho es
el primer hijo del subárbol derecho.
Universidad del Quindío
Programa de ingeniería de sistemas y computación
Análisis de algoritmos I
Actividad: Análisis de estructuras de datos

- Los siguientes métodos corresponden a operaciones que se pueden realizar sobre árboles. Para cada
método, se debe establecer el orden de complejidad considerando el peor caso.

Método Descripción Orden de


complejidad
public Arbol() Constructor del árbol O( 1 )
boolean buscar(Nodo nodo) Busca un nodo en el árbol O( log n )
void insertarNodo(Nodo nodo) Inserta un nodo en el árbol O(n log n )
void eliminarNodo(Nodo nodo) Elimina un nodo del árbol O( log n )
void eliminarSubArbol(Nodo nodo) Elimina un subárbol del árbol O( log n )
Nodo buscarMenor () Buscar el menor elemento del árbol O( log n )
Nodo buscarMayor () Buscar el mayor elemento del árbol O( log n )
Nodo eliminarMenor () Elimina el menor elemento del árbol O( log n )
Nodo eliminarMayor () Elimina el mayor elemento del árbol O( log n )
int altura () Retorna la altura del árbol O( 1 )
int peso() Retorna el peso del árbol O( 1 )
void imprimirInorder(Nodo n) Imprime el contenido del árbol en inorden O( n )
void imprimirPostorder(Nodo n) Imprime el contenido del árbol en posorden O( n )
void imprimirPreorder(Nodo n) Imprime el contenido del árbol en preorden O( n )

Nombre y apellido de los integrantes del grupo:

 Juan Felipe Hernandez Martinez

También podría gustarte