Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INGENIERÍA DE SISTEMAS
1
PROYECTO FINAL
DOCENTE:FREDERICK FERRO
INGENIERÍA DE SISTEMAS
2
AGRADECIMIENTOS
3
TABLA DE CONTENIDO
1. Portada y contraportada………………………………………………….
2. Agradecimientos………………………………………………………..
3. Tabla de contenido……………………………………………………..
4. Tabla de figuras ………………………………………………………..
5. Tabla de datos………………………………………………………….
6. Introducción…………………………………………………………...
7. Objetivos……………………………………………………………..
a. General………………………………………………………...
b. Específico……………………………………………………..
8. Marco teórico………………………………………………………….
9. Metodología………………………………………………………….
a. Análisis del problema………………………………………...
b. Diseño………………………………………………………...
c. Implementación……………………………………………...
d. Pruebas………………………………………………………..
10.Conclusiones………………………………………………………..
11.Bibliografía…………………………………………………………….
4
TABLA DE FIGURAS
5
TABLA DE DATOS
● Tabla de datos No.1 Datos de tiempo con 10 datos a ordenar con burbuja
● Tabla de datos No.2 Datos de tiempo con 100 datos a ordenar con burbuja
● Tabla de datos No.3 Datos de tiempo con 500 datos a ordenar con burbuja
● Tabla de datos No.4 Datos de tiempo con 1000 datos a ordenar con burbuja
● Tabla de datos No.5 Datos de tiempo con 5000 datos a ordenar con burbuja
● Tabla de datos No.6 Datos de tiempo con 10000 datos a ordenar con burbuja
● Tabla de datos No.7 Datos de tiempo con 50000 datos a ordenar con burbuja
● Tabla de datos No.8 Datos de tiempo con 100000 datos a ordenar con burbuja
● Tabla de datos No.9 Datos de tiempo con 250000 datos a ordenar con burbuja
● Tabla de datos No.10 Datos de tiempo con 10 datos a ordenar con merge sort
● Tabla de datos No.11 Datos de tiempo con 100 datos a ordenar con merge sort
● Tabla de datos No.12 Datos de tiempo con 500 datos a ordenar con merge sort
● Tabla de datos No.13 Datos de tiempo con 1000 datos a ordenar con merge sort
● Tabla de datos No.14 Datos de tiempo con 5000 datos a ordenar con merge sort
● Tabla de datos No.15 Datos de tiempo con 10000 datos a ordenar con merge sort
● Tabla de datos No.16 Datos de tiempo con 50000 datos a ordenar con merge sort
● Tabla de datos No.17 Datos de tiempo con 100000 datos a ordenar con merge sort
● Tabla de datos No.18 Datos de tiempo con 250000 datos a ordenar con merge sort
● Tabla de datos No.19 Datos de tiempo de un vector mínimo de 4
● Tabla de datos No.20 Datos de tiempo de un vector mínimo de 5
● Tabla de datos No.21 Datos de tiempo de un vector mínimo de 6
● Tabla de datos No.22 Datos de tiempo de un vector mínimo de 7
● Tabla de datos No.23 Datos de tiempo de un vector mínimo de 8
● Tabla de datos No.24 Datos de tiempo de un vector mínimo de 9
● Tabla de datos No.25 Datos de tiempo de un vector mínimo de 10
● Tabla de datos No.26 Datos de tiempo de un vector mínimo de 10 segunda parte
● Tabla de datos No.27 Datos de tiempo de un vector mínimo de 11
● Tabla de datos No.28 Datos de tiempo de un vector mínimo de 13
● Tabla de datos No.29 Datos de tiempo de un vector mínimo de 15
● Tabla de datos No.30 Datos de tiempo de un vector mínimo de 20
● Tabla de datos No.31 Datos de tiempo de un vector mínimo de 25
● Tabla de datos No.32 Datos de tiempo de un vector mínimo de 30
● Tabla de datos No.33 Datos de tiempo de un vector mínimo de 35
● Tabla de datos No.34 Datos de tiempo de un vector mínimo de 40
● Tabla de datos No.35 Datos de tiempo de un vector mínimo de 45
● Tabla de datos No.36 Datos de tiempo de un vector mínimo de 50
● Tabla de datos No.37 Tabla de datos y su promedio de 4 al 50
6
INTRODUCCIÓN
La mayoría de los datos producidos por un programa están ordenados de alguna manera, y
muchos de los cómputos que tiene que realizar un programa son más eficientes si los datos
sobre los que operan están ordenados. Uno de los tipos de cómputo que más se benefician
de operar sobre un conjunto de datos ordenados es la búsqueda de un dato: encontrar el
número de teléfono de una persona en un listín telefónico es una tarea muy simple y rápida
si conocemos su nombre, ya que los listines telefónicos se encuentran ordenados
alfabéticamente. Encontrar a qué usuario corresponde un número de teléfono dado, sin
embargo, es una tarea prácticamente inabordable.
7
OBJETIVOS
General
Específicos
8
MARCO TEÓRICO
9
Esto es, el número de comparaciones c(n) no depende del orden de los términos, si no del
número de términos.
Por lo tanto la cota ajustada asintótica del número de comparaciones pertenece al orden de n
cuadrado. El número de intercambios i(n), que hay que realizar depende del orden de los
términos y podemos diferencia, el caso mejor, si el vector está previamente ordenado, y el caso
peor, si el vector está ordenado en orden inverso.
Por lo que no se puede determinar una cota ajustada asintótica del número de intercambios,
dado que este dependerá del orden del vector en cuestión.
Como ya hemos dicho anteriormente, y tendrá que realizar un número igual de intercambios
entre los términos del vector, dado que en cada comparación los términos estarán desordenados,
y se realizará el intercambio.
La cota inferior asintótica del número de comparaciones pertenece al orden de un cuadrado,
como en los demás casos, pero en todas las comparaciones el orden es el correcto y por
tanto no se realiza ningún intercambio:
10
El ordenamiento de burbuja tiene una complejidad Ω(n²) igual que ordenamiento por
selección. Cuando una lista ya está ordenada, a diferencia del ordenamiento por inserción,
que pasará por la lista una vez y encontrará que no hay necesidad de intercambiar las
posiciones de los elementos, el método de ordenación por burbuja está forzado a pasar por
dichas comparaciones, lo que hace que su complejidad sea cuadrática en el mejor de los
casos. Esto lo cataloga como el algoritmo más ineficiente que existe, aunque para muchos
programadores sea el más sencillo de implementar.
Los algoritmos que utilizan este principio son en la mayoría de los casos netamente
recursivos como es el caso de mergesort.El algoritmo de Mergesort es un ejemplo clásico
de algoritmo que utiliza el principio de dividir para conquistar. Si el vector tiene más de dos
elementos se lo divide en dos mitades, se invoca recursivamente al algoritmo y luego se
hace una intercalación de las dos mitades ordenadas.
11
Figura No.2 diagrama de descripción del método mergesort
12
que sólo requiera Θ(1) espacio extra, y el mal rendimiento de las listas enlazadas ante el
acceso aleatorio hace que otros algoritmos (como quicksort) den un bajo rendimiento, y
para otros (como heapsort) sea algo imposible.
Para Perl 5.8, merge sort es el algoritmo de ordenamiento por defecto (lo era quicksort en
versiones anteriores de Perl). En Java los métodos de ordenación de Arrays usan merge sort
o una modificación de quicksort dependiendo de los tipos de datos y por cuestiones de
eficiencia cambian a ordenamiento por inserción cuando se están ordenando menos de siete
elementos en el array.[2]
METODOLOGÍA
Análisis del problema
● Ordenamiento burbuja manual
Datos random de 0 al 100 con 10 datos manual
[7, 62, 38, 62, 40, 61, 90, 40, 71, 94]
13
El proceso de ordenamiento con burbuja con el vector 7,62,38,62,40,61,90,40,71,94 fue: el 7 se
comparó con 62,38,62,40,61,90,40,71 y 94 el 7 es menor que todos se queda en su lugar , se
comparó el 62 con 38 es menor 38 se cambia de puesto ,se compara el 62 con 62 y 40 el 40 es
menor se cambia de puesto , se compara 62 con 62,90 y 40 el 40 es menor se cambia de puesto , se
compara 62 con 92,62,71 y 94 es menor se queda en su puesto , se compara el 92 con 62 el 62 es
menor se cambia de puesto , se compara el 92 con 71 el 71 es menor se cambia de puesto , se
compara 92 con 94 el 92 es menor se queda en su puesto de esta forma queda el vector
7,38,40,40,40,62,62,71,92.94.
import random
def bubbleSort(lista):
n = len(lista)
14
TOMA DE TIEMPOS
15
Tabla de datos No.7 Tabla de datos No.8 Tabla de datos No.9
16
Código del método merge sort
import random
def merge_sort(lista):
else:
middle = len(lista) // 2
right = merge_sort(lista[:middle])
left = merge_sort(lista[middle:])
return merge(right, left)
# Función merge
def merge(lista1, lista2):
i, j = 0, 0 # Variables de incremento
result = [] # Lista de resultado
# Intercalar ordenadamente
while(i < len(lista1) and j < len(lista2)):
if (lista1[i] < lista2[j]):
result.append(lista1[i])
i += 1
else:
result.append(lista2[j])
j += 1
17
listafinal = merge_sort(lista)
print("Lista final Merge:",listafinal)
TOMA DE TIEMPOS
18
Tabla de datos No.16 Tabla de datos No.17 Tabla de datos No.18
19
Figura No.6 descripción de diseño con burbuja y merge sort paso a paso
20
Entrada.csv')
lista = pd.read_csv('
#inicialización del vector
listaNueva = []
#agregar los datos al vector
listaNueva = lista.values.tolist()
#impresión del vector con los datos
#print("Lista inicial:",listaNueva)
#se lee el archivo csv
Entrada.csv')
lista = pd.read_csv('
#se convierte lo leído en un dataframe
lista1 = pd.DataFrame(lista)
#se obtienen los valores del data frame, estos serán guardados como
una
#matriz
lista3 = lista1.values;
#se sacan las dimensiones de la matriz
shape2 = lista3.shape
#se instancia la lista que guardará los valores
listaNueva = []
#*********************************************************************
************
for i in range(
shape2[0]
):
or j i
f n r
ange(
shape2[1]):
listaNueva.append(lista3[i][j])
len(listaNueva))
print(
start_time = time()
def m
erge_sort(
lista)
:
límite de partición del vector
#
f l
i en(
lista) < 11:
en(
n= l lista)
or i in r
f ange(n-
1):
for j in range(
0, n-i-1)
:
f lista[j] > lista[j+1] :
i
lista[j], lista[j+1]
= lista[j+1
], lista[j]
eturn lista
r
lse:
e
21
en(
middle = l lista) // 2
right = merge_sort(lista[:middle])
left = merge_sort(lista[middle:])
eturn merge(right, left)
r
# Función merge
def m
erge(l
ista1,
lista2):
, 0
i, j = 0 #
Variables de incremento
Lista de resultado
result = [] #
# Intercalar ordenadamente
hile(i < l
w en(
lista1) a
nd j < len(lista2)):
f (lista1[i] < lista2[j]):
i
result.append(lista1[i])
i += 1
lse:
e
result.append(lista2[j])
j += 1
#Impresiones
listafinal = merge_sort(listaNueva)
#print("Lista final Merge:",listafinal)
salida.csv",
numpy.savetxt(" listafinal)
#Tiempo
elapsed_time = time() - start_time
"Elapsed time: %.5f seconds." % elapsed_time)
print(
22
PRUEBAS
23
Tabla de datos No.19 Tabla de datos No.20 Tabla de datos No.21
24
Tabla de datos No.25
El proceso de tomas de datos se hizo con el límite del vector para organizar de 4 a 10 datos
con un vector base de 1.000.000 de datos, se hizo 10 tomas de tiempo para cada No. de
datos del vector mínimo , se compararon los promedios y se llegó a conclusión que el
promedio del vector con 10 datos fue el que menos tiempo dura organizándose con
0.772136 el siguiente promedio menor es el de 8 datos con el promedio 0.774216 con una
diferencia de 0.00208 s siendo el menor el de 10 datos el vector minimo para organizar.
25
● Toma de tiempos con particiones 10,11,13,15,20,25,30,35,40,45,50
minimo de organización
26
Tabla de datos No.32 Tabla de datos No.33 Tabla de datos No.34
27
Figura No.8 Gráfica de toma de tiempos entre vector 10-50
El proceso de tomas de datos se hizo con el límite del vector para organizar de 10 a 50
datos con un vector base de 1.000.000 de datos, se hizo 10 tomas de tiempo para cada No.
de datos del vector mínimo , se compararon los promedios y se llegó a conclusión que el
promedio del vector con 11 datos fue el que menos tiempo dura organizándose con 0.76536
el siguiente promedio menor es el de 10 datos con el promedio 0.772136 con una diferencia
de 0.006776 s siendo el menor el de 11 datos el vector minimo para organizar.
28
Tabla de datos No.37 Figura No.9 Gráfica de toma de tiempos entre vector 4-50
Tomando en cuenta los promedios que se tomaron en los tiempos,se tomó la decisión que el
código organizara con las particiones de los vectores mínimo en 11 datos volviendo así más
eficiente el código implementado entre burbuja y merge.
CONCLUSIONES
● El método burbuja es más eficiente para una lista de pocos datos.
● La principal desventaja del ordenamiento de burbuja es el hecho de que no se
comporta adecuadamente con una lista que contenga un número grande de
elementos.
● El método burbuja consume bastante tiempo de la computadora para el proceso.
● El método merge sort es un algoritmo estable y es más eficiente manejando
secuencia de acceso lento.
● El número del vector de la partición para ordenar 1.000.000 es de vectores de 11
datos.
● En el caso de Merge sort es que este tiene un inconveniente con respecto a su
rendimiento ya que en el peor de los casos es similar a los rendimientos promedio
del tipo de ordenamiento de burbuja, inserción o por selección.
29
BIBLIOGRAFÍA
[1]https://www.ecured.cu/Ordenamiento_de_burbuja
[2]https://en.wikibooks.org/wiki/Algorithm_Implementation/Sorting/Merge_sort
[3]http://www.fgcasal.org/fgcasal/database/4cgc/4CGC-Comunicaci%C3%B3n-05-Ortuno.
pdf
[4]http://aydalgor.alumnos.exa.unicen.edu.ar/laboratorio
30