• Aucun résultat trouvé

IFT2010 Structures de données TP4 Nicola Grenon GREN3077303 jeudi le treize avril deux mille six

N/A
N/A
Protected

Academic year: 2022

Partager "IFT2010 Structures de données TP4 Nicola Grenon GREN3077303 jeudi le treize avril deux mille six"

Copied!
1
0
0

Texte intégral

(1)

IFT2010

Structures de données

TP4

Nicola Grenon GREN3077303

jeudi le treize avril deux mille six

(2)

1. Parce que le résultat sera que seules les cases 1,2,4,5,6 et 10 seront testées par cette fonction de hachage, soit à peine 55% du tableau... ce qui implique un taux de collision près e deux fois supérieur à celui que donnerait une bonne fonction de hachage ayant une distribution uniforme.

On peut prouver que jamais les cases 0,3,7,8 et 9 ne seront envisagées par cette fonction au moyen de 11 petites preuves par induction qui démontreront que l'ensemble des naturels comme valeur d'entrée de la fonction ne pourra jamais donner que les valeurs 1,2,4,5,6 et 10:

Prenons pour exemple le cas suivant:

Base: x=0  h(x)=1 on trouve un 1 comme résultat Hypothèse: Si h(x)=1 alors h(x+11)=1

Déroulement: Évaluons h(x+11)

((x+11)2 + 1) mod 11 = (x2 + 22x + 121 + 1) mod 11 = (x2 + 1 + 11(2x + 11)) mod 11 = (x2 + 1) mod 11 ce qu'on sait = 1 par l'hypothèse d'induction.

On reproduit ensuite le schéma de cette preuve mutadis mutandis pour les cases 1 à 10 et on s'aperçoit qu'on prouve que l'ensemble des naturels ne peut donner que les résultats 1,2,4,5,6 et 10. Ce qui nous assure que jamais 0,3,7,8 ou 9 ne sera rencontré. CQFD.

2. Le résultat du passage par la fonction de hachage produit le tableau suivant:

Donc on rempli les tableaux comme suit:

a) b)

h(k) plancher (M * {k*/ 2}) M 12

0,618

k k* décimales M*décimales h(k)

10 6,180 0,180 2,164 2

22 13,597 0,597 7,161 7

31 19,159 0,159 1,909 1

4 2,472 0,472 5,666 5

15 9,271 0,271 3,246 3

28 17,305 0,305 3,659 3

17 10,507 0,507 6,079 6

88 54,387 0,387 4,644 4

65 40,172 0,172 2,067 2

Case Valeur 0

1 31

2 10

3 15

4 28

5 4

6 17

7 22

8 88

9 65

10 11

Case Valeur 0

1 31

2 10

3 15

4 28

5 4

6 17

7 22

8 88

9 10 11 65

(3)

3.

testBiparti(N,Adj):booléen {V les sommets, Adj la liste d'adjacence}

Pour tous v  N marque[v]  nul

Pour tous v  N {au cas où le graph ne serait pas connexe}

Si marque[v] == nul

marque[v]  gauche {arbitraire}

Si pas fouille(v,Adj) retourner faux retourner vrai

fouille(v,Adj):booléen Pour tous w  Adj[v]

Si marque[w] == marque[v] {On a un lien vers un élément du même côté!}

retourner faux Si marque[w] == nul

marque[w]  autreCote(marque[v]) {Si v=G, alors wD et si v=D, alors wG}

Si pas fouille(w,Adj) retourner faux retourner vrai

La première partie de l'algorithme sert à initialiser les fouilles sur toutes les parties connexes disjointes.

La seconde partie effectue une fouille en profondeur en marquant chaque nouveau noeud rencontré d'une valeur alternant entre gauche et droite. Si en parcourant le graphe il voit un noeud déjà marqué et que celui-ci ne suit pas l'alternance avec lui-même, c'est que le graphe ne respecte pas la règle et on stop tout et en retourne des «faux» en cascade jusqu'à l'appel principal.

Si on ne rencontre jamais de problème d'alternance, alors on retourne des «vrai» à l'étage précédent qui lui va compléter la fouille du graphe et ainsi de suite jusqu'à la fin. Si on n'a jamais retourné de faux, alors on retournera un vrai.

Complexité:

On marque chaque noeud une seule fois lors de sa visite  |V|

On compare la marque de tous les voisins de chaque noeud une seule fois  2|E|

(Parce que chaque arête entraînera un test à chaque bout...) Donc on a (|V| + |E|)

(4)

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

4. a)

Krustkal sur un graphe

(de haut en bas sur deux colonnes)

Ce qui nous donne un ACM de poids 34.

(5)

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

a

b c d

e f

g h i

4

3 7

9

12

1 0 1 1

2

6

2

14

8

1 7

1 3

4. b) Prim sur un graphe

(de haut en bas sur deux colonnes)

Ce qui nous donne le même ACM de poids 34.

Références

Documents relatifs

La première difficulté à laquelle nous sommes confrontés est la complexité du problème. En apparence simple, il se subdivise en une multitude de contraintes se

Chaque fois qu'on voudra ajouter une chaîne de caractère à notre base de données, on vérifiera donc si elle est déjà présente dans la liste de toutes celles déjà employées et

Si l'on suppose que le rang de l'élément retourné par la fonction min n'est pas affecté par l'addition d'une même constante à tous les éléments comparés, on peut conclure

Donc: vote, électeur, carte d'identité, liste électorale, élection, liste des élections, liste d'émargement, option de vote....

Le logiciel affiche un message d'information, ferme la session et après quelques secondes réinitialise l'écran.. 

Le logiciel affiche un message d'information, ferme la session et après quelques secondes réinitialise l'écran.

Les paires de parenthèses n'ont pas besoin d'être une classe, mais un simple attribut de l'expression. On pourrait utiliser un booléen pour indiquer lorsqu'on veut

Il faut éviter tout ce qui peut rendre désagréable son utilisation pour un utilisateur qui n'est pas rémunéré, ne pas présumer d'aucune habileté en ce qui a trait au commerce