Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
SDA
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Julien David
SDA
Commits
8d4214dc
Commit
8d4214dc
authored
5 years ago
by
david
Browse files
Options
Downloads
Patches
Plain Diff
Ajout des fichiers Python du TP1
parent
ac14e905
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
TP1/Python/analyzer.py
+66
-0
66 additions, 0 deletions
TP1/Python/analyzer.py
TP1/Python/arraylist.py
+28
-0
28 additions, 0 deletions
TP1/Python/arraylist.py
TP1/Python/main.py
+26
-0
26 additions, 0 deletions
TP1/Python/main.py
with
120 additions
and
0 deletions
TP1/Python/analyzer.py
0 → 100644
+
66
−
0
View file @
8d4214dc
import
math
# Classe utilisée pour faire des statistiques élémentaires
# sur une séquence d'opérations.
class
Analyzer
:
# Constructeur de la classe analyse
# Complexité en temps/espace, pire et meilleur cas : O(1)
def
__init__
(
self
):
self
.
cost
=
[];
self
.
cumulative_cost
=
[];
self
.
cumulative_square
=
0.
;
# Ajoute un coût, une valeur à l'analyse.
# Complexité en temps/espace, pire cas : O(size)
# Complexité en temps/espace, meilleur cas : O(1)
# Complexité amortie : O(1)
# @param x est la valeur que l'on souhaite ajouter à l'analyse.
def
append
(
self
,
x
):
self
.
cost
.
append
(
x
)
self
.
cumulative_cost
.
append
(
self
.
cumulative_cost
[
len
(
self
.
cumulative_cost
)
-
1
]
+
x
if
len
(
self
.
cumulative_cost
)
>
0
else
x
)
self
.
cumulative_square
=
self
.
cumulative_square
+
x
*
x
# Renvoie la somme des coûts enregistrés dans cette analyse.
# Complexité en temps/espace, meilleur cas : O(1)
# @returns la somme des coûts enregistrés dans cette analyse.
def
get_total_cost
(
self
):
return
self
.
cumulative_cost
[
len
(
self
.
cumulative_cost
)
-
1
]
# Renvoie le coût amorti d'une opération.
# Complexité en temps/espace, meilleur cas : O(1)
# @param pos est l'indice de l'opération pour laquelle on veut connaître le coût amorti.
# @returns le coût amorti d'une opération.
def
get_amortized_cost
(
self
,
pos
):
return
self
.
cumulative_cost
[
pos
]
/
pos
if
pos
>
0
else
self
.
cumulative_cost
[
pos
]
# Renvoie la moyenne des coûts de toutes les opérations enregistrées dans l'analyse.
# Complexité en temps/espace, meilleur cas : O(1)
# @returns la moyenne des coûts de toutes les opérations enregistrées dans l'analyse.
def
get_average_cost
(
self
):
if
len
(
self
.
cumulative_cost
)
==
0
:
raise
Exception
(
'
List is empty
'
)
return
self
.
cumulative_cost
[
len
(
self
.
cumulative_cost
)
-
1
]
/
len
(
self
.
cumulative_cost
);
# Renvoie la variance des coûts de toutes les opérations enregistrées dans l'analyse.
# Complexité en temps/espace, meilleur cas : O(1)
# @returns la variance des coûts de toutes les opérations enregistrées dans l'analyse.
def
get_variance
(
self
):
mean
=
self
.
get_average_cost
()
mean_square
=
mean
*
mean
return
self
.
cumulative_square
-
mean_square
# Renvoie l'écart-type des coûts de toutes les opérations enregistrées dans l'analyse.
# Complexité en temps/espace, meilleur cas : O(1)
# @returns l'écart-type des coûts de toutes les opérations enregistrées dans l'analyse.
def
get_standard_deviation
(
self
):
return
math
.
sqrt
(
self
.
get_variance
())
# Sauvegarde la liste des coûts et des coûts amortis dans un fichier.
# Complexité en temps, meilleur/pire cas : O(size)
# @param path est le chemin du fichier dans lequel la sauvegarde est faite.
def
save_values
(
self
,
path
):
f
=
open
(
path
,
'
w
'
)
for
i
in
range
(
len
(
self
.
cost
)):
f
.
write
(
str
(
i
)
+
"
"
+
str
(
self
.
cost
[
i
])
+
"
"
+
str
(
self
.
get_amortized_cost
(
i
))
+
"
\n
"
)
f
.
close
()
This diff is collapsed.
Click to expand it.
TP1/Python/arraylist.py
0 → 100644
+
28
−
0
View file @
8d4214dc
# Cette classe est un simple proxy vers le type "list" de python
# Le langage ne permettant pas de manipuler l'espace mémoire d'une "list",
# on se contente ici d'observer son comportement.
class
ArrayListProxy
:
# Constructeur de la classe ArraylistProxy
def
__init__
(
self
):
self
.
data
=
[]
# Ajoute l'élément x au tableau
# Complexité en temps/espace, pire cas : O(data.size)
# Complexité en temps/espace, meilleur cas : O(1)
# Complexité amortie : O(1)
def
append
(
self
,
x
):
self
.
data
.
append
(
x
)
# Supprime le dernier élément du tableau
def
pop_back
(
self
):
self
.
data
.
pop
()
# Renvoie l'élément situé à la position 'pos' dans le tableau
def
get
(
self
,
pos
):
return
self
.
data
[
pos
]
# Renvoie le nombre d'éléments dans le tableau
def
get_size
(
self
):
return
len
(
data
)
This diff is collapsed.
Click to expand it.
TP1/Python/main.py
0 → 100644
+
26
−
0
View file @
8d4214dc
import
time
import
sys
from
arraylist
import
ArrayListProxy
from
analyzer
import
Analyzer
# Tableau dynamique.
a
=
ArrayListProxy
()
# Analyse du temps pris par les opérations.
time_analysis
=
Analyzer
();
for
i
in
range
(
1000000
):
before
=
time
.
time
()
a
.
append
(
i
)
after
=
time
.
time
()
# Enregistrement du temps pris par l'opération
time_analysis
.
append
((
after
-
before
)
*
10
**
9
)
# Affichage de quelques statistiques sur l'expérience.
sys
.
stderr
.
write
(
"
Total cost :
"
+
str
(
time_analysis
.
get_total_cost
())
+
"
\n
"
)
sys
.
stderr
.
write
(
"
Average cost :
"
+
str
(
time_analysis
.
get_average_cost
())
+
"
\n
"
)
sys
.
stderr
.
write
(
"
Variance :
"
+
str
(
time_analysis
.
get_variance
())
+
"
\n
"
)
sys
.
stderr
.
write
(
"
Standard deviation :
"
+
str
(
time_analysis
.
get_standard_deviation
())
+
"
\n
"
)
//
Sauvegarde
les
données
de
l
'
expérience: temps et temps amorti par opération.
time_analysis.save_values(
"
../dynamic_array_time_python.plot
"
)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment