You are on page 1of 13

practica3

January 23, 2021

1 Practica 3
Adriana Valadez Squivias Se crea una funcion de devuelve un arreglo de numeros aleatorios

[1]: from random import randint


import time
import matplotlib.pyplot as plt

def getRandomNumbers(size):
return [randint(0,200)for _ in range(size)]

Ejemplo de los 3 casos a probar: 1. desordenado (intermedio) 2. Ascendente (mejor) 3. descendente


(peor)

[2]: randomNumbers=getRandomNumbers(5)
ascendentNumbers = sorted(randomNumbers)
descendentNumbers = sorted(randomNumbers, reverse = True)

print("El arreglo aleatorio es: ")


print(randomNumbers)
print("El arreglo ordenado ascendente es: ")
print(ascendentNumbers)
print("El arreglo ordenado descendente es: ")
print(descendentNumbers)

El arreglo aleatorio es:


[199, 185, 129, 92, 79]
El arreglo ordenado ascendente es:
[79, 92, 129, 185, 199]
El arreglo ordenado descendente es:
[199, 185, 129, 92, 79]
Una vez creados los arreglos se define el algoritmo Radix sort

[3]: def radix_sort(lista):


complexCount = 0
mx = max(lista)
exp = 1
while mx / exp > 0:

1
complexCount += 1
data, cmplx = countingSort(lista, exp)
exp *= 10
complexCount += cmplx
return lista, complexCount

def radix_sort(lista):
complexCount = 0 # 2
radix = 10 # 2
placement = 1 # 2
maxDigit = max(lista) # 3
while placement < maxDigit: # 2m-2
complexCount += 1 # 2
buckets = [list() for _ in range(radix)] # 5 =90m-90
for i in lista: # 2n (2m-2) = 4mn-4n
complexCount += 1 # 2 (4mn-4n) = 8mn-8n
tmp = int((i/placement) % radix) # 8 (4mn-4n) = 32mn-32n
buckets[tmp].append(i) # 5 (4mn-4n) = 20mn-20n
a = 0 # 2 (2m-2) = 4m-4
for b in range(radix): # 3,(2m-2) = 6m-6
complexCount += 1 # 2,(6m-6) = 12m-12
buck = buckets[b] # 4,(6m-6) = 24m-24
for i in buck: # 2,(6m-6) = 12m-12
lista[a] = i # 4,(12m-12) = 48m-48
a += 1 # 2,(12m-12) = 24m-24
placement *= radix # 3,(6m-6) = 18m-18

return lista

Prueba de Radix sort

[4]: prueba = getRandomNumbers(5)


print(prueba)
print(radix_sort(prueba))

[9, 172, 1, 53, 169]


[1, 9, 53, 169, 172]
Definicion de inicio, fin e intervalos

[5]: startCount = 1000


endCount = 5000
stepCount = 300

2
1.1 Radix sort caso intermedio (aleatorio)
[6]: performance = []
for x in range(startCount,endCount,stepCount):
print("radix sort:")
start = time.time() #O(1)
print(x)
radix_sort(getRandomNumbers(x)) #O(n2)
end = time.time() #O(1)
performance.append(end - start) #O(1)

print(performance)

radix sort:
1000
radix sort:
1300
radix sort:
1600
radix sort:
1900
radix sort:
2200
radix sort:
2500
radix sort:
2800
radix sort:
3100
radix sort:
3400
radix sort:
3700
radix sort:
4000
radix sort:
4300
radix sort:
4600
radix sort:
4900
[0.0039713382720947266, 0.008944272994995117, 0.0069425106048583984,
0.007922172546386719, 0.008938074111938477, 0.009933710098266602,
0.011919975280761719, 0.011919021606445312, 0.012911319732666016,
0.015893936157226562, 0.016887426376342773, 0.01787877082824707,
0.017881155014038086, 0.019867658615112305]

3
[7]: plt.plot(performance)
plt.title("Caso aleatorio Radix sort")

[7]: Text(0.5, 1.0, 'Caso aleatorio Radix sort')

1.2 Radix sort mejor caso


[8]: performance = []
for x in range(startCount,endCount,stepCount):
ascendentNumbers = sorted(getRandomNumbers(x))
print("radix sort")
start = time.time()
print(x)
radix_sort(ascendentNumbers)
end = time.time()
performance.append(end - start)

print(performance)

radix sort
1000
radix sort
1300
radix sort
1600

4
radix sort
1900
radix sort
2200
radix sort
2500
radix sort
2800
radix sort
3100
radix sort
3400
radix sort
3700
radix sort
4000
radix sort
4300
radix sort
4600
radix sort
4900
[0.001987457275390625, 0.0039560794830322266, 0.006951332092285156,
0.004966259002685547, 0.0039713382720947266, 0.004946231842041016,
0.006952762603759766, 0.006957054138183594, 0.0079498291015625,
0.008939743041992188, 0.00894021987915039, 0.009932756423950195,
0.009932756423950195, 0.01092672348022461]

[9]: plt.plot(performance)
plt.title("Mejor caso Radix sort")

[9]: Text(0.5, 1.0, 'Mejor caso Radix sort')

5
1.3 Radix sort Peor caso (Descendente)
[10]: performance = []
for x in range(startCount,endCount,stepCount):
descendantNumbers = sorted(getRandomNumbers(x), reverse = True)
print("radix sort")
start = time.time()
print(x)
radix_sort(descendantNumbers)
end = time.time()
performance.append(end - start)

print(performance)

radix sort
1000
radix sort
1300
radix sort
1600
radix sort
1900
radix sort
2200
radix sort

6
2500
radix sort
2800
radix sort
3100
radix sort
3400
radix sort
3700
radix sort
4000
radix sort
4300
radix sort
4600
radix sort
4900
[0.0029807090759277344, 0.002961397171020508, 0.004987239837646484,
0.0049591064453125, 0.0049664974212646484, 0.0059816837310791016,
0.004085540771484375, 0.010022878646850586, 0.015645265579223633,
0.015619516372680664, 0.015620708465576172, 0.015619993209838867,
0.01561880111694336, 0.0]

[11]: plt.plot(performance)
plt.title("Peor caso Radix sort")

[11]: Text(0.5, 1.0, 'Peor caso Radix sort')

7
[12]: def counting_sort(lista):
maxValue = 0
for i in range(len(lista)):
if lista[i] > maxValue:
maxValue = lista[i]

buckets = [0] * (maxValue + 1)

for i in lista:
buckets[i] += 1

i = 0
for j in range(maxValue + 1):
for a in range(buckets[j]):
lista[i] = j
i += 1

return lista

[13]: prueba = getRandomNumbers(5)


print("Counting sort:")
print(len(prueba))
print(prueba)
print(counting_sort(prueba))

Counting sort:
5
[146, 119, 186, 43, 41]
[41, 43, 119, 146, 186]

1.4 Counting sort caso intermedio (aleatorio)


[14]: performance = []
for x in range(startCount,endCount,stepCount):
print("Couting sort:")
print(x)
start = time.time() #O(1)
counting_sort(getRandomNumbers(x)) #O(n2)
end = time.time() #O(1)
performance.append(end - start) #O(1)

print(performance)

Couting sort:
1000

8
Couting sort:
1300
Couting sort:
1600
Couting sort:
1900
Couting sort:
2200
Couting sort:
2500
Couting sort:
2800
Couting sort:
3100
Couting sort:
3400
Couting sort:
3700
Couting sort:
4000
Couting sort:
4300
Couting sort:
4600
Couting sort:
4900
[0.0059587955474853516, 0.002972126007080078, 0.0039751529693603516,
0.003973245620727539, 0.00496673583984375, 0.007946968078613281,
0.010926246643066406, 0.009007930755615234, 0.010890960693359375,
0.005007028579711914, 0.013551712036132812, 0.011920690536499023,
0.011919021606445312, 0.010915040969848633]

[15]: plt.plot(performance)
plt.title("Caso intermedio Couting sort")

[15]: Text(0.5, 1.0, 'Caso intermedio Couting sort')

9
1.5 Couting sort mejor caso
[16]: performance = []
for x in range(startCount,endCount,stepCount):
ascendentNumbers = sorted(getRandomNumbers(x))
print("Couting sort:")
print(x)
start = time.time()
counting_sort(ascendentNumbers)
end = time.time()
performance.append(end - start)

print(performance)

Couting sort:
1000
Couting sort:
1300
Couting sort:
1600
Couting sort:
1900
Couting sort:
2200
Couting sort:

10
2500
Couting sort:
2800
Couting sort:
3100
Couting sort:
3400
Couting sort:
3700
Couting sort:
4000
Couting sort:
4300
Couting sort:
4600
Couting sort:
4900
[0.0, 0.0009922981262207031, 0.0009758472442626953, 0.0009930133819580078,
0.0009932518005371094, 0.0009927749633789062, 0.0009937286376953125,
0.001986980438232422, 0.0009925365447998047, 0.0009932518005371094,
0.0019867420196533203, 0.000993967056274414, 0.002005338668823242,
0.001986980438232422]

[17]: plt.plot(performance)
plt.title("Mejor caso Couting sort")

[17]: Text(0.5, 1.0, 'Mejor caso Couting sort')

11
1.6 Couting sort peor caso
[18]: performance = []
for x in range(startCount,endCount,stepCount):
descendantNumbers = sorted(getRandomNumbers(x), reverse = True)
print("Couting sort:")
print(x)
start = time.time()
counting_sort(descendantNumbers)
end = time.time()
performance.append(end - start)

print(performance)

Couting sort:
1000
Couting sort:
1300
Couting sort:
1600
Couting sort:
1900
Couting sort:
2200
Couting sort:
2500
Couting sort:
2800
Couting sort:
3100
Couting sort:
3400
Couting sort:
3700
Couting sort:
4000
Couting sort:
4300
Couting sort:
4600
Couting sort:
4900
[0.0, 0.0009906291961669922, 0.0009953975677490234, 0.001985788345336914,
0.0009913444519042969, 0.003973245620727539, 0.0019881725311279297,
0.0019860267639160156, 0.0029795169830322266, 0.0019872188568115234,

12
0.001983642578125, 0.0019867420196533203, 0.0029773712158203125,
0.0029785633087158203]

[19]: plt.plot(performance)
plt.title("Peor caso Couting sort")

[19]: Text(0.5, 1.0, 'Peor caso Couting sort')

13

You might also like