Structure de tableau. Variables indicées et tableaux. Opérations globales sur les tableaux. Utilisation des tableaux

Documents pareils
Corrigé des TD 1 à 5

Algorithmique et Programmation, IMA

Les arbres binaires de recherche

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Corrigés des premiers exercices sur les classes

Recherche dans un tableau

Les structures de données. Rajae El Ouazzani

STAGE IREM 0- Premiers pas en Python

Algorithmique et structures de données I

Quelques tests de primalité

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Package Java.util Classe générique

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Programme Compte bancaire (code)

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

1 Recherche en table par balayage

TD/TP PAC - Programmation n 3

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.


Projet de programmation (IK3) : TP n 1 Correction

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Définitions. Numéro à préciser. (Durée : )

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Plan du cours. Historique du langage Nouveautés de Java 7

Nombres premiers. Comment reconnaître un nombre premier? Mais...

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Algorithmes récursifs

Exercices sur les interfaces

Découverte de Python

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Premiers Pas en Programmation Objet : les Classes et les Objets

Corrigé des exercices sur les références

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Logiciel de Base. I. Représentation des nombres

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

V- Manipulations de nombres en binaire

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Programmer en JAVA. par Tama

Chapitre 10. Les interfaces Comparable et Comparator 1

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Licence Sciences et Technologies Examen janvier 2010

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Auto-Entreprise : Activités : Eric SOTY - Siret n Formation Bureautique, continue d'adultes. Tél : Fax :

TP 1. Prise en main du langage Python

INF 321 : mémento de la syntaxe de Java

Algorithmique, Structures de données et langage C

Programmation C++ (débutant)/instructions for, while et do...while

Chapitre VI - Méthodes de factorisation

Utilisation d objets : String et ArrayList

Initiation à la programmation en Python

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Java Licence Professionnelle CISII,

Les suites numériques

Jean-Philippe Préaux

Tp 1 correction. Structures de données (IF2)

Chap III : Les tableaux

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Solutions du chapitre 4

Intelligence Artificielle Planification

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Modèles à Événements Discrets. Réseaux de Petri Stochastiques

Claude Delannoy. 3 e édition C++

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

MIS 102 Initiation à l Informatique

Les deux points les plus proches

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

Dans une année, il y a 12 mois. Dans une année, il y a 52 semaines. Dans une année, il y a 4 trimestres. Dans une année, il y a 365 jours.

Examen Médian - 1 heure 30

Java DataBaseConnectivity

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

PROJET 1 : BASE DE DONNÉES REPARTIES

TD3: tableaux avancées, première classe et chaînes

Programmation C. Apprendre à développer des programmes simples dans le langage C

Objets et Programmation. origine des langages orientés-objet

Définition des Webservices Ordre de paiement par . Version 1.0

Cours d Informatique

Le prototype de la fonction main()

Algorithmique I. Algorithmique I p.1/??

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Principes des langages de programmation INF 321. Eric Goubault

Méthodes de quadrature. Polytech Paris-UPMC. - p. 1/48

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Présentation du langage et premières fonctions

Algorithmique et programmation : les bases (VBA) Corrigé

MÉTHODES NUMERIQUES. Cours. Licence de Physique Année Universitaire : Licence Chimie, parcours Physique. Semestre S3

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Transcription:

Variables indicées et tableaux Pour désigner une séquence d éléments de même type Notation habituelle : Structure de tableau Pour représenter des vecteurs/n-tuples d éléments de type T (occupant s cellules) Représentation immédiate : séquence contigüe de Ts v 1, v 2, v 3,, v n On parle de vecteur Exemples point dans l espace : (6, 5, 2) prix moyen du carburant à chaque trimestre : (1.29, 1.34, 1.31, 1.28) adresses a a + s a + 2s contenus K 1 K 2 K 3 Autres exemples : a + (n-1)s K n 1 de 23 2 de 23 Utilisation des tableaux Sélection d un élément : x t[k] Affectation d une valeur à un élément (l ancienne est effacée) t[k] e Opérations globales sur les tableaux Affectation globale V (e1, e2,, en) équivalent à V[1] e1, V[2] e2, V W équivalent à V[1] W[1], V[2] W[2], Temps d exécution proportionnel à la taille de V. Affectation de tranches V[i j] (e 0,, e r ) équivalent à V[i] e 0, V[i+1] e 1,, V[j] e r r = i - j 3 de 23 4 de 23

Un exemple: vérification de date Problème: écrire un algorithme qui vérifie si une date (jour, mois, année) est correcte. fonction booléenne vérifdate(j, m, a) si (j < 1 ou m < 1 ou m > 12) retourne faux bisextile a modulo 4= 0 // correct entre 2000 et 2099) si m = 1 retourne j 31 si m = 2 et bisextile retourne j 29 si m = 2 et non bisextile retourne j 28 si m = 3 retourne j 31... si m = 12 retourne j 31 retourne faux Le même avec un tableau On crée un tableau des nombres de jours. nbjours[1..12] (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) Qu on utilise dans la fonction fonction booléenne vérifdate(j, m, a) si (j < 1 ou m < 1 ou m > 12) retourne faux si (a modulo 4= 0) nbjours[2] = 29 sinon nbjours[2] = 28 retourne j nbjours[m] 5 de 23 6 de 23 En Java Tableau Ensemble! class GestionDates { Ordre static int[ ] nbjours = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; ensembles : {a, c, g = {g, c, a tableaux : (a, r, g) (r, g, a) static boolean verifdate(int j, int m, int a) { if (j < 1 m < 1 m > 12) return false; if (a % 4 == 0) nbjours[ 2 ] = 29 else nbjours[ 2 ] = 28; return j <= nbjours[ m ] Accès tableaux : 1 er élément, 2 e, 3 e, etc. ensembles : --- Nb d occurences ensembles : {a, c, a, b, a = {a, c, b tableaux : (a, a, a, a) (a) Opérations ensembles : union, intersection, différence tableau : affectation d une valeur à un élément 7 de 23 8 de 23

Micro algorithme - Appliquer une fonction Micro algorithmes - Collecter On a On a A : tableau[1..n] de T; A : tableau[1..n] de T; op : opération associative sur T f : fonction de T dans T A = (v1, v2,, vn) A = (v1, v2,, vn) On veut r = v1 op v2 op v3 op vn On veut A = (f(v1), f(v2),, f(vn)) r neutre de l opération pour i de 1 à n { pour i de 1 à n { A[ i ] f(a[ i ]) r r op A[ i ] Exemple pour i de 1 à n { salaire[ i ] 1.34 * salaire[ i ] Exemple total 0 pour i de 1 à n { total total + salaire[ i ] 9 de 23 10 de 23 Exemple : le crible d Eratosthène Pseudo-algorithme Pour trouver tous les nombres premiers de 2 à n (encore!) Faire une liste des nombres faire une liste des nombres de 2 à n Barrer tous les multiples de 2 supérieurs à 2 p <-- 2 Barrer tous les multiples de 3 supérieurs à 3 tant que ( p * p n) { 4 est déjà barré barrer tous les multiples de p Barrer tous les multiples de 5 supérieurs à 5 p <-- le plus petit nombre non barré supérieur à p 6 est déjà barré Barrer tous les multiples de 7 supérieurs à 7 8 est déjà barré 9 est déjà barré 10 est déjà barré Barrer tous les multiples de 11 supérieurs à 11 Remarque Tout nombre < n qui n est pas premier est multiple d un nombre inférieur à n. Donc on peut arrêter l algorithme quand p * p > n. etc. Les nombres qui restent sont premiers (ils ne sont multiples de personne) 11 de 23 12 de 23

Structure de données : tableau de booléens au début f v v v v v v v v v v v v v v v v 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 barrer les multiples de 2 f v v f v f v f v f v f v f v f v 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 puis ceux de 3 f v v f v f v f f f v f v f f f v 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Algorithme avec un tableau de booléens pour i de 2 à n { Barré[ i ] <-- faux p <-- 2 max <-- racine carrée de n tant que ( p max) { si ( non Barré [p] ) { // Barrer les multiples de p i <-- p + p tant que i n { Barré[ i ] <-- vrai ; i <-- i + p p <-- p + 1 etc. 13 de 23 14 de 23 n fois π ( n) fois n / p 1 fois Complexité en temps tant que ( p max) { si ( non Barré [p] ) { i <-- p + p tant que i n { Barré[ i ] <-- vrai ; i <-- i + p p <-- p + 1 Le calcul de la complexité est complexe nb opérations [ ] = n/2 + n/3 + n/5 + n/7 + n/11 + + n/p k π( n (p k = plus grand nombre premier inférieur à n) On sait 1/p 1 + 1/p 2 + 1/p 3 + + 1/p k ~= log(log(k)) Mais que vaut k? Combien y a-t-il de nombres premiers inférieurs à n? Legendre a trouvé : π(x) ~= x / (log(x) 1.0836) (Legendre) π(x) = nombre de nb. premiers inférieurs à x Donc nb. opérations ~= n log(log( n / (log( n 1.08)) nb opérations [ ] = n/2 + n/3 + n/5 + n/7 + n/11 + + n/p k π( n (p k = plus grand nombre premier inférieur à n) = n log(log( n)) n log(log(log( n 1.08))) O(n log(log( n))) 15 de 23 16 de 23

Accès associatif / recherche Algorithmes 1 But : trouver une valeur dans un tableau T Le meilleur algorithme : regarder successivement dans T[0], T[1], etc. Complexité : O(taille de T) T un tableau indicé de 0 à n-1 résultat = 1ère position de x dans T résultat = -1 si x n est pas dans T Tout algorithme basé sur l accès associatif est inefficace (à moins d avoir beaucoup de processeurs en parallèle) fonction entière recherche (x, T) { i 0 tant que ( i < n et T[ i ] x ) i i + 1 si i = n retourne 1 sinon retourne i Cet algorithme est faux. 17 de 23 18 de 23 Algorithmes 2 Algorithmes 3 T un tableau indicé de 0 à n-1 T un tableau indicé de 0 à n-1 résultat = 1ère position de x dans T résultat = 1ère position de x dans T résultat = -1 si x n est pas dans T résultat = -1 si x n est pas dans T fonction entière recherche (x, T) { fonction entière recherche (x, T) { i 0 i 0 tant que ( i < n ) { tant que ( i < n et ensuite T[ i ] x ) i i + 1 si T[ i ] = x retourne i si i = n retourne 1 sinon retourne i sinon i i + 1 retourne 1 Utilise l évaluation partielle des expressions booléennes. Opérateur && en Java. 19 de 23 20 de 23

Recherche dans un tableau trié Algorithme On cherche 6.25 Précondition : x est trié par ordre croissant des valeurs. sup Invariant : si x se trouve dans T, il est entre les positions inf et sup. fonction entière dichotomique(t, x) { inf <-- 0 ; sup <-- taille T 1; tant que inf <= sup { millieu <-- (sup + inf) / 2 ; 12.4 millieu 12.4 3.5 sup millieu 12.4 3.5 sup millieu inf etc. si (T[ millieu ] = x) retourner millieu sinon si (T[ millieu ] > x) sup <-- millieu - 1 sinon inf <-- millieu + 1 retourner -1 /* pas trouvé */ inf inf 21 de 23 22 de 23 Complexité Nombre d itérations = si n = 2 k au maximum k itérations (2 k, 2 k 1, 2 k 2,, 8, 4, 2, 1) k = log 2 (n) Complexité : O(log 2 (n)) 23 de 23