Advertisement
Guest User

pb9

a guest
Nov 13th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.75 KB | None | 0 0
  1. from problem import Problem
  2. import random
  3.  
  4.  
  5. class Problem9(Problem):
  6.     def __init__(self):
  7.         data = random.sample(range(100), random.randint(5, 9))
  8.  
  9.         statement = 'Problema 9: Se primesc numerele: ' + ', '.join(map(str, data)) + '.\n'
  10.         statement += 'Verificati daca:\n'
  11.  
  12.         # alegem pivotul si pasii de selection (maxim) si insertion
  13.         pivot = random.choice(data)
  14.         pasi_selection = random.randint(2, len(data) - 1)
  15.         pasi_insertion = random.randint(2, len(data) - 1)
  16.  
  17.         data = [data, pivot]
  18.  
  19.         data = [data, pasi_selection]
  20.         statement += '1. Vectorul a rezultat in urma aplicarii a ' + str(pasi_selection) + ' pasi din Selection Sort (Maxim).\n'
  21.  
  22.         data = [data, pasi_insertion]
  23.         statement += '2. Vectorul a rezultat in urma aplicarii a ' + str(pasi_insertion) + ' pasi din Insertion Sort.\n'
  24.  
  25.         statement += '3. Vectorul a rezultat in urma unei partitionari folosind pivotul ' + str(pivot) + '.\n'
  26.  
  27.         statement += 'Exemplificati sortarea sirului folosind Bubble Sort si Selection Sort (Maxim).\n'
  28.         super().__init__(statement, data)
  29.  
  30.     def solve(self):
  31.         solution = '9. Solutia problemei: \n'
  32.         data = self.data
  33.  
  34.         # scoatem pivotul si variabilele pentru pasi din vector
  35.         pasi_insertion = data[1]
  36.         data.pop(1)
  37.         data = data[0].copy()
  38.  
  39.         pasi_selection = data[1]
  40.         data.pop(1)
  41.         data = data[0].copy()
  42.  
  43.         pivot = data[1]
  44.         data.pop(1)
  45.         data = data[0].copy()
  46.         data2 = data.copy()  # salvam o copie a vectorului pentru a il sorta de 2 ori
  47.  
  48.         ok = 1
  49.         n = pasi_selection
  50.         solution += 'Trebuie sa aflam daca este adevarat sau fals ca vectorul ' + str(data) + ' rezulta din ' + str(n) + ' pasi de Selection Sort (Maxim) : \n'
  51.         solution += 'Pentru asta trebuie sa verificam daca primele ' + str(n) + ' elemente sunt in ordine descrescatoare \n'
  52.         for i in range(0, n):
  53.             if data2[i + 1] > data2[i]:
  54.                 solution += str(data2[i + 1]) + ' > ' + str(data2[i]) + ' => Afirmatia este falsa \n'
  55.                 ok = 0
  56.                 break
  57.             else:
  58.                 solution += str(data2[i + 1]) + ' < ' + str(data2[i]) + '\n'
  59.         if ok == 1:
  60.             solution += '(ADEVARAT) Vectorul a rezultat in urma aplicarii a ' + str(n) + ' pasi din Selection Sort (Maxim)\n\n'
  61.         else:
  62.             solution += '(FALS) Vectorul nu a rezultat in urma aplicarii a ' + str(n) + ' pasi din Selection Sort (Maxim)\n\n'
  63.  
  64.         ok = 1
  65.         n = pasi_insertion
  66.         solution += 'Trebuie sa aflam daca este adevarat sau fals ca vectorul ' + str(data) + ' rezulta din ' + str(n) + ' pasi de Insertion Sort : \n'
  67.         solution += 'Pentru asta trebuie sa verificam daca primele ' + str(n) + ' elemente sunt deja sortate in ordine crescatoare \n'
  68.         for i in range(1, n):
  69.             if data2[i] < data2[i - 1]:
  70.                 ok = 0
  71.                 solution += str(data2[i]) + ' < ' + str(data2[i - 1]) + ' => Afirmatia este falsa \n'
  72.                 break
  73.             else:
  74.                 solution += str(data2[i]) + ' > ' + str(data2[i - 1]) + '\n'
  75.         if ok == 1:
  76.             solution += '(ADEVARAT) Vectorul a rezultat in urma aplicarii a ' + str(n) + ' pasi din Insertion Sort \n\n'
  77.         else:
  78.             solution += '(FALS) Vectorul nu a rezultat in urma aplicarii a ' + str(n) + ' pasi din Insertion Sort \n\n'
  79.  
  80.         n = len(data2)
  81.         solution += 'Verificam partitionarea pentru Quicksort cu pivotul ' + str(pivot) + '. Vectorul ' + str(data2) + ' are ' + str(n) + ' elemente \n'
  82.         ok1 = 1
  83.         ok2 = 1
  84.         solution += 'Pentru a verifica daca vectorul este partitionat in functie de un anumit pivot vom face urmatoarele: \n'
  85.         for i in range(0, n):
  86.             if data2[i] == pivot:
  87.                 poz_pivot = i
  88.                 solution += 'Identificam ca pivotul se afla pe pozitia ' + str(i + 1) + '\n'
  89.         solution += 'Verificam daca elementele care se afla la stanga pivotului sunt mai mici decat acesta \n'
  90.         for i in range(0, poz_pivot):
  91.             if data2[i] > pivot:
  92.                 ok1 = 0
  93.                 solution += str(data2[i]) + ' >= ' + str(pivot) + ' => Afirmatia este falsa \n'
  94.                 break
  95.             else:
  96.                 solution += str(data2[i]) + ' <= ' + str(pivot) + '\n'
  97.         solution += 'Verificam daca elementele care se afla la dreapta pivotului sunt mai mari decat acesta \n'
  98.         for j in range(poz_pivot + 1, n):
  99.             if data2[j] < pivot:
  100.                 ok2 = 0
  101.                 solution += str(data2[j]) + ' <= ' + str(pivot) + ' => Afirmatia este falsa \n'
  102.                 break
  103.             else:
  104.                 solution += str(data2[j]) + ' >= ' + str(pivot) + '\n'
  105.         if ok1 == 1 and ok2 == 1:
  106.             solution += '(ADEVARAT) Vectorul a rezultat in urma unei partirionari folosind pivotul ' + str(pivot) + '\n\n'
  107.         else:
  108.             solution += '(FALS) Vectorul nu a rezultat in urma unei partitionari folosind pivotul ' + str(pivot) + '\n\n'
  109.  
  110.         solution += 'Vom exemplifica modalitatea de functionare a Bubble sort-ului: \n'
  111.         solution += 'Aflam dimensiunea vectorului ' + str(data) + ' pe care vom aplica algoritmul \n'
  112.         n = len(data)
  113.         solution += 'Vectorul nostru are ' + str(n) + ' elemente \n'
  114.         solution += 'Vom folosi o variabila booleana pentru a verifica daca am facut interschimbari \n'
  115.         reverse = True
  116.         solution += 'Cat timp vom face interschimbari iar variabila bool va fi adevarata, algoritmul nu se termina iar vectorul nu este complet sortat \n'
  117.         while reverse == True:
  118.             reverse = False
  119.             solution += 'Vom parcurge vectorul \n'
  120.             for i in range(0, n - 1):
  121.                 if data[i + 1] < data[i]:
  122.                     data[i], data[i + 1] = data[i + 1], data[i]
  123.                     solution += str(data[i + 1]) + ' < ' + str(data[i]) + ' => elementele nu sunt sortate asa ca vom face o interschimbare \n'
  124.                     reverse = True
  125.         solution += 'Daca nu s-a mai facut nicio interschimbare la pasul anterior, atunci vectorul este sortat si il afisam: ' + str(data) + '\n\n'
  126.  
  127.         solution += 'Vom exemplifica modalitatea de functionare a Selection Sort(Maxim): \n'
  128.         solution += 'Aflam dimensiunea vectorului ' + str(data2) + ' pe care vom aplica algoritmul \n'
  129.         n = len(data2)
  130.         solution += 'Vectorul nostru are ' + str(n) + ' elemente \n'
  131.         solution += 'Vom parcurge vectorul nesortat pentru a gasi elementul maxim si vom face o interschimbare astfel incat vom avea vectorul partitionat in 2: partea ordonata descrescator la stanga si cea neordonata la dreapta \n'
  132.         for i in range(0, n):
  133.             poz_max = i
  134.             elem_max = data2[i]
  135.             solution += 'Selectam elementul de pe pozitia ' + str(i + 1) + ' si consideram ca elementul ' + str(elem_max)+ ' este maxim \n'
  136.             solution += 'Vom parcurge vectorul la dreapta elementului maxim \n'
  137.             for j in range(i, n):
  138.                 if data2[j] > elem_max:
  139.                     solution += str(data2[j]) + ' > ' + str(elem_max) + ' => am gasit un element mai mare decat cel maxim in partitia neordonata a vectorului asa ca salvam elementul ca fiind noul maxim \n'
  140.                     elem_max = data2[j]
  141.                     poz_max = j
  142.             data2[i], data2[poz_max] = data2[poz_max], data2[i]
  143.             if i != poz_max:
  144.                 solution += 'Interschimbam elementele ' + str(data2[i]) + ' si ' + str(data2[poz_max]) + '\n'
  145.         solution += 'Dupa ce terminam parcurgerea intregului vector si am terminat sortarea, il afisam: ' + str(data2) + '\n \n'
  146.  
  147.         return solution
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement