100% encontró este documento útil (2 votos)
148 vistas10 páginas

Complejidad y Algoritmos de Ordenamiento

En una lista ligada, insertar un nuevo alumno tomaría O(1) tiempo en el mejor caso si se inserta al inicio o final, o O(n) tiempo en el peor caso si se inserta en una posición específica, requiriendo recorrer la lista. En una lista doblemente ligada, la inserción tomaría O(1) tiempo independientemente de dónde se inserte el nuevo nodo.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (2 votos)
148 vistas10 páginas

Complejidad y Algoritmos de Ordenamiento

En una lista ligada, insertar un nuevo alumno tomaría O(1) tiempo en el mejor caso si se inserta al inicio o final, o O(n) tiempo en el peor caso si se inserta en una posición específica, requiriendo recorrer la lista. En una lista doblemente ligada, la inserción tomaría O(1) tiempo independientemente de dónde se inserte el nuevo nodo.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Universidad Abierta y a Distancia de México

Lic. en Matemáticas

Unidad 2. Complejidad Computacional

Actividad 3. Ordenamientos y Búsquedas

Alumna: Yazmin Castillo Ortiz

Matricula: ES1821000588
¿Cuál es la complejidad de búsqueda en un árbol binario y por qué?

(log ).
El tiempo total de cómputo es que le lleva examinar la mitad restante de su entrada más
una constante d, donde se pone todas las asignaciones y operaciones qué sean de
complejidad O(1); excepto por la operación en la qué recuperas el elemento buscando
del arreglo L.
T(n)=T (n/2)+d
T(1)=1

Entonces, para las diferentes iteraciones obtienes la siguiente progresión considerando


el peor de los casos
1: T(n)= T (n/2)+d
2: T(n)=[T(n/4)+d]+d=T(n)=T(n/4)+2d
:
k=T(n)=T(1)

De la misma forma, como la última iteración es T(1)=1, implica qué


n/2K=1=k=log n
T(n)=1+log n

Por lo tanto T(n)= 0 (log n)


Investiga el algoritmo y complejidad de los siguientes algoritmos de ordenamiento

Algoritmo ¿en qué consiste ? Complejidad


BubbleSort El algoritmo de Ordenamiento Burbuja o Bubblesort Su complejidad es de 0(n^2).
(Burbuja) es un algoritmo que trabaja sobre un arreglo de
números, tomando el ultimo elemento y
comparándolo con su anterior y si hubiese cambio
los ordena, se le llama burbuja por que hace las
comparaciones de tal manera que asemejan
a burbujas subiendo desde el fondo del agua.

El esquema de la implementacion es esta:

1° Ingresa Arreglo de números


2° La función Burbuja los ordena
3° Se Muestra el Arreglo de números

El algoritmo burbuja en su implementacion usa una


variable auxiliar para hacer el intercambio en caso el
dato anterior sea mayor.
Investiga el algoritmo y complejidad de los siguientes algoritmos de ordenamiento

Algoritmo ¿en qué consiste ? Complejidad


Shell Sort Opera mediante una serie de iteraciones, utilizando Peor caso: O(n^2): Cuando Los
un algoritmo de ordenación simple (Insert Sort) elementos estan en orden
entre elementos que se encuentran dentro de un inverso.
determinado espacio dentro del vector.
Mejor caso: O(n log n). Cuando
Procedimiento el vector esta previamente
Se determinan valores de espaciado utilizando una ordenado
de las formulas disponibles, el primer valor es 1, y el
limite se basa en el tamaño del vector.
Se divide el vector en subvectores cuya cantidad de
elementos esta definida por uno de los valores de
espaciado, empezando por el mayor hasta llegar a 1.
Cada subvector se ordena utilizando insert sort. una
vez esten ordenado los subvectores se divide por el
valor siguiente. Cada uno de los subvectores esta
ordenado.
Una vez se alcance el espaciado 1, se ordena todo el
vector completo.
Investiga el algoritmo y complejidad de los siguientes algoritmos de ordenamiento

Algoritmo ¿en qué consiste ? Complejidad


Radix Sort Es un algoritmo de ordenamiento conocido en el mundo de la O (n )
programación que ordena enteros a partir de sus dígitos de forma
individual.
El siguiente ejemplo funciona con una lista desordenada de números.
1. En primer lugar los va ordenando tomando en consideración el número menos
significativo (la unidad) del más pequeño al más grande. (punto 1)
2. Luego, a partir de la lista que obtuvimos en el paso anterior, ordenamos los
números de menor a mayor considerando esta vez la decena de cada uno de ellos.
(punto 2)
3. Finalmente comprobamos que la lista fue ordenada satisfactoriamente mediante
este procedimiento.
Investiga el algoritmo y complejidad de los siguientes algoritmos de ordenamiento

Algoritmo ¿en qué consiste ? Complejidad


Merge El método MergeSort es un algoritmo de ordenación recursivo con un O(n log n).
Sort número de comparaciones entre elementos del array mínimo.
Su funcionamiento es similar al Quicksort, y está basado en la técnica
divide y vencerás.
De forma resumida el funcionamiento del método MergeSort es el
siguiente:
- Si la longitud del array es menor o igual a 1 entonces ya está ordenado.
- El array a ordenar se divide en dos mitades de tamaño similar.
- Cada mitad se ordena de forma recursiva aplicando el método
MergeSort.
- A continuación las dos mitades ya ordenadas se mezclan formando una
secuencia ordenada.
Investiga el algoritmo y complejidad de los siguientes algoritmos de ordenamiento

Algoritmo ¿en qué consiste ? Complejidad


Quick Sort Quicksort es un algoritmo basado en la técnica de divide y complejidad
vencerás, que permite, en promedio, ordenar n elementos en promedio de
un tiempo proporcional a n log n. O(n•log n) y
El algoritmo fundamental es el siguiente: de O(n^2) en
1. Elegir un elemento de la lista de elementos a ordenar, al que el peor de los
llamaremos pivote. casos
2. Resituar los demás elementos de la
lista a cada lado del pivote, de manera
que a un lado queden todos los
menores que él, y al otro los mayores.
En este momento, el pivote ocupa
exactamente el lugar que le
corresponderá en la lista ordenada.
3. La lista queda separada en dos
sublistas, una formada por los
elementos a la izquierda del pivote, y
otra por los elementos a su derecha.
4. Repetir este proceso de forma
recursiva para cada sublista mientras
éstas contengan más de un elemento.
Una vez terminado este proceso todos
los elementos estarán ordenados.
Supón que tienes que implementar un sistema de administración de alumnos y decides organizarlos en las
siguientes estructuras de datos ¿Cuánto tardarías en acomodar a un alumno nuevo en cada una de ellas?

a. Lista ligada
En está estructura de datos se presenta el concepto nodo, el cual tiene dos partes: el dato y un apuntador al otro nodo. Para la
inserccion de la lista se pueden dar 3 casos :
Al inicio de la lista
Verificar si la lista está vacía
• Si está vacía la lista es decir inicio==null
• Se crea un nuevo nodo o se asigna un nuevo nodo al inicio
• Final se hace que apunte también al inicio ya que es el único nodo.
• Si ya existe por lo menos un nodo
• Se crea un nodo que se hace que apunte al inicio nuevo.sig=inicio
• Se hace que inicio ahora apunte al primer elemento que es nuevo inicio=nuevo
Al final de la lista
Verificar si la lista está vacía
• Si está vacía la lista es decir inicio==null
• Se crea un nuevo nodo o se asigna un nuevo nodo al inicio
• Final se hace que apunte también al inicio ya que es el único nodo.
• Si ya existe por lo menos un nodo
• Se crea o se asigna un nuevo nodo a fin.sig=nuevo;
• Final se hace que apunte al nuevo nodo ya que ahora sera el final.
En alguna posición especifica
Verificar si la lista está vacía o posición es igual a cero
• Si está vacía la lista es decir inicio==null
• Se crea un nuevo nodo o se asigna un nuevo nodo al inicio
• Final se hace que apunte también al inicio ya que es el único nodo.
• Si ya existe por lo menos un nodo
• Se recorre la lista contando las posiciones de los elementos dentro de la lista (pos++), además se debe de recorrer
conociendo el nodo anterior y el siguiente con el fin de reorganizar la lista al insertar un nuevo elemento.
• Si se localiza la posición buscada y siguiente es diferente de null. if(cont==posi && sig!=null)
• Se crea un nuevo nodo y se hace que apunte al siguiente nodo y además que el nodo anterior apunte al nuevo
nodo. nuevo.sig=sig y ant.sig=nuevo.
• Si no se localiza la posición (indica que se dio una posición mayor a la cantidad de elementos, entonces se agrega el
elemento al final de la lista.
Supón que tienes que implementar un sistema de administración de alumnos y decides organizarlos en las
siguientes estructuras de datos ¿Cuánto tardarías en acomodar a un alumno nuevo en cada una de ellas?

a. Lista Doblemente ligada

Insertar un nodo en una lista vacía.


1. Si lista está vacía hacemos que Lista apunte a nodo. Y nodo->anterior y nodo->siguiente a NULL.

Lista enlazada corriente.


Si lista no está vacía, hacemos que nodo->siguiente apunte a Lista->siguiente.
Después que Lista->siguiente apunte a nodo.

Insertar en una lista que recorre los nodos en sentido contrario


Hacemos que nodo->anterior apunte a Lista.
Si nodo->siguiente no es NULL, entonces hacemos que nodo->siguiente->anterior apunte a nodo.

a. Árbol Balanceado

• Trazamos una ruta desde el nodo raíz hasta un nodo hoja (para realizar la inserción)
• Insertamos el nuevo nodo
• Volvemos a trazar la ruta de regreso al nodo raiz, ajustando el equilibrio.
• Si el equilibrio de un nodo llega a ser + 2 volvemos ajustar los subarboles de los nodos para que su
equilibrio sea de acuerdo a la condición de los arboles AVL (+1)
Fuentes
• Anonimo. (-- de -- de --). Estructura de Datos Informática. Recuperado el 28 de Mayo de 2019, de
https://sites.google.com/site/estdatinfjiq/unidad-iii-listas-enlazadas

• Anonimo. (30 de Agosto de 2012). Algoritmo de Ordenamiento Radix Sort. Recuperado el 26 de Mayo
de 2019, de https://arq232.wordpress.com/2012/08/30/algoritmo-de-ordenamiento-radix-sort/

• C++ con Clase. (01 de Septiembre de 2001). Estructuras de datos. Recuperado el 28 de Mayo de 2019,
de http://c.conclase.net/edd/?cap=005b

• CODEBOTIC. (01 de Junio de 2014). Algoritmos De Ordenamiento : Burbuja O (Bubble Sort) Y Burbuja
Mejorado Implementados En C++. Recuperado el 26 de Mayo de 2019, de
https://codebotic.blogspot.com/2014/06/algoritmo-de-ordenamiento-burbuja-o.html

• Enriquez, P. (-- de -- de --). ShellSort. Recuperado el 26 de Mayo de 2019, de


https://henriquezpamela.wordpress.com/unidad-ii/unidad-2/

• Hernández, E. G. (01 de Octubre de 2014). Método de ordenación MergeSort. Recuperado el 26 de


Mayo de 2019, de http://puntocomnoesunlenguaje.blogspot.com/2014/10/java-mergesort.html

• LWF. (-- de -- de --). Ordenamiento rápido. Recuperado el 26 de Mayo de 2019, de


http://lwh.free.fr/pages/algo/tri/tri_rapide_es.html

• UnADM. (-- de -- de --). Unidad 2 Complejidad Computacional (Texto de Apoyo). Recuperado el 26 de


Mayo de 2019, de https://unadmexico.blackboard.com/bbcswebdav/institution/DCEIT/2016_S1-
B2/MT/04/MCOM1/MCOM1/U2/Unidad%202.%20Complejidad%20computacional.pdf

También podría gustarte