[PDF] 1. BOUCLES ET COMPLEXITE BOUCLES ET COMPLEXITE. A. Le





Previous PDF Next PDF



Complexité algorithmique

9 sept. 2021 le cas de boucles imbriquées on calculera d'abord la complexité de la boucle interne car on en a besoin pour.



Complexité dun algorithme

Il comprend deux boucles imbriquées chacune effectuant n répétitions de son corps ; le corps de la boucle interne ne comporte qu'une multiplication.



Complexité

4. de la complexité en temps de l'algorithme «abstrait» sous-jacent. Théorème 1 La complexité de p boucles imbriquées de 1 à n ne contenant que.



Complexité algorithmique

Exemple : algorithmes avec deux boucles imbriquées. Tris à bulle par insertion et par sélection. O(ni) : complexité polynomiale



Complexité dun algorithme I Généralités

) ? 2n. Comme l'instruction x += 1 de la boucle en j est réalisée en O(1) la complexité temporelle dans le pire des cas des boucles imbriquées sur i et j est 



1. BOUCLES ET COMPLEXITE

BOUCLES ET COMPLEXITE. A. Le langage de programmation Java. Java est un langage de programmation normalisé. Le mot Java est une marque déposée par la firme 



Complexité des Algorithmes A) Introduction

Ce que l'on entend par complexité des algorithmes est une évaluation du coût Exemple-4 (deux boucles imbriquées sans dépendance des indices).



Algorithmique Notion de complexité

complexité temporelle : (ou en temps) : temps de calcul ; La complexité (théorique) est un ordre de grandeur de ces ... Cas des boucles imbriquées.



Jointures par boucles imbriquées

Si une table tient en mémoire : jointure par boucle imbriquées ou hachage. • Si au moins un index est utilisable : jointure par boucle imbriquées indexée.



Algorithmique Notion de complexité

complexité temporelle : (ou en temps) : temps de calcul ; La complexité (théorique) est un ordre de grandeur de ces ... Cas des boucles imbriquées.



[PDF] Complexité algorithmique - Université Grenoble Alpes

Comme établi précédemment pour une boucle on fait la somme des complexités de chaque itération Dans le cas de boucles imbriquées on calculera d'abord la 



[PDF] Complexité dun algorithme I Généralités

La complexité temporelle des boucles imbriquées est donc en O(n2) Par somme la complexité temporelle dans le pire des cas de la fonction f1 est en O(n2) Q2 



[PDF] Complexité algorithmique - MIS

O(ni) : complexité polynomiale quand le paramètre double le temps d'exécution est multiplié par 2i Exemple : algorithme utilisant i boucles imbriquées O(in) 



[PDF] Calculs de complexité dalgorithmes

?Complexité des algorithmes ?Exemples de calcul de complexité boucles for imbriquées chacune d'elle de la forme for (int i



[PDF] Complexité des Algorithmes A) Introduction - LIPN

Ce que l'on entend par complexité des algorithmes est une évaluation du coût Exemple-4 (deux boucles imbriquées sans dépendance des indices)



[PDF] Complexité dun algorithme - Alexandre Benoit

Il comprend deux boucles imbriquées chacune effectuant n répétitions de son corps ; le corps de la boucle interne ne comporte qu'une multiplication



[PDF] TP 3 : Boucles et boucles imbriquées I Rappels

Et par exemple d'augmenter de 10 l'indice de la suite multiplie environ par 100 le temps de calcul Exercice 11 Évaluer la complexité des algorithmes 



[PDF] 1 BOUCLES ET COMPLEXITE

BOUCLES ET COMPLEXITE A Le langage de programmation Java Java est un langage de programmation normalisé Le mot Java est une marque déposée par la firme 



[PDF] Exemples de boucles imbriquées

boucle ? ou : on parle de boucles imbriquées (la 1e boucle est dite Commenté [AM1]: Nous disons que la complexité de cet



[PDF] Complexité des algorithmes - Pr Abdelhamid Djeffal

On cherche à mesurer la complexité d'un algorithme indépendamment de la La complexité d'une boucle est égale à la somme sur toutes les itérations de la 

  • Comment mesurer la complexité ?

    Réaliser un calcul de complexité en temps revient à compter le nombre d'opérations élémentaires (affectation, calcul arithmétique ou logique, comparaison…) effectuées par l'algorithme.
  • Comment déterminer la complexité d'un algorithme ?

    Pour calculer la complexité d'un algorithme: On calcule la complexité de chaque partie de l'algorithme. On combine ces complexités conformément aux règles déjà vues. On effectue sur le résultat les simplifications possibles déjà vues.
  • Comment déterminer la complexité d'une fonction ?

    On mesure alors la complexité en temps d'un algorithme comme le nombre de ces opérations élémentaires. Par exemple, en considérant élémentaire l'addition de 2 chiffres, poser l'addition de deux nombres de n chiffres nous fera effectuer n additions à 1 chiffre, la complexité sera donc de n.
  • ? La complexité d'un algorithme est la quantité de ressources nécessaires pour traiter des entrées. On la voit comme une fonction de n, la taille de l'entrée. ? Les principales ressources mesurées sont le temps (nombre d'instructions utilisées) et l'espace (quantité d'espace mémoire nécessaire).
1. BOUCLES ET COMPLEXITE

Université de Nice - Sophia Antipolis

Faculté des Sciences

DEUG MIAS MP1

Programmation 2000-01

1. BOUCLES ET COMPLEXITEA. Le langage de programmation Java

Java est un langage de programmation normalisé. Le mot Java est une marque déposée par la firme Sun Microsystems

[http://java.sun.com] qui contrôle le développement du langage, avec l'aide des principaux acteurs du marché [IBM,

Hewlett-Packard, etc]. Ce que l

on nomme Java 2 débute en réalité avec la version 1.2 du langage [vous travaillez au

MIPS avec la version 1.3].

Les outils de développement Java [compilateur, run-time] sont inclus dans le JDK [Java Development Kit] distribué par

Sun pour Windows ou Linux. Sur son site http://www.apple.com/java, le constructeur Apple distribue lui-même pour

Mac OS-9 son MRJ-SDK [Macintosh Runtime for Java, Software Development Kit] en version 1.1.8 ce qui s'avère

suffisant pour les programmes du DEUG. Sous Mac OS-X [un Unix avec interface graphique pour les Macintosh],

Java 2 est fourni en standard avec tous les outils Unix.

RealJ est un environnement de programmation [en anglais IDE : Integrated Development Environment] réservé à

Windows. Il permet de programmer en Java, gratuitement pour l'éducation, et de manière simple en gérant des projets.

Un projet n'est autre qu'un ensemble de classes, dépendantes ou pas, dont l'une est la classe principale [Set As Main]

destinée à être exécutée.

Un CD-ROM contenant les outils Java sous Windows et Linux est disponible pour le prêt au bureau 203. Un CD-ROM

pour le Macintosh est également disponible [mailto:roy@unice.fr].

B. Le travail en Java au second semestre MP1

Seules des séances en salles-machines sont prévues, avec des feuilles d'auto-formation contenant des compléments sur

le langage, sur l'algorithmique, et des exercices associés. Tous les exercices doivent avoir été compris et programméspour les examens. Ne prenez pas de retard, vos enseignants attendent de vous un travail régulier, correspondant auniveau que vous souhaitez atteindre. Sachez qu'à l'aube de ce nouveau millénaire, avec une informatisation toujours plus

grande de la société, un[e] jeune scientifique ne sachant pas ou mal programmer sera handicapé[e], que ce soit bien

clair. Enfin, comme chaque année, nombre d'entre vous souhaiteront bifurquer vers l'informatique à la fin de la seconde

année [filière universitaire ou école d'ingénieur]. Ne négligez pas cette possibilité, laissez-vous le maximum de portes

ouvertes, beaucoup de vocations sont tardives et le marché de l'emploi a ses réalités...

Au premier semestre, vous avez appris les rudiments du langage et les premiers algorithmes, notamment sur les

tableaux. Au second semestre, vous allez approfondir ce travail préliminaire, et le compléter par un apprentissage de la

récursivité, des interfaces graphiques et de types de données plus sophistiqués.

La page Internet associée à ce cours se trouve sur http://deptinfo.unice.fr/~roy à la rubrique MP1. Consultez-la

régulièrement, vous y trouverez des renseignements pratiques, des compléments de cours impossibles à détailler dans

ces feuilles, des réponses à vos questions posées en TP, quelques corrections, etc. La consultation de ces pages fait

partie intégrante de cet enseignement. Votre travail ne se limitera donc pas aux séances de TP : les feuilles doivent être

préparées, si possible sur machine, avant les séances, ou prolongées après les séances. Il faut qu22il soit bien clair que le

seul travail en séance de TP ne donnera que peu de résultats en l absence d un cours en amphi, et l 22
on n apprend pas à programmer en dilettante

C. Organisation du travail

Sur votre disquette, créez un répertoire

A:\Java\MP1 de manière à ne pas vous mélanger avec les fichiers du Tronc

Commun qui sont dans

A:\Java. Copiez le fichier A:\Java\Numerik.java dans MP1. Editez la nouvelle copie, et ne gardez que les méthodes main(...), randomInt(a,b) et randomDouble(a,b) qui doivent fonctionner parfaitement.

Durant le travail en salles-machines, tous vos fichiers seront placés dans le dossier A:\Java\MP1.

D. Rappels sur les boucles et notion de complexité

Il y a 3 types de boucle en Java : while, do...while, et for. La plus facile à utiliser est la boucle for, surtout lorsqu'on

connaît le nombre d itérations à effectuer, ou lorsqu on parcourt un tableau [en sortant avec un break afin la fin du tableau si nécessaire1].

Exercice 1.1 Dans la classe Numerik, rajoutez les méthodes de classe suivantes qui nous serviront souvent :

- Une procédure printIntArray(String str, int[ ] tab) affichant le tableau tab à l'horizontale. Si elle estfournie

2, la chaîne str sert de nom au tableau. Exemple : si tab est le tableau {-3,5,2,0,6,8,1}, alors

Numerik.printIntArray("t",tab) produira l'affichage :t[0]=-3 t[1]=5 t[2]=2 t[3]=0 t[4]=6 t[5]=8 t[6]=1

tandis que Numerik.printIntArray(tab) produira seulement les éléments du tableau sans nom ni indices :-3 5 2 0 6 8 1

Dans chaque cas, l

affichage se terminera par un retour à la ligne.

- Une fonction randomIntArray(int n, int a, int b) prenant un entier n = 1 et deux entiers a = b [ceci estgaranti et n'est pas à tester] et dont le résultat est un tableau contenant n entiers choisis aléatoirement dans

l

intervalle [a,b]. Utilisez randomInt(...). Testez cette méthode dans le main(...) en utilisant printIntArray(...).

Exercice 1.2 Rappels du Tronc Commun. a) Toujours dans la classe Numerik, écrivez une fonction ppdiv(int n)

prenant un entier n = 2 et retournant le plus petit diviseur [automatiquement premier] de n. Si l'on ne trouve aucun

diviseur jusqu n, c'est que ppdiv(n) == n et que n est premier ! Ex : ppdiv(45) == 3, ppdiv(43) == 43.

b) En déduire, toujours dans Numerik, un prédicat estPremier(int n) prenant un entier n = 2 et retournant true si et

seulement si n est un nombre premier. Exemple : estPremier(43) == true.

Remarque : l'algorithme ppdiv(n) demandera donc dans le pire des cas un nombre de divisions proportionnel à n.

On parle alors de complexité en On(). La complexité se confond souvent mais pas toujours avec le temps de calcul.

Ici, la division est l

opération la plus coûteuse. Dans le cas de l algorithme ppdiv(n), donc aussi dans estPremier(n), le pire des cas a lieu lorsque n est premier, et le coût est alors de n.

Définition : Par-rapport à un ensemble d'opérations de base, un algorithme portant sur une donnée de taille n a unecomplexité en Of(n)() [ou simplement " est en Of(n)() »], si dans le pire des cas il exige un nombre d'opérationsde base proportionnel à f(n), lorsque n est grand. Si dans tous les cas il exige un nombre d'opérations de baseproportionnel à f(n), il est dit en Qf(n)(), lire " Théta de f(n) ».Il est clair que Qf(n)() ==> Of(n)(), donc qu'un Q est plus précis qu'un O.

1

On peut aussi utiliser l

instruction break pour sortir brutalement d'une boucle while ou do...while. Voir sur la page Web.2 Si elle est fournie : ceci signifie qu'il y aura en réalité deux méthodes de nom printIntArray, avec des paramètres distincts. C'est ce que l'on nomme

la surcharge des méthodes [cf. la page Web].

• Le tableau ci-dessous montre l'évolution de la complexité en fonction de n pour quelques complexités usuelles.

Les résultats ne valent que pour leurs comparaisons respectives bien entendu : nlog nn log nn22n10

0.003ms0.033ms0.1ms1ms20

0.004ms0.086ms0.4ms1ms100

0.007ms0.644ms10ms4x1013 ans

1 000 000

0.020ms19.93ms16.7minLa définition mathématique précise, utilisée par Maple, de cette notation O(f(n)) est la suivante. Soient f et g deux

fonctions positives définies sur N. On dit que f est un O(g) s'il existe une constante k > 0 telle que pour n assez grand,

on ait f(n)

k g(n). On note abusivement f = O(g) et on dit que " f est dominée par g ». Par exemple 2n3 - 15 = O(n3),

mais n2 est aussi un O(n3). Contrairement aux mathématiciens, les informaticiens diront qu'un algorithme est " en n2 »

et non " en 3n2 » ou " en 5n2 », en omettant la constante multiplicative. Bien entendu, il est parfois utile de disposer de

cette constante pour comparer deux algorithmes en n2 ... Mais un programmeur ne sera vraiment satisfait que s'il

passe de n2 à n log n par exemple, plutôt que de 3n2 à 2n2.

Quant à Q(g), on le définit par : f=Q(g) Û f=O(g) et g=O(f) et on dit que " f et g ont le même ordre de grandeur »...Les relations O et Q sont réflexives et transitives, mais seule Q est symétrique.

Attention, un algorithme en O(n

2) n'est meilleur qu'un algorithme en O(n log n) qu'à partir d'un certain rang, donc

pour n assez grand. Lorsque les données sont de petites tailles [par exemple des tableaux de 10 éléments], les mauvais

algorithmes sont souvent plus faciles à programmer et aussi efficaces sinon meilleurs. Mais lorsque les données sont

grandes, les mauvais algorithmes deviennent très vite de très mauvais algorithmes !...

Exercice 1.3 A l'aide d'une boucle, calculez la valeur de n à partir de laquelle un algorithme dont la complexité exacte

est f(n) = n2/4 devient meilleur qu'un autre algorithme dont la complexité exacte est g(n) = 200 + n log n.

Réponse : un peu moins de 40...

Exercice 1.4 a) Si l'on comptabilise le nombre de multiplications, montrez que la complexité de l'algorithme ci-

dessous est quadratique en n, c'est-à-dire en O(n2). Et que calcule-t-il ?

int n = Console.readInt("Donnez la valeur de n");double s = 0 ;for(int k = 0 ; k < n ; k++) { int f = 1 ; for(int i = k ; i > 0 ; i--) f = f * i ; s = s + 1.0/f ; }

return s ;b) Donnez une version linéaire de cet algorithme, c'est-à-dire en O(n).O(1)bornée [quasi constante]

O(log n)logarithmique

O(n)linéaire

O(n log n)quasi-linéaire

O(n

2)quadratique

O(n k)polynomiale O(2 n)exponentielleexcellent acceptable mauvais très mauvaisquotesdbs_dbs28.pdfusesText_34
[PDF] calcul de complexité python

[PDF] masse et quantité de matière exercice

[PDF] l'alcool utilisé comme antiseptique local peut être

[PDF] production primaire nette

[PDF] productivité nette de l'écosystème

[PDF] production primaire et secondaire

[PDF] productivité nette de l écosystème

[PDF] taux d'évolution calcul

[PDF] taux d'endettement entreprise

[PDF] numero ine sur internet

[PDF] inscription lycée hors secteur

[PDF] nombre de mole formule

[PDF] nombre de mole d'un gaz

[PDF] nombre d'oxydation exercices corrigés

[PDF] exercices priorités opératoires 5ème pdf