Advertisement
stefano_p

esercizio mediano dei mediani

Nov 19th, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.47 KB | None | 0 0
  1. '''
  2. File name : divide_n_quintuple
  3. Created on : 18/11/2016
  4. @author: --> Stefano Pica N° 0203868
  5. Python Version  3.5.2
  6.  
  7. '''
  8.  
  9.  
  10. def dividi_n_quintuple(lista):
  11.  
  12.     '''funzione che divide la lista data in quintuple e restituisce
  13.    una lista contenete le quituple divise in sottoliste
  14.    usando solo una lista di appoggio'''
  15.  
  16.     listaQuintuple=[]
  17.     indice=0
  18.     while indice < len(lista):
  19.         listaQuintuple += [lista[indice : indice + 5]] # seleziono gli elementi tramite SLICE e anche se
  20.         indice += 5                                    # l'indice supera la lunghezza della lista python nn restituisce
  21.                                                        # errore ma inserisce i rimanenti elementi
  22.     return listaQuintuple
  23.  
  24.  
  25. #if __name__ == '__main__':
  26.     #dividi_n_quintuple(lista=[1,2,3,4,5,6,7,8,9,0,10,11,12,13,14,15])
  27.  
  28.  
  29. ###########################################################################################
  30.  
  31. def selectionSort(l):
  32.     """ It sorts the given Python list in ascending order.
  33.        The key idea is that at the k-th step, you put the the right element in position k.
  34.        O(n^2)
  35.    """
  36.     for k in range(len(l) - 1):
  37.         minPos = k
  38.         for j in range(k + 1, len(l)):
  39.             if l[j] < l[minPos]:
  40.                 minPos = j
  41.         l[minPos], l[k] = l[k], l[minPos]   #Assegnamento multiplo che permette di non usare variabili temporanee
  42.     print(l,'\tselectionSort')
  43.     return l
  44.  
  45.  
  46.  
  47. ###########################################################################################
  48. '''
  49. File name :listaMediani
  50. Created on : 19/11/2016
  51. @author: --> Stefano Pica N° 0203868
  52. Python Version  3.5.2
  53.  
  54. '''
  55.  
  56. def listaMediani(lista):
  57.     '''
  58.        funzione che prende la lista di quintuple richiama la funzione mediano_Quintuple
  59.        e restituisce la lista dei mediani
  60.  
  61.  
  62.    '''
  63.     listaMediani=[]
  64.  
  65.     for i in(lista):
  66.  
  67.         if len(i) == 5:                                        #se è una quintupla richiamo mediano_Quintuple
  68.  
  69.             mediano=mediano_Qintuple(i)
  70.             listaMediani.append(mediano)
  71.                                                         # se non è una quintupla la riordino con selectionSort tempoO(n^2)
  72.         else:                                                  #se è pari prendo n+1 della metà cioè [1,2,3,4] prendo
  73.             listaOrdinata = selectionSort(i)
  74.             listaMediani.append(listaOrdinata[int(len(i)/2)])  #il 3  se [1,2] prendo 2  ; se è dispari < 5 prendo il mediano
  75.                                                                # cioè [1,2,3] prendo il 2
  76.     return listaMediani                                        # se è [1] prendo 1
  77.  
  78.  
  79. ######################################################################################################
  80.  
  81.  
  82. '''
  83. File name :mediano_di_Qintuple.py
  84. Created on : 19/11/2016
  85. @author: --> Stefano Pica N° 0203868
  86. Python Version  3.5.2
  87.  
  88. '''
  89. def mediano_Qintuple(lista):
  90.  
  91.         '''
  92.        funzione che restituisce il mediano di una quintupla in 6 confronti
  93.        come nella propietà 5.1
  94.        cioè esegue 6[n/5] confronti
  95.  
  96.        '''
  97.  
  98.         if lista[0] > lista[1]:
  99.             lista[0],lista[1] = lista[1],lista[0]
  100.  
  101.         if lista[2] > lista[3]:
  102.             lista[2],lista[3] = lista[3],lista[2]
  103.  
  104.         if lista[1] > lista[3]:
  105.             lista[1],lista[4] = lista[4],lista[1]
  106.  
  107.             if lista[0] > lista[1]:
  108.                 lista[0],lista[1] = lista[1],lista[0]
  109.  
  110.         else:
  111.             lista[3], lista[4] = lista[4], lista[3]
  112.             if lista[2] > lista[3]:
  113.                 lista[2],lista[3] = lista[3],lista[2]
  114.  
  115.         if lista[1] > lista[3]:
  116.             lista.append(lista.pop(1))
  117.             if lista[0] > lista[2]:
  118.                 return lista[0]
  119.             else:
  120.                 return lista[2]
  121.  
  122.         else:
  123.             lista.append(lista.pop(3))
  124.             if lista[1] > lista[2]:
  125.                 return lista[1]
  126.             else:
  127.                 return lista[2]
  128.  
  129.  
  130. #if __name__ == '__main__':
  131.     # lista=[6,1,1,4,5]
  132.      #a=mediano_Qintuple(lista)
  133.     # print (a)
  134.  
  135.  
  136.  
  137.  
  138. #################################################################################################
  139.  
  140. '''
  141. File name :medianoDeiMediani
  142. Created on : 19/11/2016
  143. @author: --> Stefano Pica N° 0203868
  144. Python Version  3.5.2
  145.  
  146. '''
  147. import random
  148. import time
  149.  
  150. def main():
  151.  
  152.     '''
  153.    prende la lista e con chiamate ricorsive su dividi_n_quintuple e listaMediani
  154.    restituisce il mediano dei mediani
  155.  
  156.    '''
  157.  
  158.     lista = lista_di_prova
  159.  
  160.     while len(lista) > 1 :                        #finchè la lista dei mediani non diveta di un solo elemento
  161.                                                     # richiamo le funzioni ricorsivamente -> dividi e listaMediani-> che
  162.         quintuple=dividi_n_quintuple(lista)
  163.         print(quintuple,'\tquituple')               # dentro richiama-> (medianoQuintuple)
  164.  
  165.         lista = listaMediani(quintuple)
  166.  
  167.         print(lista,'\tmediani')
  168.  
  169.  
  170.     return lista
  171.  
  172. if __name__ == '__main__':
  173.     #inizializzazione
  174.  
  175.     step=510
  176.  
  177.     lista_di_prova = [None]*step
  178.  
  179.     for i in range(0,step):
  180.  
  181.         lista_di_prova[i] = random.randint(0,step)
  182.  
  183.     print(lista_di_prova,'\tlista')
  184.     inizio=time.clock()
  185.     A = main()
  186.     tempoTrascorso=time.clock() - inizio
  187.     print(A,'\t\ttempo =\t',tempoTrascorso)
  188.  
  189.  ##########################################################################################################
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement