• Aucun résultat trouvé

Complexité, Approfondissement de la programmation en Python, Structures de données avancées et récursives

N/A
N/A
Protected

Academic year: 2022

Partager "Complexité, Approfondissement de la programmation en Python, Structures de données avancées et récursives"

Copied!
24
0
0

Texte intégral

(1)

Informatique S4

Complexité, Approfondissement de la programmation en Python, Structures de données avancées et récursives

Équipe pédagogique Info CPP

Contacter l’enseignant:[email protected] À bookmarker:https://perso.crans.org/frenoy/infoCPPS4 2021

1

(2)

Contexte

• Informatique 6= science des ordinateurs

• Informatique 6= programmation

Informatique = Science du traitement de l’information(ce qui inclut – mais ne se limite pas à – la programmation, et n’est pas toujours lié à l’utilisation d’un ordinateur)

La programmation = utile dans d’autres domaines que

l’informatique (analyse et visualisation de données en sciences)⇒ fait partie du tronc commun essentiel à un futur scientifique

2

(3)

Contenu du semestre 4 Pré-requis :

• Contenu des deux précédents semestres (sauf BD)

• Programmation en Python, maitrise des outils associés (Spyder ? Éditeur de texte ? Ligne de commande ?)

• Livre : informatique pour tous en CPGE (disponible en ligne) Objectifs :

• Approfondissements en programmation ⇒ utilité générale

• Introduction à l’informatique théorique ⇒ déterminer si c’est un domaine “pour vous” (continuer dans une formation à dominante informatique ?)

• Compétences transversales : travail collaboratif (git ?), représentation graphique de données (matplotlib), rédaction d’un rapport (LATEX ?), outils unix (peut-être ?)

3

(4)

Plan du cours (2 amphis)

Complexité

Structures de données élémentaires Récursivité

Dictionnaires Arbres

Programmation avancée

4

(5)

Fonctionnement

Enseignements :

• 2 ×1,5h amphi

• 5 ×1,5h TD

• 7 ×1,5h TP ⇒ réalisation d’un projet Évaluation :

• 50 % examen écrit (contenu proche des TD)

• 50 % note de TP (projet)

Contact :[email protected]

5

(6)

Complexité

(7)

Rappels

• Complexité = coût de l’exécution d’un algorithme

• Dépend de la taille des entrées

• Ce coût s’exprime le plus souvent en terme de

temps d’exécution(est-ce que cet algorithme va vite ?)

mémoirenécessaire à l’exécution de l’algorithme

• On parle decomplexité en temps ou decomplexité en mémoire.

6

(8)

Calculs de coûts asymptotiques

Soientf,g ∈N→R+.

Déf.f ∈ O(g) ssi ∃c ∈R+,n0,nn0,f(n)≤c.g(n).

Exemple : n.(100.log(n) +√n) + 1000∈ O(n2).

Déf.f ∈Ω(g) ssi ∃c ∈R+\{0},n0,nn0,f(n)≥c.g(n).

Exemple : Recherche du max d’un tableau non trié àn éléments en Ω(n) comparaisons : l’algo naïf est optimal

Déf.f ∈Θ(g) ssi f ∈ O(g) etf ∈Ω(g).

Exemples : Pni=15.i ∈Θ(n2) et Pni=12i ∈Θ(2n).

Et comme logb(n) = logloga(n)

a(b), logb(n)∈Θ(loga(n))

7

(9)

Structures de données élémentaires

(10)

Tableaux

Vous connaissez déja les tableaux (informatique pour tous en CPGE :une suite de valeurs stockées dans des cases mémoire contigües)

⇒Structure de base existante dans (presque) tous les langages, correspondant directement à la structure de la mémoire de l’ordinateur

...2 341

1 -21

0 14

en Python, l’objetlist est plus ou moins un tableau

8

(11)

Tableaux (list) : utilisation

Rappel : quelles opérations élémentaires sur l’objetlist en Python connaissez-vous ?

• Créer une list

• Accéder à un élément

• Ajouter un élément à la fin

• Concaténer deux list

• Supprimer un élément

9

(12)

Piles

À faire à la maison pour le 3 février (TP 1) :lire les parties 1 et 2 du chapitre 12 (“Structure de pile”) d’informatique pour tous en CPGE.

10

(13)

Listes chaînées ?

Avancé (optionnel) :lire

https://fr.wikipedia.org/wiki/Liste_chaînée.

Si ça vous intéresse, exemple d’implémentation en C : https://openclassrooms.com/fr/courses/

19980-apprenez-a-programmer-en-c/

19733-les-listes-chainees.

11

(14)

Récursivité

(15)

Rappel : Fonction récursive = fonction qui s’appelle elle-même

def fact ( n ):

if n == 1:

r e t u r n 1

r e t u r n n * fact (n -1)

Une autre façon d’exprimer un calcul (que la version itérative

“classique”)

def fibo ( n ):

if n == 0:

r e t u r n 0 if n == 1:

r e t u r n 1

r e t u r n fibo (n -1) + fibo (n -2)

C’est parfois la version la plus intuitive (qui découle de la définition de l’objet)

12

(16)

Fonctionnement en arrière plan : empilement des appels

def fact ( n ):

if n == 1:

r e t u r n 1

r e t u r n n * fact (n -1)

n=3

fact(3)

n=3 n=2

fact(2)

n=3 n=2 n=1

fact(1)

n=3 n=2

return 1

n=3

return 2 return 6

13

(17)

La récursivité terminale

Observons cette fonction :

def pgcd (a , b ):

if b == 0:

r e t u r n a

r e t u r n pgcd (b , a % b )

a=24, b=16

pgcd(24,16)

a=16, b=8

pgcd(16,8)

a=8, b=0

pgcd(8,0) return 8 L’empilement des appels récursifs n’est pas nécessaire(mais cette optimisation n’est pas implémentée dans Python)

14

(18)

Structures de données récursives

Une structure de données peut être définie récursivement.

Quelques exemples :

Entiers naturels un entier naturel est :

• soit0

• soit lesuccesseurd’un autre entier naturel Liste chainée une liste d’entiers est :

• soit la liste vide

• soit un couple formé d’un entier et d’une liste Arbres binaires voir plus bas

15

(19)

Structures de données récursivesprogrammes récursifs

Exemple : addition de deux entiers avec la définition récursive

def add (a , b ):

if a == 0:

r e t u r n b e l s e:

# a = s u c c e s s e u r ( a0 )

r e t u r n add ( a0 , s u c c e s s e u r ( b ))

16

(20)

Dictionnaires

(21)

Introduction aux dictionnaires

Dictionnaire= ensemble fini de paires clé/valeur avec unicité des clés.

• Encode une fonction des clés vers les valeurs.

• Modifiable (comme unetable dans un SGBD).

• Généralise la notion de liste Python et de tableau en C : (index ⇒ clés, pas forcémentN, pas forcément consécutives).

• Implémentation optimisée pour obtenir ou modifier la valeur associée à une clé

17

(22)

Usage de base d’un dictionnaire

• Initialisation :

note = { " Toto " : 8 , " Arthur " : 20 , " Gaston " : 15}

pays = {( " Tintin " , 3): " Am é rique " , ( " Tintin " , 5): " Chine " }

• La clé est-elle présente ?

" Toto " in note # True ( " Tintin " , 4) in pays # False

• Lire/Modifier la valeur associée à la clé :

note [ " Gaston " ] = note [ " Toto " ]+2 # 10

pays [( " Tintin " , 4)] # erreur K e y E r r o r !

• Insérer des nouvelles clés/valeurs :

pays [( " Tintin " , 4)] = " Egypte "

pays [( " Asterix " , 3)] = " A l l e m a g n e "

• Supprimer une clé/valeur :

del note [ " Arthur " ] 18

(23)

Usage avancé

• Itérer sur les clés :

for k in note : p r i n t( k )

• Itérer sur les clés et les valeurs :

for k , v in note . items ():

p r i n t(k , v )

• Itérer sur les valeurs :

for v in note . values ():

p r i n t( v )

19

(24)

Utilité : Pourquoi pas une liste chainée ou un tableau ?

Imaginons : on dispose d’une liste de noms (la clé, chaines de caractères de 12 lettres ou moins), associés à une donnée (la valeur, par exemple une date de naissance ou une adresse postale).

On souhaite pouvoir ef ectuerrapidementdes opérations comme retrouver la date de naissance d’une personne à partir de son nom.

20

Références

Documents relatifs

[r]

Poste de santé catholique Léona (Quartier) Commune Sokone Toubacouta F Privé non lucratif. TOTAL 16 F:16 ; NF:O PUBLIC:15 ;

Exemple : dans ListeActivitesF2.xls, afficher le total des ventes (chiffre affaires euro) par pays.  Triez le tableau préalablement selon le critère de regroupement souhaité (ici,

Fonctionnement d'une pile La structure de pile permet de retrouver les éléments dans l'ordre inverse de 1 Une structure de file permet de retrouver les éléments dans l'ordre où

On retient pour commencer les trois seuls facteurs premiers 2,3 et 5 et on constate qu’à partir de (Λ) il est impossible de trouver une liste (L) qui respecte le lemme (L)..

The string B-tree: a new data structure for string search in external memory and its applications: consulter Aymen Sioud.  Data structures and algorithms for set union set

1) La liste (L) initiale ne contient jamais plus de cinq entiers et ces entiers sont tous ≤ 100. 2) Au cours de la partie, (L) peut contenir un entier quelconque en

Q Trouver une liste initiale (L) qui permet d’obtenir en moins de dix tours la cible 2 147 483 647 ₂ qui est le nombre premier de Mersenne découvert par