IN 101 - Cours 7 1 Passage d`argument par adresse 2 Complexité

publicité
IN 101 - Cours 7
1
Passage d’argument par adresse
Une fonction ne peut retourner qu’une seule valeur au plus.
On voudrait parfois plusieurs valeurs résultat.
En C, les paramètres sont passés par valeur :
1. Ils sont évalués,
2. ils sont copiés sur la pile avant l’appel.
⇒ Impossible de modifier une variable de l’appelant depuis l’appelé.
Pour s’en sortir, dans la fonction appelante on va passer l’adresse des variables dans lesquelles
stocker ( retourner ) les résultats.
Dans la fonction appelée, l’argument reçu est une adresse, donc le paramètre est un pointeur.
#include <s t d i o . h>
void f ( i n t ∗v )
{
( ∗v )++ ;
}
i n t main ( )
{
int x = 5 ;
f ( &x ) ;
p r i n t f ( ”x = %d\n” , x ) ;
return ( 0 ) ;
}
// On a t t e n d 6 comme a f f i c h a g e .
Un tableau étant un pointeur sur la 1ère case, il est forcément passé par adresse.
2
Complexité
Il existe toujours plusieurs algorithmes pour résoudre un problème. Certains sont plus efficaces que
d’autres.
La complexité d’un algorithme mesure asymptotiquement son efficacité intrinsèque en fonction
de la taille des données à traiter.
L’efficacité en terme de mémoire est la complexité spatiale.
L’efficacité en terme de temps est la complexité temporelle.
2.1
Complexité temporelle
On compte le nombre d’opérations
évolue asymptotiquement.
de base
nécessaires et on regarde comment ce nombre
On cherche à encadrer ce nombre lorsque la taille de l’entrée tend vers +∞.
1
2.1.1
Notations
O(g) : ensemble des fonctions f telles que 0 ≤ f (x) ≤ k × g(x).
— avec k ∈ N∗
— t ∃x0 ∈ N∗ , ∀x ≥ x0 .
θ(g) : ensemble des fonctions f telles que k1 × g(x) ≤ f (x) ≤ k2 × g(x)
— avec k1 , k2 ∈ N∗
— et ∃x0 ∈ N∗ , ∀x ≥ x0 .
Une fonction f
a une complexité en O(g) si f ∈ O(g) (respectivement
en θ).
Par convention au lieu d’écrire f ∈ O(g) on écrit f = O(g).
2.1.2
Exemple
x2 + x + 1 = θ(n2 )
2.1.3
Classement de complexités
log(n) √
n
n n n log(n) n2 n3 2n exp(n) n! nn 22
Un algorithme avec une complexité polynomiale (nk ) est souvent utilisable.
À partir d’une complexité exponentielle (k n ) un algorithme devient rapidement inutilisable.
2.1.4
Théorie de la complexité
But : classifier des problèmes en fonction de la complexité du meilleur algorithme pour les
résoudre.
On ne sait pas toujours prévoir la complexité optimale.
Problème : question comportant un ou plusieurs paramètres.
Problème de décision : problème dont la solution ∈ {oui, non}.
Les deux classes de problèmes dont on parle le plus sont :
— Classe P : Ensemble des problèmes de décision résolubles en temps polynomial.
— Classe NP : Ensemble des problèmes de décision dont la solution peut être vérifiée en
temps polynomial quand la réponse est oui .
Un problème est dit NP -complet si c’est un problème dans NP au moins aussi difficile que tout
autre problème de NP.
Les algorithmes connus pour résoudre des problèmes NP -complets ont une complexité temporelle exponentielle. Ils sont donc inexploitables en pratique.
2
Téléchargement