3. Peut-on prouver la terminaison de l’algorithme ? Quel est le problème de la fonction RandUnif lors-
qu’elle est appelée sur certains n? Quelles sont ces valeurs problématiques ?
Pour les questions 4 à 9 (incluses), supposons n= 5, et donc `= 3.
4. Quelle est la probabilité d’avoir exactement 0 rejet et donc d’utiliser 3 bits pour générer un entier ? (à
justifier)
5. Quelle est la probabilité d’avoir exactement un rejet et donc d’utiliser 6 bits pour générer un entier ?
(à justifier)
6. Quelle est la probabilité d’avoir exactement deux rejets pour générer un entier ? (à justifier)
7. Soit run entier positif ou nul. Quelle est la probabilité d’avoir exactement rrejets pour générer un
entier ? (à justifier)
8. Prouver que l’appel à la fonction RandUnif(5) termine presque sûrement, c’est-à-dire que la probabilité
que la fonction termine tend vers 1.
9. Quel est le nombre moyen de rejets nécessaires à l’appel à la fonction RandUnif(5) ?
Génération non uniforme
Soit nun entier supérieur à 1, on a à notre disposition une fonction RandUnif qui, pour le paramètre n,
renvoie uniformément un entier entre 0et n−1.
On souhaite faire de la génération dans un multi-ensemble. On a rentiers (de 0àr−1), chacun associé
à un poids (entier positif).
Par exemple aux entiers entre 0et 3, on associe les poids respectifs 1,2,3,1. C’est-à-dire que l’entier 0a
1
/7chance d’apparaître, l’entier 1a2
/7chance d’apparaître, l’entier 2a3
/7chance d’apparaître et l’entier 3
a1
/7chance d’apparaître.
On souhaite générer successivement (et indépendamment) kentiers dans {0,1, . . . , r −1}suivant la distri-
bution Dfixée.
10. Proposer une structure de données permettant d’encoder les différentes données et un algorithme
permettant de générer ces kentiers. On s’autorise une complexité temporelle en O(k)recherches dans
la structure de données, et une complexité spatiale en O(n), où nest la somme des poids des entiers
entre 0et r−1.
11. Justifier les complexités.
Exercice 3: Arbre binaire croissant (4 points)
Un arbre binaire croissant est un arbre binaire, dont les nœuds internes sont d’arité 2 (un fils gauche et
un fils droit) et les feuilles (nœuds externes) sont d’arité 0. On appelle taille de l’arbre son nombre de nœuds
internes.
De plus, chaque nœud interne porte une étiquette qui est un entier entre 1et la taille de l’arbre. Toutes les
étiquettes sont distinctes et enfin, les suites d étiquettes de chaque branche, en partant de la racine de l’arbre
vers une feuille, sont croissantes.
Voilà un exemple d’arbre binaire croissant de taille 4. Les feuilles sont représentées par des •.
1
2 3
• •
4•
• •
2