2015-03-10 10:41:10 +01:00
|
|
|
|
#!/usr/bin/python3
|
|
|
|
|
# -*- coding: utf-8 -*-
|
2015-03-12 19:28:02 +01:00
|
|
|
|
# pylint: disable=invalid-name, global-statement
|
2015-03-10 10:41:10 +01:00
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
TP AP1
|
|
|
|
|
Licence SESI 1ère année
|
|
|
|
|
Univ. Lille 1
|
|
|
|
|
|
|
|
|
|
analyse_tris.py
|
|
|
|
|
|
|
|
|
|
TP4 - Evaluation empirique des tris
|
|
|
|
|
|
2015-03-10 10:41:29 +01:00
|
|
|
|
http://www.fil.univ-lille1.fr/~L1S2API/CoursTP/tp4_tri.html
|
|
|
|
|
|
2015-03-10 10:41:10 +01:00
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
__author__ = 'PREUD\'HOMME Geoffrey & BEAUSSART Jean-loup'
|
|
|
|
|
__date_creation__ = 'Tue, 10 Mar 2015 10:26:41 +0100'
|
|
|
|
|
|
2015-03-11 21:28:08 +01:00
|
|
|
|
from random import randint
|
2015-03-10 10:50:42 +01:00
|
|
|
|
|
2015-03-15 09:34:46 +01:00
|
|
|
|
affichage = __name__ == '__main__'
|
2015-03-15 09:46:46 +01:00
|
|
|
|
# La variable affichage définit si on doit répondre aux questions du TP. De cette manière, ces
|
|
|
|
|
# dernières sont affichées et calculées uniquement si le programme principal est lancé, ce qui
|
|
|
|
|
# nous permet de réutiliser des fonctions de ce fichier dans `analyse_en_moyenne.py` sans avoir
|
|
|
|
|
# d'affichage et de calculs non-nécessaires à son fonctionnement. On aurait pu aussi séparer
|
|
|
|
|
# fonctions et questions, mais pour la facilité de la correction nous avons préféré qu'il en soit
|
|
|
|
|
# ainsi.
|
2015-03-10 10:58:34 +01:00
|
|
|
|
|
2015-03-10 10:50:42 +01:00
|
|
|
|
def partie(nom):
|
2015-03-12 19:28:02 +01:00
|
|
|
|
"""
|
|
|
|
|
str → ∅
|
|
|
|
|
Affiche le nom de la partie en cours
|
|
|
|
|
"""
|
|
|
|
|
assert type(nom) == str
|
|
|
|
|
|
2015-03-15 09:34:46 +01:00
|
|
|
|
if affichage:
|
|
|
|
|
print('\n', nom, '=' * len(nom), sep='\n')
|
2015-03-10 10:50:42 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def section(nom):
|
2015-03-12 19:28:02 +01:00
|
|
|
|
"""
|
|
|
|
|
str → ∅
|
|
|
|
|
Affiche le nom de la section en cours
|
|
|
|
|
"""
|
|
|
|
|
assert type(nom) == str
|
|
|
|
|
|
2015-03-15 09:34:46 +01:00
|
|
|
|
if affichage:
|
|
|
|
|
print('\n', nom, '-' * len(nom), sep='\n')
|
2015-03-10 10:50:42 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def question(numero):
|
2015-03-12 19:28:02 +01:00
|
|
|
|
"""
|
|
|
|
|
str → ∅
|
|
|
|
|
Affiche le numéro de la question en cours
|
|
|
|
|
"""
|
|
|
|
|
assert type(numero) == int
|
2015-03-15 09:14:22 +01:00
|
|
|
|
|
2015-03-15 09:34:46 +01:00
|
|
|
|
if affichage:
|
|
|
|
|
print('\n***', 'Question', numero, '***')
|
|
|
|
|
|
|
|
|
|
def reponse(texte):
|
|
|
|
|
"""
|
|
|
|
|
str → ∅
|
|
|
|
|
Affiche la réponse à la question.
|
|
|
|
|
"""
|
|
|
|
|
assert type(texte) == str
|
|
|
|
|
|
|
|
|
|
if affichage:
|
|
|
|
|
print(texte)
|
|
|
|
|
|
2015-03-10 10:50:42 +01:00
|
|
|
|
|
2015-03-10 10:42:19 +01:00
|
|
|
|
partie("Prérequis")
|
2015-03-10 10:41:10 +01:00
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
|
|
|
|
|
def comp(x, y):
|
|
|
|
|
"""
|
|
|
|
|
parametres
|
|
|
|
|
x , y de même type et comparables
|
|
|
|
|
valeur renvoyee : int
|
|
|
|
|
-1 si x<y
|
|
|
|
|
0 si x==y
|
|
|
|
|
1 si x>y
|
|
|
|
|
action : incrémente le compteur
|
|
|
|
|
CU : aucune
|
|
|
|
|
"""
|
2015-03-12 19:28:02 +01:00
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
global compteur
|
|
|
|
|
compteur = compteur + 1
|
|
|
|
|
if x < y:
|
|
|
|
|
return -1
|
|
|
|
|
elif x == y:
|
|
|
|
|
return 0
|
|
|
|
|
else:
|
|
|
|
|
return 1
|
|
|
|
|
|
2015-03-10 11:25:10 +01:00
|
|
|
|
|
2015-03-10 11:22:34 +01:00
|
|
|
|
def select_min(l, a, b):
|
2015-03-10 11:25:10 +01:00
|
|
|
|
"""
|
|
|
|
|
list, int, int → int
|
|
|
|
|
Renvoie l'indicde d'un élément minimal de la tranche l[a:b]
|
2015-03-12 19:28:02 +01:00
|
|
|
|
CU : l est une liste de longueur n, d'éléments homogènes ordonnables, et a et b deux indices
|
|
|
|
|
tels que 0 ≤ a < b < n
|
2015-03-10 11:25:10 +01:00
|
|
|
|
"""
|
2015-03-10 11:28:31 +01:00
|
|
|
|
assert 0 <= a < b <= len(l)
|
2015-03-10 11:25:10 +01:00
|
|
|
|
|
|
|
|
|
imin = a
|
2015-03-11 21:28:08 +01:00
|
|
|
|
for i in range(a + 1, b + 1):
|
|
|
|
|
if comp(l[i], l[imin]) == -1:
|
2015-03-10 11:25:10 +01:00
|
|
|
|
imin = i
|
|
|
|
|
return imin
|
|
|
|
|
|
2015-03-10 11:22:34 +01:00
|
|
|
|
|
2015-03-10 11:28:31 +01:00
|
|
|
|
def tri_selection(l):
|
2015-03-10 11:22:34 +01:00
|
|
|
|
"""
|
|
|
|
|
list → ∅
|
|
|
|
|
La liste l est trié (selon l'algorithme du tri par sélection du minimum)
|
|
|
|
|
CU : l est une liste de longueur n, homogène, d’éléments ordonnables
|
|
|
|
|
"""
|
2015-03-12 19:28:02 +01:00
|
|
|
|
assert type(l) == list
|
2015-03-10 11:28:31 +01:00
|
|
|
|
n = len(l)
|
2015-03-11 21:28:08 +01:00
|
|
|
|
for i in range(n - 1):
|
2015-03-10 11:22:34 +01:00
|
|
|
|
imin = select_min(l, i, n - 1)
|
|
|
|
|
l[i], l[imin] = l[imin], l[i]
|
|
|
|
|
|
2015-03-11 21:01:45 +01:00
|
|
|
|
|
2015-03-11 17:13:37 +01:00
|
|
|
|
def tri_insertion_base(l, n):
|
2015-03-11 17:08:09 +01:00
|
|
|
|
"""
|
|
|
|
|
list, int → ∅
|
2015-03-12 19:28:02 +01:00
|
|
|
|
n est un indice de l tel que l[0:n] soit une liste triée. La fonction déplace l'élément
|
|
|
|
|
de rang n de telle sorte que l[0:i+1] soit triée
|
|
|
|
|
CU: n est un entier < len(l) et l est une liste, dont les éléments sont comparables, triée
|
|
|
|
|
jusqu'à l'indice n-1.
|
2015-03-11 17:08:09 +01:00
|
|
|
|
"""
|
2015-03-12 19:28:02 +01:00
|
|
|
|
assert type(n) == int and type(l) == list and 0 <= n < len(l)
|
2015-03-11 21:01:45 +01:00
|
|
|
|
|
2015-03-11 17:08:09 +01:00
|
|
|
|
aux = l[n]
|
2015-03-11 21:01:45 +01:00
|
|
|
|
|
|
|
|
|
k = n
|
|
|
|
|
while k >= 1 and comp(l[k - 1], aux) == 1:
|
|
|
|
|
l[k] = l[k - 1]
|
2015-03-11 17:08:09 +01:00
|
|
|
|
k -= 1
|
2015-03-11 21:01:45 +01:00
|
|
|
|
|
2015-03-11 17:08:09 +01:00
|
|
|
|
l[k] = aux
|
|
|
|
|
|
2015-03-11 21:01:45 +01:00
|
|
|
|
|
2015-03-11 17:13:37 +01:00
|
|
|
|
def tri_insertion(l):
|
2015-03-12 19:28:02 +01:00
|
|
|
|
"""
|
|
|
|
|
list → ∅
|
|
|
|
|
La liste l est trié (selon l'algorithme du tri par insertion)
|
|
|
|
|
CU : l est une liste de longueur n, homogène, d’éléments ordonnables
|
|
|
|
|
"""
|
|
|
|
|
assert type(l) == list
|
2015-03-11 17:13:37 +01:00
|
|
|
|
for i in range(1, len(l)):
|
|
|
|
|
tri_insertion_base(l, i)
|
|
|
|
|
|
2015-03-10 11:22:34 +01:00
|
|
|
|
partie("Travail à réaliser")
|
|
|
|
|
|
|
|
|
|
section("Préliminaires")
|
|
|
|
|
|
|
|
|
|
question(1)
|
|
|
|
|
|
2015-03-10 11:25:10 +01:00
|
|
|
|
|
2015-03-10 11:22:34 +01:00
|
|
|
|
def liste_croissante(n):
|
|
|
|
|
"""
|
|
|
|
|
int → list(int)
|
|
|
|
|
Retourne la liste des entiers compris entre 0 et n-1, rangés dans l'ordre croissant
|
|
|
|
|
CU: n est un entier positif
|
|
|
|
|
"""
|
2015-03-12 19:28:02 +01:00
|
|
|
|
assert type(n) == int and n >= 0
|
2015-03-10 11:22:34 +01:00
|
|
|
|
|
2015-03-12 19:28:02 +01:00
|
|
|
|
return list(range(n))
|
2015-03-10 11:22:34 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
question(2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def liste_decroissante(n):
|
|
|
|
|
"""
|
|
|
|
|
int → list(int)
|
|
|
|
|
Retourne la liste des entiers compris entre 0 et n-1, rangés dans l'ordre décroissant
|
|
|
|
|
CU: n est un entier positif
|
|
|
|
|
"""
|
2015-03-12 19:28:02 +01:00
|
|
|
|
assert type(n) == int and n >= 0
|
2015-03-10 11:22:34 +01:00
|
|
|
|
|
2015-03-12 19:57:24 +01:00
|
|
|
|
return list(range(n - 1, -1, -1))
|
2015-03-10 11:22:34 +01:00
|
|
|
|
|
|
|
|
|
question(3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def liste_alea(n, a, b):
|
|
|
|
|
"""
|
|
|
|
|
int, int, int → list
|
|
|
|
|
Renvoie une liste d’entiers, qui construit une liste de longueur n les entiers choisis au hasard
|
|
|
|
|
compris entre a et b.
|
2015-03-12 19:28:02 +01:00
|
|
|
|
CU : n entier positif, a et b entiers, a ≤ b
|
2015-03-10 11:22:34 +01:00
|
|
|
|
"""
|
2015-03-12 19:28:02 +01:00
|
|
|
|
assert type(n) == type(a) == type(b) == int and n >= 0 and a <= b
|
|
|
|
|
|
|
|
|
|
return [randint(a, b) for _ in range(n)]
|
2015-03-10 11:22:34 +01:00
|
|
|
|
|
|
|
|
|
section("Compter les comparaisons")
|
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
question(1)
|
|
|
|
|
|
2015-03-10 11:22:34 +01:00
|
|
|
|
compteur = 0
|
|
|
|
|
|
2015-03-11 17:08:09 +01:00
|
|
|
|
tri_selection(liste_alea(100, -5000, 5000))
|
|
|
|
|
|
2015-03-15 09:34:46 +01:00
|
|
|
|
reponse('{} comparaisons ont été faite pour cette liste.'.format(compteur))
|
2015-03-11 17:08:09 +01:00
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
question(2)
|
2015-03-10 10:41:10 +01:00
|
|
|
|
|
2015-03-10 11:28:31 +01:00
|
|
|
|
|
2015-03-12 19:28:02 +01:00
|
|
|
|
def tri_et_compte(trieur, l):
|
2015-03-11 17:08:09 +01:00
|
|
|
|
"""
|
2015-03-12 19:28:02 +01:00
|
|
|
|
Trie la liste l avec la fonction de triage trieur passée en paramètre, renvoie la liste triée
|
|
|
|
|
et le nombre de comparaisons effectuées
|
2015-03-11 17:08:09 +01:00
|
|
|
|
str, list → (list, int)
|
2015-03-12 19:36:59 +01:00
|
|
|
|
CU: trieur est une fonction, l est une liste
|
2015-03-11 17:08:09 +01:00
|
|
|
|
"""
|
2015-03-12 19:36:59 +01:00
|
|
|
|
assert callable(trieur) and type(l) == list
|
2015-03-10 11:22:40 +01:00
|
|
|
|
|
2015-03-10 11:28:31 +01:00
|
|
|
|
global compteur
|
|
|
|
|
compteur = 0
|
2015-03-12 19:58:53 +01:00
|
|
|
|
ltrie = trieur(l[:]) # On fait une copie l
|
2015-03-10 11:22:40 +01:00
|
|
|
|
|
2015-03-12 19:45:54 +01:00
|
|
|
|
return (ltrie, compteur)
|
2015-03-10 11:22:40 +01:00
|
|
|
|
|
2015-03-10 10:42:19 +01:00
|
|
|
|
partie("Analyse du tri par sélection")
|
2015-03-10 10:41:10 +01:00
|
|
|
|
|
2015-03-11 22:06:30 +01:00
|
|
|
|
|
|
|
|
|
def afficher_tableau(donnees):
|
|
|
|
|
"""
|
|
|
|
|
list[list] → ∅
|
|
|
|
|
Affiche donnees sous forme d'un tableau x / y
|
|
|
|
|
CU : donnees est une liste contenant des listes de même longueurs
|
|
|
|
|
"""
|
2015-03-11 22:21:24 +01:00
|
|
|
|
taillesColonnes = [max([len(str(donnees[y][x])) for y in range(
|
|
|
|
|
len(donnees))]) for x in range(len(donnees[0]))]
|
|
|
|
|
|
|
|
|
|
barres = ['─' * l for l in taillesColonnes]
|
2015-03-11 22:13:35 +01:00
|
|
|
|
print('┌' + '┬'.join(barres) + '┐')
|
2015-03-11 22:06:30 +01:00
|
|
|
|
for y in range(len(donnees)):
|
2015-03-11 22:13:35 +01:00
|
|
|
|
ligne = '│'
|
2015-03-11 22:06:30 +01:00
|
|
|
|
for x in range(len(donnees[0])):
|
2015-03-11 22:21:24 +01:00
|
|
|
|
ligne += ' ' * \
|
|
|
|
|
(taillesColonnes[x] - len(str(donnees[y][x]))) + \
|
|
|
|
|
str(donnees[y][x]) + '│'
|
2015-03-11 22:13:35 +01:00
|
|
|
|
print(ligne)
|
2015-03-11 22:06:30 +01:00
|
|
|
|
if y == 0:
|
2015-03-11 22:13:35 +01:00
|
|
|
|
print('├' + '┼'.join(barres) + '┤')
|
|
|
|
|
print('└' + '┴'.join(barres) + '┘')
|
2015-03-11 22:06:30 +01:00
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
question(1)
|
2015-03-10 10:41:10 +01:00
|
|
|
|
|
2015-03-15 09:34:46 +01:00
|
|
|
|
if affichage:
|
|
|
|
|
tableau = [['nb ', 'croissante ', 'aléatoire ', 'decroissante']]
|
|
|
|
|
for nb in range(1, 101):
|
|
|
|
|
tableau.append([nb,
|
|
|
|
|
tri_et_compte(tri_selection, liste_croissante(nb))[1],
|
|
|
|
|
tri_et_compte(tri_selection, liste_alea(nb, 0, 500))[1],
|
|
|
|
|
tri_et_compte(tri_selection, liste_decroissante(nb))[1]])
|
|
|
|
|
afficher_tableau(tableau)
|
2015-03-10 11:09:49 +01:00
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
question(2)
|
2015-03-10 10:41:10 +01:00
|
|
|
|
|
|
|
|
|
partie("Analyse du tri par insertion")
|
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
question(1)
|
2015-03-10 10:41:10 +01:00
|
|
|
|
|
2015-03-15 09:34:46 +01:00
|
|
|
|
if affichage:
|
|
|
|
|
tableau = [tableau[0]]
|
|
|
|
|
for nb in range(1, 101):
|
|
|
|
|
tableau.append([nb,
|
|
|
|
|
tri_et_compte(tri_insertion, liste_croissante(nb))[1],
|
|
|
|
|
tri_et_compte(tri_insertion, liste_alea(nb, 0, 500))[1],
|
|
|
|
|
tri_et_compte(tri_insertion, liste_decroissante(nb))[1]])
|
|
|
|
|
afficher_tableau(tableau)
|
2015-03-11 17:13:37 +01:00
|
|
|
|
|
2015-03-10 10:41:10 +01:00
|
|
|
|
section("Dans le meilleur des cas")
|
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
question(1)
|
2015-03-10 10:41:10 +01:00
|
|
|
|
|
2015-03-15 09:34:46 +01:00
|
|
|
|
reponse("Le meilleur des cas est lorsque la liste est déjà triée.")
|
2015-03-12 19:36:59 +01:00
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
question(2)
|
2015-03-10 10:41:10 +01:00
|
|
|
|
|
2015-03-15 09:34:46 +01:00
|
|
|
|
if affichage:
|
|
|
|
|
reponse("Résultat théorique établi : c_{tri-insert}(n)=n-1")
|
|
|
|
|
tableau = [['i', 'coût comtpé', 'coût théor.', 'fidèle']]
|
|
|
|
|
tousFideles = True
|
|
|
|
|
for nb in range(1, 101):
|
|
|
|
|
c_compte = tri_et_compte(tri_insertion, liste_croissante(nb))[1]
|
|
|
|
|
c_theor = nb - 1
|
|
|
|
|
fidele = c_compte == c_theor
|
|
|
|
|
if not fidele:
|
|
|
|
|
tousFideles = False
|
|
|
|
|
tableau.append([nb, c_compte, c_theor, fidele])
|
|
|
|
|
afficher_tableau(tableau)
|
|
|
|
|
reponse("Les résultats comptés {} tous fidèles aux résultats théoriques."
|
|
|
|
|
.format("sont" if tousFideles else "ne sont pas"))
|
2015-03-12 19:50:24 +01:00
|
|
|
|
|
2015-03-10 10:41:10 +01:00
|
|
|
|
section("Dans le pire des cas")
|
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
question(1)
|
2015-03-10 10:41:10 +01:00
|
|
|
|
|
2015-03-15 09:34:46 +01:00
|
|
|
|
reponse("Le pire des cas est lorsque la liste est triée dans l'ordre inverse.")
|
2015-03-12 19:58:53 +01:00
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
question(2)
|
2015-03-10 10:41:10 +01:00
|
|
|
|
|
2015-03-15 09:34:46 +01:00
|
|
|
|
if affichage:
|
|
|
|
|
reponse("Résultat théorique établi : c_{tri-insert}(n)=n(n-1)/2")
|
|
|
|
|
tableau = [tableau[0]]
|
|
|
|
|
tousFideles = True
|
|
|
|
|
for nb in range(1, 101):
|
|
|
|
|
c_compte = tri_et_compte(tri_insertion, liste_decroissante(nb))[1]
|
|
|
|
|
c_theor = nb * (nb - 1) // 2
|
|
|
|
|
fidele = c_compte == c_theor
|
|
|
|
|
if not fidele:
|
|
|
|
|
tousFideles = False
|
|
|
|
|
tableau.append([nb, c_compte, c_theor, fidele])
|
|
|
|
|
afficher_tableau(tableau)
|
|
|
|
|
reponse("Les résultats comptés {} tous fidèles aux résultats théoriques."
|
|
|
|
|
.format("sont" if tousFideles else "ne sont pas"))
|
2015-03-12 19:58:53 +01:00
|
|
|
|
|
2015-03-10 10:41:10 +01:00
|
|
|
|
section("En moyenne")
|
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
question(1)
|
|
|
|
|
|
2015-03-15 09:34:46 +01:00
|
|
|
|
if affichage:
|
|
|
|
|
t1 = tri_et_compte(tri_insertion, liste_alea(100, -5000, 5000))[1]
|
|
|
|
|
t2 = tri_et_compte(tri_insertion, liste_alea(100, -5000, 5000))[1]
|
2015-03-12 20:05:17 +01:00
|
|
|
|
|
2015-03-15 09:34:46 +01:00
|
|
|
|
reponse("Le nombre de comparaisons de la première liste est {t1}, celui de la deuxième liste \
|
|
|
|
|
est {t2}.\nLes nombres de comparaisons pour ces deux tris sont {res}.".format(t1=t1, t2=t2, \
|
|
|
|
|
res=("identiques (mais c'est un coup de chance)" if t1 == t2 else "différents")))
|
2015-03-12 20:05:17 +01:00
|
|
|
|
|
2015-03-12 20:06:06 +01:00
|
|
|
|
question(1)
|
|
|
|
|
|
2015-03-15 09:14:22 +01:00
|
|
|
|
def nbre_moyen_tri_insertion(m, n):
|
|
|
|
|
"""
|
|
|
|
|
int, int → float
|
|
|
|
|
Calcule la moyenne du nombre de comparaisons pour trier par insertion un échantillion de taille
|
|
|
|
|
m de listes choisies au hasard de longueur n.
|
|
|
|
|
CU : m et n sont des entiers positifs
|
|
|
|
|
"""
|
|
|
|
|
compTotal = 0
|
|
|
|
|
for _ in range(m):
|
|
|
|
|
compTotal += tri_et_compte(tri_insertion, liste_alea(n, -5000, 5000))[1]
|
|
|
|
|
return compTotal / m
|
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
question(2)
|
|
|
|
|
|
2015-03-15 09:46:46 +01:00
|
|
|
|
reponse("Voir le fichier `analyse_en_moyenne.py`.")
|
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
question(3)
|
|
|
|
|
|
|
|
|
|
question(4)
|
2015-03-10 10:41:10 +01:00
|
|
|
|
|
2015-03-15 09:52:06 +01:00
|
|
|
|
reponse("Je vous invite à éxecuter la commande `make tri_insertion_moyen.txt` pour obtenir ce \
|
|
|
|
|
fichier.")
|
|
|
|
|
|
2015-03-10 10:41:10 +01:00
|
|
|
|
section("Avec Gnuplot")
|
|
|
|
|
|
2015-03-10 10:58:34 +01:00
|
|
|
|
question(1)
|
2015-03-15 10:00:37 +01:00
|
|
|
|
|
|
|
|
|
reponse("Graphiquement, on trouve que cette fonction a pour expression 0,287x²-2x+1\n\
|
2015-03-15 11:21:52 +01:00
|
|
|
|
Cette fonction correspond à la commande suivante : \n\
|
|
|
|
|
gnuplot> plot 'tri_insertion_moyen.txt', 0.287*x**2-2*x +1 with lines\n\
|
|
|
|
|
On peut aussi trouver des valeurs plus précises en faisant une regression pôlynominale des données \
|
|
|
|
|
avec la fonction polyfit de numpy. Je vous invite à lancer la commande suivante :\n\
|
|
|
|
|
python3 analyse_en_moyenne.py --brut --poly --graph")
|