IFT2010
Structures de données
TP4
Nicola Grenon GREN3077303
jeudi le treize avril deux mille six
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.
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 wD et si v=D, alors wG}
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|)
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.
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.