• Aucun résultat trouvé

16a2009 É ieS Bi Uiveiédei eShia Ai

N/A
N/A
Protected

Academic year: 2022

Partager "16a2009 É ieS Bi Uiveiédei eShia Ai"

Copied!
33
0
0

Texte intégral

(1)

Sébastien Verel

vereli3s.unie.fr

www.i3s.unie.fr/

verel

ÉquipeSoBi-UniversitédeNieSophia-Antipolis

16 mars2009

(2)

Objetifs de la séane 8

1

Reherhe itératived'un élémentdansuntableau

2

Reherhe dihotomiqued'unélément dansuntableau

3

Dénombrement d'un élémentdansuntableau

4

Dénombrement d'un élémentdansdeux tableauxen parallèle

Questions prinipales dujour :

Comment reherheret ompter desélémentsdansuntableau?

(3)

Caratéristiques de es strutures de données

De taillenie:

le nombremaximum de donnéesest déterminée

En général,lesdonnées sont"numérotables"(indexables)

On doit pouvoir aéder à unedonnée dontle rang(l'indie)

est déterminé

0 1 2 3 4 5 6 7 8

12 3 4 78 12 3 9 11 12

(4)

Délaration tableau

Délarationd'un tableaut de type typeElement aveN 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 9entiers

Délarationd'un tableauontenant 12 aratères:

variable :tableau de 12 aratères

Délarationd'un tableauontenant n nombres réels:

variable tabReal:tableau de n réel

(5)

Leture des valeurs

leture de lavaleur d'indiei dutableau t

t

[

i

]

0 1 2 3 4 5 6 7 8

12 3 4 78 12 3 9 11 12

t

[

3

]

apour valeur78

On peut réaliserdes alulsommeaveune variable

lassique :

t

[

3

] +

10a pourvaleur 88

t

[

7

] +

t

[

0

]

apourvaleur 23

(6)

Aetation des valeurs

Aetation dela valeura àlaase d'indiei dutableau 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

(7)

en Java

Délarationd'un tableaut de taille9 :

int[℄ t = new int[9℄;

Leture :

t[3℄ + 1;

Aetation:

t[4℄ = 6;

(8)

Algorithmes

rempliritérativementuntableau

alul de lamoyenne desnombres

alul de lasommedesarrés deséléments

reherhe dumaximumdutableau

(9)

Plan

1

Rappel

2

Reherhe d'un élément

3

Dénombrement

(10)

Reherhe itérative

Exemple

0 1 2 3 4 5 6 7 8

12 3 12 15 12 3 15 11 10

La valeurde reherhe

(

15

,

t

)

est Vrai

La valeurde reherhe

(

17

,

t

)

est Faux

(11)

Reherhe itérative : langage algorithmique

Algorithme reherhe(x :entier,t:tableau d'entier):booleen

début

variable i:entier

variable b: booleen

b

Faux

pour ide 0 àt.taille -1 faire

si t

[

i

] =

x alors

b

Vrai

nsi

npour

retournerb

n

Mais pas trèseae...

(12)

Exemple d'exéution

reherhe(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'algorithmeitére 9fois alorsque 4fois auraitété susant.

(13)

Reherhe itérative : version "tant que"

Algorithme reherhe(x :entier,t:tableau d'entier):booleen

début

variable i:entier

i

0

tant quet

[

i

] 6=

x faire

i

i

+

1

ntant que

retournert

[

i

] =

x

n

Malheur! Lorsque x n'est pasdans letableau

(14)

Exemple d'exéution

reherhe(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'algorithmetented'obtenir unevaleur inexistantedu tableau:

Java envoieunsignal d'exeption

(15)

Reherhe itérative : version "tant que"

Algorithme reherhe(x :entier,t:tableau d'entier):booleen

début

variable i:entier

i

0

tant quei

<

t

.

taille??t

[

i

] 6=

x faire

i

i

+

1

ntant que

sii

<

t

.

taille alors

retourner vrai

sinon

retourner faux

nsi

n

Il faut testeri

<

t

.

taille pourne pas sortirdesbornesdu tableau.

(16)

Le top

Algorithme reherhe(x :entier,t:tableau d'entier):booleen

début

variable i:entier

i

0

tant quei

<

t

.

taille ett

[

i

] 6=

x faire

i

i

+

1

ntant que

retourneri

<

t

.

taille

n

Nombremoyen de omparaisons pouruntableau de taillen? n

2

(17)

En Java

/**************************** ***** **** ****

* reherhe d'un nombre dans un tableau de manière itérative

*

* entrée :

* - x : nombre à reherher

* - t : tableau où le nombre est à reherher

*

* sortie :

* - booléen : vrai ssi le nombre est dans le tableau

**************************** ***** **** ***** /

bool reherheIter(int x, int [℄ t) {

int i = 0;

while (i < t.length && t[i℄ != x)

i++;

return i < t.length;

(18)

Reherhe dihotomique

La reherhedihotomiquene peut s'eetuerquesur untableau

ordonné.

0 1 2 3 4 5 6 7 8

3 3 10 11 12 12 12 15 15

La tehniqueonsisteàhoisir l'élémentdu milieu

puis àreherher àdroitesi l'élémentà reherherest plusgrand

ou à reherherà gauhesi l'élémentàreherher est pluspetit

(19)

Prinipe

reherhe(10, t)

0 1 2 3 4 5 6 7 8

3 3 10 11 12 12 12 15 15

a b

10

<

t

[

]

don :

0 1 2 3 4 5 6 7 8

3 3 10 11 12 12 12 15 15

a b

(20)

Reherhe dihotomique

Algorithme reherheDihotomique(x:entier,t:tableaud'entier):

booleen

début

variable a,b,:entier

a

0

b

t

.

taille

1

← (

a

+

b

)/

2

tantque a

bett

[

] 6=

x faire

sit

[

] <

x alors

a

+

1

sinon

b

1

n si

← (

a

+

b

)/

2

n tantque

retourner a

b

(21)

Exemple d'exéution

reherhe(11, t)

a

=

0 b

=

8

=

4 t

[

] =

12

a

=

0 b

=

3

=

1 t

[

] =

3

a

=

2 b

=

3

=

2 t

[

] =

10

a

=

3 b

=

3

=

3 t

[

] =

11

Vrai

reherhe(17, t)

a

=

0 b

=

8

=

4 t

[

] =

12

a

=

5 b

=

8

=

6 t

[

] =

12

a

=

7 b

=

8

=

7 t

[

] =

15

a

=

8 b

=

8

=

8 t

[

] =

15

a

=

9 b

=

8

=

8 t

[

] =

15

(22)

Nombre de omparaisons

T

(

k

)

:nombre de omparaisons dansunsous-tableaude taillek. T

(

k

) =

T

(

k

2

) +

1

Tailledutableau :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

)

estde l'ordre delog2

(

n

)

.

Pour n

=

109 nous avonsT

(

n

) ≈

30

(23)

En Java

/**************************** ***** **** ****

* reherhe d'un nombre dans un tableau de manière dihotomique

*

* entrée :

* - x : nombre à reherher

* - t : tableau où le nombre est à reherher

*

* sortie :

* - booléen : vrai ssi le nombre est dans le tableau

**************************** ***** **** ***** /

boolean reherheDihotomique(int x, int [℄ t) {

(24)

En Java

boolean reherheDihotomique(int x, int [℄ t) {

int a = 0;

int b = t.length - 1;

int = (a + b) / 2;

while (a <= b && t[℄ != x) {

if (t[℄ < x)

a = + 1;

else

b = - 1;

= (a + b) / 2;

}

return a <= b;

}

(25)

exemple

0 1 2 3 4 5 6 7 8

12 3 12 15 12 3 15 11 10

La valeurde denombrer

(

15

,

t

)

est 2

La valeurde denombrer

(

17

,

t

)

est 0

La valeurde denombrer

(

12

,

t

)

est 3

(26)

Algorithme

Algorithme denombrer(x:entier,t: tableaud'entier) :entier

début

variable i,:entier

0

pour ide 0 à.taille-1faire

si t

[

i

] =

x alors

+1

nsi

npour

retourner

n

(27)

Exemple

denombrer(12, t)

i

=

0 t

[

i

] =

12

=

1

i

=

1 t

[

i

] =

3

=

1

i

=

2 t

[

i

] =

12

=

2

i

=

3 t

[

i

] =

15

=

2

i

=

4 t

[

i

] =

12

=

3

i

=

5 t

[

i

] =

3

=

3

i

=

6 t

[

i

] =

15

=

3

i

=

7 t

[

i

] =

11

=

3

i

=

8 t

[

i

] =

10

=

3

(28)

En Java

/**************************** ***** **** ****

* denombrer le nombre d'apparition d'un nombre dans un tableau

*

* entrée :

* - x : nombre à dénombrer

* - t : tableau où le nombre est à reherher

*

* sortie :

* - nombre d'ourene

**************************** ***** **** ***** /

int denombrer(int x, int [℄ t) {

int = 0;

for(int i = 0; i < t.length; i++)

if (t[i℄ == x)

++;

(29)

Denombrement en parallèle

Dénombrer selon lesvaleurs des élémentsdansdeux tableauxen

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

Parexemple:dénombrer les ouplesd'éléments quisontpairs àla

même positiondansles deuxtableaux.

(30)

Algorithme

Algorithme denombrerPairs(t1:tableau d'entier, t2:tableau

d'entier) :entier

début

variable i,:entier

0

pour ide 0 àt1.taille -1 faire

si modulo

(

t1

[

i

],

2

) =

0et modulo

(

t2

[

i

],

2

) =

0 alors

+1

nsi

npour

retourner

n

(31)

En Java

/**************************** ***** **** ****

* denombrer en parallèle les nombres pairs

*

* entrée :

* - t1 : tableau où le nombre est à reherher

* - t2 : tableau où le nombre est à reherher

*

* sortie :

* - nombre d'ourenes de nombre pairs en parallèle

**************************** ***** **** ***** /

int denombrerParallele(int [℄ t1, int [℄ t2) {

int = 0;

for(int i = 0; i < t1.length; i++)

if (t1[i℄ % 2 == 0 && t2[i℄ % 2 == 0)

++;

(32)

Exeries

Un tableau de taillenontient leslettres A,T,Gou C.

Dénombrer le nombred'ourrenesde lasuession des

lettresA,T,A (isoleuine)

Deuxtableauxsontdetaillesn etontiennentleslettresA,T,G

ou C.

Dénombrer le nombrede basesnon orretement appariées.

(33)

Objetifs de la séane 8

1

Reherhe itératived'un élémentdansuntableau

2

Reherhe dihotomiqued'unélément dansuntableau

3

Dénombrement d'élémentsdansuntableau

4

Dénombrement d'élémentsdansdeux tableauxen parallèle

Questions prinipales dujour :

Comment reherheret ompter desélémentsdansuntableau?

Références

Documents relatifs

left : déale vers la droite si positif, vers la gauhe sinon. right : déale vers la gauhe si positif, vers la

Savoir modier un style d'un élément du DOM.. Savoir élaborer un menu

Connaitre la synthaxe d'un requete HTTP et sa réponse2. Connaitre les ommandes d'une

Attention toutefois quelques trus datent3. Et bien sur, les reommandations

Savoir traiter simplement la réponse texte d'une requète5. Savoir traiter la réponse à l'aide de XML et

Connaître les mots lefs d'un langage impératif simple.. Connaître les opérations de bases

−→ utiliser un shéma itératif à nombre d'itérations déterminé. −→ appeler aussi souvent

ne retourner auune valeur : on notera le type de retour rien. Algorithme deviner(n : entier)