Recherche et dénombrement dans des tableaux



Documents pareils
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)

Algorithmes récursifs

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

Recherche dans un tableau

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

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

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

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


1 Recherche en table par balayage

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

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

Découverte de Python

Algorithmique I. Algorithmique I p.1/??

Algorithmique et Programmation, IMA

Licence Sciences et Technologies Examen janvier 2010

Initiation à la programmation en Python

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Java Licence Professionnelle CISII,

Représentation d un entier en base b

TRIGONOMETRIE Algorithme : mesure principale

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

STAGE IREM 0- Premiers pas en Python

Architecture des Systèmes d Information Architecture des Systèmes d Information

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

Algorithmique, Structures de données et langage C

I. Introduction aux fonctions : les fonctions standards

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Bases de programmation. Cours 5. Structurer les données

Initiation à l algorithmique

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d algorithmique pour la classe de 2nde

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

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

Package Java.util Classe générique

1.6- Génération de nombres aléatoires

Corrigé des TD 1 à 5

Organigramme / Algorigramme Dossier élève 1 SI

Introduction à MATLAB R

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

Perl Orienté Objet BioPerl There is more than one way to do it

Algorithmique et structures de données I

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

Les structures de données. Rajae El Ouazzani

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

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

MIS 102 Initiation à l Informatique

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

Généralités sur le Langage Java et éléments syntaxiques.

as Architecture des Systèmes d Information

Cryptographie. Cours 3/8 - Chiffrement asymétrique

Programmation Par Objets

Utilisation d objets : String et ArrayList

4. Groupement d objets

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

TP 1. Prise en main du langage Python

Chapitre 10. Les interfaces Comparable et Comparator 1

Cours de Programmation 2

Cours d Algorithmique et de Langage C v 3.0

Examen Médian - 1 heure 30

Arbres binaires de recherche

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

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

TP3 : Manipulation et implantation de systèmes de fichiers 1

Ordonnancement temps réel

Les arbres binaires de recherche

Plus courts chemins, programmation dynamique

TD/TP PAC - Programmation n 3

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

Chapitre 7. Récurrences

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

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

Corrigé des exercices sur les références

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

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

Continuité et dérivabilité d une fonction

ACTIVITÉ DE PROGRAMMATION

Compression Compression par dictionnaires

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

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

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Cours de Systèmes d Exploitation

Assurance Qualité. Cours de génie logiciel. Renaud Marlet. LaBRI / INRIA (d'après A.-M. Hugues) màj 23/04/2007

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

Quelques Algorithmes simples

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

= constante et cette constante est a.

Algorithmique & programmation

Cours de Probabilités et de Statistique

Introduction au langage C

Programmation avec Xcas ou Python

Programmer en JAVA. par Tama

ENVOI SIMPLE (SMS)...

Quelques algorithmes simples dont l analyse n est pas si simple

PROGRAMMER EN MQL4. Apprenez à automatiser vos stratégies sur MetaTrader 4

V- Manipulations de nombres en binaire

Transcription:

Recherche et dénombrement dans des tableaux Licence 1 MASS - Introduction programmation Java Sébastien Verel verel@i3s.unice.fr www.i3s.unice.fr/ verel Équipe ScoBi - Université de Nice Sophia-Antipolis 28 avril 2013

Objectifs de la séance 10 1 Recherche itérative d un élément dans un tableau 2 Recherche dichotomique d un élément dans un tableau 3 d un élément dans un tableau 4 d un élément dans deux tableaux en parallèle Questions principales du jour : Comment rechercher et compter des éléments dans un tableau?

Caractéristiques de ces structures de données De taille finie : le nombre maximum de données est déterminée En général, les données sont numérotables (indexables) On doit pouvoir accéder à une donnée dont le rang (l indice) est déterminé 0 1 2 3 4 5 6 7 8 12 3 4 78 12 3 9 11 12

Déclaration tableau Déclaration d un tableau t de type typeelement avec N valeurs variable t : tableau de N typeelement 0 1 2 3 4 5 6 7 8 12 3 4 78 12 3 9 11 12 variable t : tableau de 9 entiers Déclaration d un tableau contenant 12 caractères : variable c : tableau de 12 caractères Déclaration d un tableau contenant n nombres réels : variable tabreal : tableau de n réel

Lecture des valeurs lecture de la valeur d indice i du tableau t t[i] 0 1 2 3 4 5 6 7 8 12 3 4 78 12 3 9 11 12 t[3] a pour valeur 78 On peut réaliser des calculs comme avec une variable classique : t[3] + 10 a pour valeur 88 t[7] + t[0] a pour valeur 23

Affectation des valeurs Affectation de la valeur a à la case d indice i du tableau t t[i] a 0 1 2 3 4 5 6 7 8 12 3 4 78 12 3 9 11 12 t[3] 15 t[2] t[0] t[8] t[1] 2 + 1 0 1 2 3 4 5 6 7 8 12 3 12 15 12 3 9 11 10

En Java Rappel Déclaration d un tableau t de taille 9 : int[] t = new int[9] ; Lecture : t[3] + 1 ; Affectation : t[4] = 6 ;

Algorithmes Rappel remplir itérativement un tableau calcul de la moyenne des nombres calcul de la somme des carrés des éléments recherche du maximum du tableau

Plan Rappel 1 Rappel 2 3

Recherche itérative Exemple 0 1 2 3 4 5 6 7 8 12 3 12 15 12 3 15 11 10 La valeur de recherche(15, t) est Vrai La valeur de recherche(17, t) est Faux

Recherche itérative : langage algorithmique Algorithme recherche(x : entier, t : tableau d entier) : booleen début variable i : entier variable b : booleen b Faux pour i de 0 à t.taille -1 faire si t[i] = x alors b Vrai fin si fin pour retourner b fin Mais pas très efficace...

Exemple d exécution recherche(15, t) i = 0 t[i] = 12 b = faux i = 1 t[i] = 3 b = faux i = 2 t[i] = 12 b = faux i = 3 t[i] = 15 b = vrai i = 4 t[i] = 12 b = vrai i = 5 t[i] = 3 b = vrai i = 6 t[i] = 15 b = vrai i = 7 t[i] = 11 b = vrai i = 8 t[i] = 10 b = vrai L algorithme itére 9 fois alors que 4 fois aurait été suffisant.

Recherche itérative : version tant que Algorithme recherche(x : entier, t : tableau d entier) : booleen début variable i : entier i 0 tant que t[i] x faire i i + 1 fin tant que retourner t[i] = x fin Malheur! Lorsque x n est pas dans le tableau

Exemple d exécution recherche(17, t) i = 0 t[i] = 12 i = 1 t[i] = 3 i = 2 t[i] = 12 i = 3 t[i] = 15 i = 4 t[i] = 12 i = 5 t[i] = 3 i = 6 t[i] = 15 i = 7 t[i] = 11 i = 8 t[i] = 10 i = 9 t[i] =??? L algorithme tente d obtenir une valeur inexistante du tableau : Java envoie un signal d exception

Recherche itérative : version tant que Algorithme recherche(x : entier, t : tableau d entier) : booleen début variable i : entier i 0 tant que i < t.taille?? t[i] x faire i i + 1 fin tant que si i < t.taille alors retourner vrai sinon retourner faux fin si fin Il faut tester i < t.taille pour ne pas sortir des bornes du tableau.

Le top Rappel Algorithme recherche(x : entier, t : tableau d entier) : booleen début variable i : entier i 0 tant que i < t.taille et t[i] x faire i i + 1 fin tant que retourner i < t.taille fin Nombre moyen de comparaisons pour un tableau de taille n? n 2

En Java Rappel /***************************************** * recherche d un nombre dans un tableau de maniere iterative * * entree : * - x : nombre a rechercher * - t : tableau ou le nombre est a rechercher * * sortie : * - booleen : vrai ssi le nombre est dans le tableau ******************************************/ bool rechercheiter(int x, int [] t) { int i = 0; while (i < t.length && t[i]!= x) i++; } return i < t.length;

Recherche dichotomique La recherche dichotomique ne peut s effectuer que sur un tableau ordonné. 0 1 2 3 4 5 6 7 8 3 3 10 11 12 12 12 15 15 La technique consiste à choisir l élément du milieu puis à rechercher à droite si l élément à rechercher est plus grand ou à rechercher à gauche si l élément à rechercher est plus petit

Principe Rappel recherche(10, t) 0 1 2 3 4 5 6 7 8 3 3 10 11 12 12 12 15 15 a c b 10 < t[c] donc : 0 1 2 3 4 5 6 7 8 3 3 10 11 12 12 12 15 15 a c b

Recherche dichotomique Algorithme recherchedichotomique(x : entier, t : tableau d entier) : booleen début variable a,b,c : entier a 0 b t.taille 1 c (a + b)/2 tant que a b et t[c] x faire si t[c] < x alors a c + 1 sinon b c 1 fin si c (a + b)/2 fin tant que retourner a b fin

Exemple d exécution recherche(11, t) a = 0 b = 8 c = 4 t[c] = 12 a = 0 b = 3 c = 1 t[c] = 3 a = 2 b = 3 c = 2 t[c] = 10 a = 3 b = 3 c = 3 t[c] = 11 Vrai recherche(17, t) a = 0 b = 8 c = 4 t[c] = 12 a = 5 b = 8 c = 6 t[c] = 12 a = 7 b = 8 c = 7 t[c] = 15 a = 8 b = 8 c = 8 t[c] = 15 a = 9 b = 8 c = 8 t[c] = 15 Faux

Nombre de comparaisons T (k) : nombre de comparaisons dans un sous-tableau de taille k. T (k) = T ( k 2 ) + 1 Taille du tableau : n = 2 α T (n) = T ( n 2 ) + 1 T (n) = T ( n 4 ) + 1 + 1 T (n) = T ( n 8 ) + 1 + 1 + 1... T (n) = T (1) + α T (n) est de l ordre de log 2 (n). Pour n = 10 9 nous avons T (n) 30

En Java Rappel /***************************************** * recherche d un nombre dans un tableau de maniere dichotomique * * entree : * - x : nombre a rechercher * - t : tableau ou le nombre est a rechercher * * sortie : * - boolaen : vrai ssi le nombre est dans le tableau ******************************************/ boolean recherchedichotomique(int x, int [] t) {

En Java Rappel boolean recherchedichotomique(int x, int [] t) { int a = 0; int b = t.length - 1; int c = (a + b) / 2; while (a <= b && t[c]!= x) { if (t[c] < x) a = c + 1; else b = c - 1; c = (a + b) / 2; } } return a <= b;

exemple Rappel 0 1 2 3 4 5 6 7 8 12 3 12 15 12 3 15 11 10 La valeur de denombrer(15, t) est 2 La valeur de denombrer(17, t) est 0 La valeur de denombrer(12, t) est 3

Algorithme Rappel Algorithme denombrer(x : entier, t : tableau d entier) : entier début variable i,c : entier c 0 pour i de 0 à.taille-1 faire si t[i] = x alors c c + 1 fin si fin pour retourner c fin

Exemple Rappel denombrer(12, t) i = 0 t[i] = 12 c = 1 i = 1 t[i] = 3 c = 1 i = 2 t[i] = 12 c = 2 i = 3 t[i] = 15 c = 2 i = 4 t[i] = 12 c = 3 i = 5 t[i] = 3 c = 3 i = 6 t[i] = 15 c = 3 i = 7 t[i] = 11 c = 3 i = 8 t[i] = 10 c = 3

En Java Rappel /***************************************** * denombrer le nombre d apparition d un nombre dans un tableau * * entree : * - x : nombre a denombrer * - t : tableau ou le nombre est a rechercher * * sortie : * - nombre d occurrence ******************************************/ int denombrer(int x, int [] t) { int c = 0; for(int i = 0; i < t.length; i++) if (t[i] == x) c++; } return c;

Denombrement en parallèle Dénombrer selon les valeurs des éléments dans deux tableaux en parallèle. 0 1 2 3 4 5 6 7 8 12 3 12 15 12 3 15 11 10 0 1 2 3 4 5 6 7 8 10 12 7 1 2 29 31 67 27 Par exemple : dénombrer les couples d éléments qui sont pairs à la même position dans les deux tableaux.

Algorithme Rappel Algorithme denombrerpairs(t1 : tableau d entier, t2 : tableau d entier) : entier début variable i,c : entier c 0 pour i de 0 à t1.taille -1 faire si modulo(t1[i], 2) = 0 et modulo(t2[i], 2) = 0 alors c c + 1 fin si fin pour retourner c fin

En Java Rappel /***************************************** * denombrer en parallele les nombres pairs * * entree : * - t1 : tableau ou le nombre est a rechercher * - t2 : tableau ou le nombre est a rechercher * * sortie : * - nombre d occurences de nombre pairs en parallele ******************************************/ int denombrerparallele(int [] t1, int [] t2) { int c = 0; for(int i = 0; i < t1.length; i++) if (t1[i] % 2 == 0 && t2[i] % 2 == 0) c++; } return c;

Exercices Rappel Un tableau de taille n contient les lettres A,T,G ou C. Dénombrer le nombre d occurrences de la succession des lettres A,T,A (isoleucine) Deux tableaux sont de tailles n et contiennent les lettres A,T,G ou C. Dénombrer le nombre de bases non correctement appariées.

Objectifs de la séance 8 1 Recherche itérative d un élément dans un tableau 2 Recherche dichotomique d un élément dans un tableau 3 d éléments dans un tableau 4 d éléments dans deux tableaux en parallèle Questions principales du jour : Comment rechercher et compter des éléments dans un tableau?