SlideShare una empresa de Scribd logo
[MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 1
Chapitre 5 : Manipulation des itérables en python
 Effectuer des opérations de recherche sur différents types de conteneurs
 Manipuler les algorithmes de Tri
 Savoir leur complexité algorithmique
1. Recherche dans un conteneur non trié et dans une séquence triée
On a besoin de modifier la valeur d’un objet x par une nouvelle valeur y dans un
conteneur C. Il faut avant tout voir si x appartient à C. Python permet de faire un tel
traitement avec l’opérateur in ou l’opérateur not in. La réponse sera de type
booléen : True ou False.
Parfois, la réponse booléenne ne suffit pas ! On aura besoin de plus d’informations à
savoir l’emplacement de la valeur x qu’on cherche. Ceci est assuré par C.index(x).
On peut penser à d’autres situations plus élaborées si on veut chercher tous les
éléments dans C ayant la même valeur que x. On rappelle que C.count(x) calcule
le nombre d’occurrences de x dans C.
Ces traitements diffèrent selon le conteneur :
 Un conteneur à accès séquentiel : liste, chaîne ou tuple, ou à accès direct :
ensemble ou dictionnaire
 Trié : recherche guidée
 Non trié : recherche aveugle
a. Cas d’un conteneur non trié
Problématique : C = est un conteneur non trié. On veut vérifier si x appartient à C.
Rech1() effectue un parcours séquentiel de C. Elle itère sur les éléments de C et pas
sur les indices. A chaque fois, on vérifie si i==x, dans ce cas, on retourne vrai et on
quitte la fonction. Si tous les objets de C sont parcourus et on n’a jamais obtenu la
valeur vrai pour la condition x==i, alors on est sûr que l’élément cherché n’existe pas.
Exemple d’exécution :
Remarque : La recherche séquentielle n’est pas adaptée aux dictionnaires.
[MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 2
On propose maintenant une autre version de recherche basée sur les indices et non
pas les objets. La détermination du résultat de la recherche est basée sur la valeur
de i avec laquelle on quitte la boucle tant que. Si i atteint len(C), ceci veut dire
qu’on a parcouru tout le conteneur C.
On propose maintenant de trouver le premier x dans C. Pour ce faire, on propose la
méthode Rech3. Si on ne trouve pas l’élément x, on retourne généralement un
indice non existant (comme -1). Or Python utilise aussi un système d’indexation
négatif. Ainsi, il vaut mieux retourner None.
b. Cas d’une séquence triée
On suppose maintenant que le conteneur C est trié d’une manière croissante. La
recherche est guidée par la valeur de x :
Solution 1 :
Solution 2 :
Quand le conteneur est trié, on peut penser à procéder par dichotomie en suivant
les étapes suivantes :
 On calcule le milieu m du conteneur
 On compare C[m] à x :
o Si C[m]=x : Trouvé !
[MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 3
o Si C[m]>x : on continue la recherche dans la partition C[0 :m]
o Si C[m]<c : on continue la recherche dans la partition C[m+1 :]
 Ce principe est répété jusqu’à ce que le conteneur C ne contienne plus
d’éléments
Solution 3 : Traduisons cette version séquentielle/itérative de la recherche
dichotomique en une version récursive
c. Cas d’un dictionnaire
La position d’une entrée dans un dictionnaire est calculée à partir de sa clé. Une
fonction spéciale est utilisée pour ce faire, appelée fonction de hachage. Dans la
littérature, on croise pas mal de fonctions de hachage, on va considérer une
fonction qui se base sur les codes ascii des caractères constituants d’une clé.
[MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 4
2. Les tris
a. Tri par sélection
Le principe :
 Commencer à chercher l’indice du minimum de la liste L
 Permuter le 1er élément de la liste avec l’élément minimum trouvé
 Chercher l’indice du minimum des éléments de la sous liste L[1 :] et le
permuter avec le deuxième élément
 Continuer ce principe jusqu’à ce que la liste devienne triée
o On échange l’élément à la position i avec le minimum de la sous liste
L[i+1 :]. L’algorithme se termine au bout de n-1 boucles quand on a
trouvé n-1 minimums successifs
Le code :
b. Tri par fusion
Le principe :
C’est un algorithme de tri basé sur le principe de « Diviser pour régner ». On subdivise
la liste en deux sous listes de tailles presque égales, on trie en suite ces dernière puis
on les fusionne pour obtenir une liste triée.
L’algorithme utilise deux fonctions :
[MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 5
 Fonction fusion : Fusionne deux listes supposées triées en une seule. Par
exemple, fusion([1,2,4],[2,3,8]) renvoie [1,2,2,3,4,8]. L’algorithme de la fusion
procède comme suit :
o Comparer les premiers éléments des deux sous listes
o Ajouter le plus petit d’entre eux dans une liste résultat
o Avancer dans la liste d’où est ce que l’élément a été pris
o Si on termine tous les éléments d’une liste et qu’il reste encore des
éléments dans la seconde, on effectue une copie des éléments
restants directement
 Fonction tri : C’est une fonction récursive. Elle consiste à :
o Couper en deux la liste initiale
o Trier par appels récursifs les deux sous listes
o Fusionner les deux sous listes triées en utilisant la fonction fusion
Le code :
c. Tri rapide
Le principe :
C’est aussi un algorithme basé sur le paradigme « diviser pour régner » :
 Diviser : Il s’agit de choisir deux sous listes A et B contenant respectivement les
éléments de L qui sont inférieurs à p et ceux qui lui sont supérieurs ou égaux.
 Régner : Le même principe est appliqué pour trier les sous-listes A et B, jusqu’à
obtention de sous listes de tailles ≤ 1
[MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Complexité 6
 Combiner : Aucun effort de combinaison n’est nécessaire étant donné que
les sous listes sont déjà triés
Le code :
3. Complexité
a. Calcul des coûts des fonctions
Le calcul de coût consiste à déterminer le temps nécessaire à l’exécution des
différentes instructions d’un programme en fonction de la taille des données. Les
règles suivantes sont à prendre en considération :
Instruction Désignation Notation Formule de calcul du coût
Instruction simple input,
print,=,opérations
de comparaisons,
(==, !=,<=,…),
opérations
aréthmétiques
(+,,*,/,//,%,**),
break,
continue,return
Nécessite une
unité de temps à
leur exécution
1
Structure
conditionnelle
If condition:
i1
else:
i2
On note C1,C2,
C3 les temps
d’exécutions
respectifs
nécessaires à la
condition, i1 et i2
C1+max(C2,C3)
[MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Complexité 7
Boucle for for i in range(N) :
ins
On note ci le
temps
d’exécution du
bloc d’instruction
ins. Deux cas se
présentent :
 Le bloc ins
dépend de la
valeur de i
 Le bloc ins est
indépendant
de la valeur
de i
∑ci
n*c
Boucle while while condition :
ins
On note m, c1,
et c2
respectivement
le nombre de
boucles espéré,
le coût de la
condition et le
coût de ins
m*max(c1,c2)
b. Mesure de la complexité
Le calcul de coût d’une fonction renseigne sur le temps nécessaire à son
exécution, mais il suffit de changer de machine que la valeur change avec des
données identiques! D’où, il sera utile de construire une fonction qui décrit le
comportement de l’algorithme quand:
a. La taille…
b. Et le traitement…
Instruction Notation Formule de calcul du coût
Input, print,=,
opérations de
comparaisons,
opérations
arithmétiques, return,
break, continue
O(1)
Un bloc d’instruction
simple
I1
..
Ik
Complexité respective de
I1..Ik sont O(f1(n)),
O(f2(n)).. O(fk(n))
O(max(g(n),f1(n),f2(n)))
[MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Complexité 8
If condition:
i1
else:
i2
Complexités respective de
la condition, de i1 et de i2
sont données par : O(g(n)),
O(f1(n)) et O(f2(n))
O(max(g(n),f1(n),f2(n))
for I in range(N):
ins
Complexité de ins est note
O(f(n))
O(N*f(n))
while condition:
ins
La boucle se répète m fois
que la complexité de la
condition est O(g(n)) et la
complexité de l’instruction
O(f(n))
O(m*max(O(g(n),O(f(n)))
c. Classification des problèmes
Classe de complexité désignations Exemple de problèmes
O(1) Complexité constante: le
temps d’exécution
n’augmente pas avec
l’accroissement de la taille
des données
Affectation, calcul arithmétique,
comparaison, accès au premier
élément d’un ensemble de
données
O(log(n)) Complexité
logarithmique :
augmentation très faible
du temps d’exécution
quand la taille des
données s’accroit
Recherche dichotomique,
conversion d’un décimal en
binaire, couper un ensemble de
données en deux sous
ensembles
O(n) Complexité linéaire : le
temps d’exécution
s’accroit d’une manière
linéaire avec la taille des
données
Parcours d’une liste, Recherche
linéaire dans une liste
O(n log(n)) Complexité quasi-linéaire Couper un ensemble de
données en deux sous
ensembles d’une manière
répétitive et combiner les sous
ensembles pour obtenir la
solution finale ( les problèmes
diviser pour régner..)
O(n²) Complexité quadratique :
le temps de l’exécution
est le carré de la taille des
données
Double boucles imbriquées
O(n3) Complexité cubique : Trois boucles imbriquées
O(np) Complexité polynomiale P boucles imbriquées
[MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Application 9
O(2n)ou O(exp(n)) Complexité exponentielle Générer tous les sous-ensembles
possibles d’un sous ensemble
possible (Tours de Hanoi)
Application
Calculer le coût des méthodes de tris vu dans ce chapite.

Más contenido relacionado

La actualidad más candente

Formation python
Formation pythonFormation python
Formation python
j_lipaz
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
IbtissameAbbad1
 
Cours algo: Les pointeurs
Cours algo: Les pointeursCours algo: Les pointeurs
Cours algo: Les pointeurs
Sana REFAI
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
Haytam EL YOUSSFI
 
Chap04 les-algorithme-de-tri-et-de-recherche
Chap04 les-algorithme-de-tri-et-de-rechercheChap04 les-algorithme-de-tri-et-de-recherche
Chap04 les-algorithme-de-tri-et-de-recherche
Riadh Harizi
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
LamissGhoul1
 
Exercice 2 java Héritage
Exercice 2  java HéritageExercice 2  java Héritage
Exercice 2 java Héritage
NadaBenLatifa
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac
Amri Ossama
 
La gestion des exceptions avec Java
La gestion des exceptions avec JavaLa gestion des exceptions avec Java
La gestion des exceptions avec Java
Papa Cheikh Cisse
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
Shellmates
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en python
Mariem ZAOUALI
 
Cours Algorithme: Matrice
Cours Algorithme: MatriceCours Algorithme: Matrice
Cours Algorithme: Matrice
InforMatica34
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
ECAM Brussels Engineering School
 
Python.pptx
Python.pptxPython.pptx
Python.pptx
Jaouad Rachek
 
01 correction-td smia-s2-info2
01 correction-td smia-s2-info201 correction-td smia-s2-info2
01 correction-td smia-s2-info2
L’Université Hassan 1er Settat
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
Aziz Darouichi
 
Ch2_ la récursivité.pdf
Ch2_ la récursivité.pdfCh2_ la récursivité.pdf
Ch2_ la récursivité.pdf
FadouaBouafifSamoud
 

La actualidad más candente (20)

Formation python
Formation pythonFormation python
Formation python
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Cours algo: Les pointeurs
Cours algo: Les pointeursCours algo: Les pointeurs
Cours algo: Les pointeurs
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Chap04 les-algorithme-de-tri-et-de-recherche
Chap04 les-algorithme-de-tri-et-de-rechercheChap04 les-algorithme-de-tri-et-de-recherche
Chap04 les-algorithme-de-tri-et-de-recherche
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
Exercice 2 java Héritage
Exercice 2  java HéritageExercice 2  java Héritage
Exercice 2 java Héritage
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
TP C++ : enoncé
 
Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac
 
La gestion des exceptions avec Java
La gestion des exceptions avec JavaLa gestion des exceptions avec Java
La gestion des exceptions avec Java
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en python
 
Cours Algorithme: Matrice
Cours Algorithme: MatriceCours Algorithme: Matrice
Cours Algorithme: Matrice
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
 
Python.pptx
Python.pptxPython.pptx
Python.pptx
 
01 correction-td smia-s2-info2
01 correction-td smia-s2-info201 correction-td smia-s2-info2
01 correction-td smia-s2-info2
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
Ch2_ la récursivité.pdf
Ch2_ la récursivité.pdfCh2_ la récursivité.pdf
Ch2_ la récursivité.pdf
 

Similar a Chap5 La manipulation des iterables en python

Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 
Cours algorithmique et complexite
Cours algorithmique et complexite Cours algorithmique et complexite
Cours algorithmique et complexite Saddem Chikh
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 
Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...
Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...
Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...
RichardTerrat1
 
cours algorithme
cours algorithmecours algorithme
cours algorithme
mohamednacim
 
cours TRI selection insertion bublle sort
cours TRI selection insertion bublle sortcours TRI selection insertion bublle sort
cours TRI selection insertion bublle sort
YounesOuladSayad1
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
Tunisie collège
 
Mathématiques et Python
Mathématiques et PythonMathématiques et Python
Mathématiques et Python
Dany-Jack Mercier
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
ECAM Brussels Engineering School
 
Formation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxFormation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptx
betalab
 
cour informatique niveau3 programmation en Python.pdf
cour informatique niveau3 programmation en  Python.pdfcour informatique niveau3 programmation en  Python.pdf
cour informatique niveau3 programmation en Python.pdf
Nanchi6
 
Rapport Projet Module Complexité
Rapport Projet Module ComplexitéRapport Projet Module Complexité
Rapport Projet Module Complexité
Fatima Zahra Fagroud
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de java
Amir Souissi
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
Abdoulaye Dieng
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
Yassine Anddam
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)DriNox NordisTe
 
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdfChapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
MbarkiIsraa
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétude
Sana Aroussi
 

Similar a Chap5 La manipulation des iterables en python (20)

Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 
Cours algorithmique et complexite
Cours algorithmique et complexite Cours algorithmique et complexite
Cours algorithmique et complexite
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 
Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...
Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...
Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...
 
cours algorithme
cours algorithmecours algorithme
cours algorithme
 
cours TRI selection insertion bublle sort
cours TRI selection insertion bublle sortcours TRI selection insertion bublle sort
cours TRI selection insertion bublle sort
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
 
Mathématiques et Python
Mathématiques et PythonMathématiques et Python
Mathématiques et Python
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
 
Python chapitre 4.pdf
Python chapitre 4.pdfPython chapitre 4.pdf
Python chapitre 4.pdf
 
Formation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxFormation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptx
 
cour informatique niveau3 programmation en Python.pdf
cour informatique niveau3 programmation en  Python.pdfcour informatique niveau3 programmation en  Python.pdf
cour informatique niveau3 programmation en Python.pdf
 
Rapport Projet Module Complexité
Rapport Projet Module ComplexitéRapport Projet Module Complexité
Rapport Projet Module Complexité
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de java
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)
 
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdfChapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétude
 
Python chapitre 2.pdf
Python chapitre 2.pdfPython chapitre 2.pdf
Python chapitre 2.pdf
 

Más de Mariem ZAOUALI

Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers
Mariem ZAOUALI
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à python
Mariem ZAOUALI
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliques
Mariem ZAOUALI
 
TP2 RMI
TP2 RMITP2 RMI
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
Mariem ZAOUALI
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures reparties
Mariem ZAOUALI
 
Cours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corbaCours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corba
Mariem ZAOUALI
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de base
Mariem ZAOUALI
 
TP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec MatlabTP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec Matlab
Mariem ZAOUALI
 
Comment retrouver la forme récursive
Comment retrouver la forme récursiveComment retrouver la forme récursive
Comment retrouver la forme récursive
Mariem ZAOUALI
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / TunisieTP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / Tunisie
Mariem ZAOUALI
 
Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Mariem ZAOUALI
 

Más de Mariem ZAOUALI (16)

Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à python
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliques
 
TP2 RMI
TP2 RMITP2 RMI
TP2 RMI
 
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures reparties
 
Cours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corbaCours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corba
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de base
 
TP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec MatlabTP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec Matlab
 
Comment retrouver la forme récursive
Comment retrouver la forme récursiveComment retrouver la forme récursive
Comment retrouver la forme récursive
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / Tunisie
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
 
TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / Tunisie
 
TP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / TunisieTP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / Tunisie
 
Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia
 

Chap5 La manipulation des iterables en python

  • 1. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 1 Chapitre 5 : Manipulation des itérables en python  Effectuer des opérations de recherche sur différents types de conteneurs  Manipuler les algorithmes de Tri  Savoir leur complexité algorithmique 1. Recherche dans un conteneur non trié et dans une séquence triée On a besoin de modifier la valeur d’un objet x par une nouvelle valeur y dans un conteneur C. Il faut avant tout voir si x appartient à C. Python permet de faire un tel traitement avec l’opérateur in ou l’opérateur not in. La réponse sera de type booléen : True ou False. Parfois, la réponse booléenne ne suffit pas ! On aura besoin de plus d’informations à savoir l’emplacement de la valeur x qu’on cherche. Ceci est assuré par C.index(x). On peut penser à d’autres situations plus élaborées si on veut chercher tous les éléments dans C ayant la même valeur que x. On rappelle que C.count(x) calcule le nombre d’occurrences de x dans C. Ces traitements diffèrent selon le conteneur :  Un conteneur à accès séquentiel : liste, chaîne ou tuple, ou à accès direct : ensemble ou dictionnaire  Trié : recherche guidée  Non trié : recherche aveugle a. Cas d’un conteneur non trié Problématique : C = est un conteneur non trié. On veut vérifier si x appartient à C. Rech1() effectue un parcours séquentiel de C. Elle itère sur les éléments de C et pas sur les indices. A chaque fois, on vérifie si i==x, dans ce cas, on retourne vrai et on quitte la fonction. Si tous les objets de C sont parcourus et on n’a jamais obtenu la valeur vrai pour la condition x==i, alors on est sûr que l’élément cherché n’existe pas. Exemple d’exécution : Remarque : La recherche séquentielle n’est pas adaptée aux dictionnaires.
  • 2. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 2 On propose maintenant une autre version de recherche basée sur les indices et non pas les objets. La détermination du résultat de la recherche est basée sur la valeur de i avec laquelle on quitte la boucle tant que. Si i atteint len(C), ceci veut dire qu’on a parcouru tout le conteneur C. On propose maintenant de trouver le premier x dans C. Pour ce faire, on propose la méthode Rech3. Si on ne trouve pas l’élément x, on retourne généralement un indice non existant (comme -1). Or Python utilise aussi un système d’indexation négatif. Ainsi, il vaut mieux retourner None. b. Cas d’une séquence triée On suppose maintenant que le conteneur C est trié d’une manière croissante. La recherche est guidée par la valeur de x : Solution 1 : Solution 2 : Quand le conteneur est trié, on peut penser à procéder par dichotomie en suivant les étapes suivantes :  On calcule le milieu m du conteneur  On compare C[m] à x : o Si C[m]=x : Trouvé !
  • 3. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 3 o Si C[m]>x : on continue la recherche dans la partition C[0 :m] o Si C[m]<c : on continue la recherche dans la partition C[m+1 :]  Ce principe est répété jusqu’à ce que le conteneur C ne contienne plus d’éléments Solution 3 : Traduisons cette version séquentielle/itérative de la recherche dichotomique en une version récursive c. Cas d’un dictionnaire La position d’une entrée dans un dictionnaire est calculée à partir de sa clé. Une fonction spéciale est utilisée pour ce faire, appelée fonction de hachage. Dans la littérature, on croise pas mal de fonctions de hachage, on va considérer une fonction qui se base sur les codes ascii des caractères constituants d’une clé.
  • 4. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 4 2. Les tris a. Tri par sélection Le principe :  Commencer à chercher l’indice du minimum de la liste L  Permuter le 1er élément de la liste avec l’élément minimum trouvé  Chercher l’indice du minimum des éléments de la sous liste L[1 :] et le permuter avec le deuxième élément  Continuer ce principe jusqu’à ce que la liste devienne triée o On échange l’élément à la position i avec le minimum de la sous liste L[i+1 :]. L’algorithme se termine au bout de n-1 boucles quand on a trouvé n-1 minimums successifs Le code : b. Tri par fusion Le principe : C’est un algorithme de tri basé sur le principe de « Diviser pour régner ». On subdivise la liste en deux sous listes de tailles presque égales, on trie en suite ces dernière puis on les fusionne pour obtenir une liste triée. L’algorithme utilise deux fonctions :
  • 5. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 5  Fonction fusion : Fusionne deux listes supposées triées en une seule. Par exemple, fusion([1,2,4],[2,3,8]) renvoie [1,2,2,3,4,8]. L’algorithme de la fusion procède comme suit : o Comparer les premiers éléments des deux sous listes o Ajouter le plus petit d’entre eux dans une liste résultat o Avancer dans la liste d’où est ce que l’élément a été pris o Si on termine tous les éléments d’une liste et qu’il reste encore des éléments dans la seconde, on effectue une copie des éléments restants directement  Fonction tri : C’est une fonction récursive. Elle consiste à : o Couper en deux la liste initiale o Trier par appels récursifs les deux sous listes o Fusionner les deux sous listes triées en utilisant la fonction fusion Le code : c. Tri rapide Le principe : C’est aussi un algorithme basé sur le paradigme « diviser pour régner » :  Diviser : Il s’agit de choisir deux sous listes A et B contenant respectivement les éléments de L qui sont inférieurs à p et ceux qui lui sont supérieurs ou égaux.  Régner : Le même principe est appliqué pour trier les sous-listes A et B, jusqu’à obtention de sous listes de tailles ≤ 1
  • 6. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Complexité 6  Combiner : Aucun effort de combinaison n’est nécessaire étant donné que les sous listes sont déjà triés Le code : 3. Complexité a. Calcul des coûts des fonctions Le calcul de coût consiste à déterminer le temps nécessaire à l’exécution des différentes instructions d’un programme en fonction de la taille des données. Les règles suivantes sont à prendre en considération : Instruction Désignation Notation Formule de calcul du coût Instruction simple input, print,=,opérations de comparaisons, (==, !=,<=,…), opérations aréthmétiques (+,,*,/,//,%,**), break, continue,return Nécessite une unité de temps à leur exécution 1 Structure conditionnelle If condition: i1 else: i2 On note C1,C2, C3 les temps d’exécutions respectifs nécessaires à la condition, i1 et i2 C1+max(C2,C3)
  • 7. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Complexité 7 Boucle for for i in range(N) : ins On note ci le temps d’exécution du bloc d’instruction ins. Deux cas se présentent :  Le bloc ins dépend de la valeur de i  Le bloc ins est indépendant de la valeur de i ∑ci n*c Boucle while while condition : ins On note m, c1, et c2 respectivement le nombre de boucles espéré, le coût de la condition et le coût de ins m*max(c1,c2) b. Mesure de la complexité Le calcul de coût d’une fonction renseigne sur le temps nécessaire à son exécution, mais il suffit de changer de machine que la valeur change avec des données identiques! D’où, il sera utile de construire une fonction qui décrit le comportement de l’algorithme quand: a. La taille… b. Et le traitement… Instruction Notation Formule de calcul du coût Input, print,=, opérations de comparaisons, opérations arithmétiques, return, break, continue O(1) Un bloc d’instruction simple I1 .. Ik Complexité respective de I1..Ik sont O(f1(n)), O(f2(n)).. O(fk(n)) O(max(g(n),f1(n),f2(n)))
  • 8. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Complexité 8 If condition: i1 else: i2 Complexités respective de la condition, de i1 et de i2 sont données par : O(g(n)), O(f1(n)) et O(f2(n)) O(max(g(n),f1(n),f2(n)) for I in range(N): ins Complexité de ins est note O(f(n)) O(N*f(n)) while condition: ins La boucle se répète m fois que la complexité de la condition est O(g(n)) et la complexité de l’instruction O(f(n)) O(m*max(O(g(n),O(f(n))) c. Classification des problèmes Classe de complexité désignations Exemple de problèmes O(1) Complexité constante: le temps d’exécution n’augmente pas avec l’accroissement de la taille des données Affectation, calcul arithmétique, comparaison, accès au premier élément d’un ensemble de données O(log(n)) Complexité logarithmique : augmentation très faible du temps d’exécution quand la taille des données s’accroit Recherche dichotomique, conversion d’un décimal en binaire, couper un ensemble de données en deux sous ensembles O(n) Complexité linéaire : le temps d’exécution s’accroit d’une manière linéaire avec la taille des données Parcours d’une liste, Recherche linéaire dans une liste O(n log(n)) Complexité quasi-linéaire Couper un ensemble de données en deux sous ensembles d’une manière répétitive et combiner les sous ensembles pour obtenir la solution finale ( les problèmes diviser pour régner..) O(n²) Complexité quadratique : le temps de l’exécution est le carré de la taille des données Double boucles imbriquées O(n3) Complexité cubique : Trois boucles imbriquées O(np) Complexité polynomiale P boucles imbriquées
  • 9. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Application 9 O(2n)ou O(exp(n)) Complexité exponentielle Générer tous les sous-ensembles possibles d’un sous ensemble possible (Tours de Hanoi) Application Calculer le coût des méthodes de tris vu dans ce chapite.