Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.99 KB | None | 0 0
  1. import sys
  2. import time
  3.  
  4. from random import *
  5. from multiprocessing import Pool, cpu_count
  6. from pylab import *
  7.  
  8. p = None
  9.  
  10. #def qsort1(list):
  11. #    """Implementation de base"""
  12. #    
  13. #    if list == []:
  14. #        return []
  15. #    else:
  16. #        pivot = list[0]
  17. #        lesser = qsort1([x for x in list[1:] if x < pivot])
  18. #        greater = qsort1([x for x in list[1:] if x >= pivot])
  19. #        return lesser + [pivot] + greater
  20.  
  21. def qsort(tpl):
  22.     """Nouvelle implementation avec multiprocessus"""
  23.    
  24.     l, threaded = tpl
  25.     #threaded est utilisé pour savoir si on doit utiliser Pool.map dans
  26.     #cet appel (ici uniquement le premier appel)
  27.  
  28.     if l == []:
  29.         return []
  30.  
  31.     else:
  32.         pivot = l[0]
  33.  
  34.         u,v = [x for x in l[1:] if x < pivot], [x for x in l[1:] if x >= pivot]
  35.        
  36.         if threaded: #si premier appel : appel récursif asynchrone sur plusieurs processus
  37.             [lesser, greater] = p.map(qsort, [(u, False), (v, False)])
  38.            
  39.         else: #si appel récursif : appel récursif normal
  40.             lesser = qsort((u, False))
  41.             greater = qsort((v, False))
  42.            
  43.     return lesser + [pivot] + greater    
  44.  
  45.    
  46.  
  47.  
  48. if __name__ == "__main__":
  49.     p = Pool(cpu_count())
  50.     a,b,c = map(int, [sys.argv[i] for i in (1,2,3)])
  51.     s = np.arange(a, b, c)
  52.     q = list()
  53.     t = list()
  54.    
  55.     for j in s:
  56.         l = [i for i in range(j)]  
  57.         shuffle(l)
  58.         d = time.time()
  59.         qsort((l, False)) #premier appel avec threaded=False (équivalent à l'algorithme de base)
  60.         e = time.time()
  61.         qsort((l, True))  #premier appel avec threaded=True (utilisation de Pool.map)
  62.         f = time.time()
  63.  
  64.         q.append(e - d)# temps algo classique
  65.         t.append(f - e)# temps algo parallèle
  66.  
  67.     grid(True)
  68.     title('[Tri rapide] classique = bleue, parallèle = rouge')
  69.     plot(s, q, color='b')
  70.     plot(s, t, color='r')
  71.     xlabel('Taille de la liste')
  72.     ylabel('Temps (s)')
  73.     show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement