TD4_DEV51_thuret/Rapport.md
2024-11-26 15:36:28 +01:00

3.4 KiB

Rapport TD4 :

Exercice 2 :

  1. Fonction n°1 : complexité algorithmique O(n*m)
    (avec n = len(tab1) et m = len(tab2) ). Car l'on parcours deux tableau et que l'on compare ces derniers

  2. Fonction n°2 : complexité algorithmique O(n)
    Car ici on boucle tant que x > 0 et l'on retire 1 à chaque itérantion , donc la boucle est effectué x fois

  3. Fonction n°3 : complexité algorithmique de O(1)
    Car la fonction vas prendre la valeur de x et effectuer une seule opération en fontion de cette dernière.

Exercice 3 :

Dans un premier temps, décomposon le code.

  • on retrouve au tout début du code une boucle :

    for(i = 0; i < grades_number; i++){
    int *grades = (int*) malloc(students_number * sizeof(int));
    
    

    la complexité est donc de O(n)
    (Ou n = grades_number)

  • dans un second temps, on peut retrouver cette partie de code :

    for (j = 0; j < students_number; j++)
    {
        grades[j] = students_array[j][i];
    }
    

    Ici la complexité est de O(m) car on boucle sn fois.
    (Ou m = student_number)

  • troisième portion de code :

    bubblesort(grades, students_number);
    
    

    Comme bubblesort parcours le tableau pour le trier chaque élément doit être comparé au autre. La complexité est donc de O(m^2)

  • Quatrième partie de code :

    for (j = 0; j < students_number; j++)
    {
        students_rank[j][i] = find_rank_student(students_array[j][i], grades, students_number);
    }
    

    Ici il nous faut la complexité algorythmique de find_rank_student, cette dernière est de O(m^2), donc la complexité de cette boucle est de O(m)*O(m^2)=O(m^3)

  • Dernière partie de code :

    free(grades);
    

    Ici la complexité algorithmique est de O(1)

Donc la complexité algorithmique de cette fonction est de : O(n)*(O(m)+O(m²)+O(m^3)+O(1))

On obtient donc la complexité suivante : O(n*m^3)

Exercice 4 :

(voir Ex4_sort.py)

Complexité algorithmique :

  • Complexité de bubblesort_array : O(n^2) car chaque élément à des chance d'être déplacé plusieurs fois.

  • Complexité de bubblesort_multi_array :

    • première partie de code :

      for subarray in array:
          bubblesort_array(subarray)
      

      ici la complexité algorithmique est de O(n*m^2) (où n = longueur du tableau pricipal et m = taille des sous taableaux)

    • seconde partie de code :

      while (swap > 0):
          swap = 0
          for i in range(1, len(array)):
              if sum(array[i-1]) > sum(array[i]):
                  temp = array[i-1]
                  array[i-1] = array[i]
                  array[i] = temp
                  swap += 1
      

      ici la complexité algorithmique est de O(n^2*m)

    • calcul final : la complexité algorithmique est donc de O(n^2 * m + n * m2). cenpendant la complexité dépend donc des tailles du tableau et sous-tableau. Nous avons donc trois possibilité :

      • première possibilité : n > m Alors (n^2 * m) > (n * m^2), donc la complexité algorithmique est de O(n^2 * m)
      • seconde possibilité : m > n Donc (n * m^2) > (n^2 * m), donc la complexité algorithmique est de O(n*m^2)
      • dernière possibilité : n = m Ici si n = m alors la complexité algorithmique est bien de O(n^2 * m + n * m^2)