Dans le cadre de ce sujet, nous nous intéressons à la génération aléatoire des classes des partitions d'entier positif et d'autres objets combinatoires par exemple les arbres, les triang
Trang 1Institut de la Francophonie pour l'Informatique
MÉMOIRE DE STAGE DE FIN D’ÉTUDES
Master de Recherche Mention Informatique Spécialité Intelligence Artificielle et Multimédia
Génération aléatoire de classes des partitions d'entier et de certains
objets combinatoires
Stagiaire CAO Phuong Thao
Établissement d'accueil : L'Institut de Mathématiques (IM)
L'Académies des Sciences et des Technologies du Vietnam Équipe d'acceuil :Département « Fondations mathématiques pour l'Informatique» Directeur de recherche : Madame PHAN Thi Ha Duong,
Maître de conférences de l'Université Paris 7 et chercheur de l'IM
Hanoi, 15 Janvier, 2009
Trang 2Remerciements2Résumé3Abstract5Liste des figures7Liste des tableaux8
1. Introduction9 1.1. Définitions9 1.2. Générer tous les objets 10 1.3. Génération aléatoire d'un objet assurant la distribution uniforme10 1.4. Méthode de fonctions génératrices10
2. Codage et Génération aléatoire13 2.1. Génération aléatoire d'un arbre par le codage de Prüfer13 2.2. Génération aléatoire d'une permutation par la table d'inversion17 2.3. Génération aléatoire d'une triangulation19
3. Partitions d'entier positif24 3.1. Définitions24 3.2. Représentation de partitions et l'ordre de la classification25 3.3. Calcul le nombre des partitions25 3.4. Génération des partitions par ZS1 et ZS228 3.5. Génération aléatoire d'une partition33 3.6. Génération aléatoire d'une partition impaire40 3.7. Génération aléatoire d'une partition paire44 3.8. Génération aléatoire d'une partition stricte49
4. Expérimentation et Analyse des résultats52 4.1. Programme de génération aléatoire d'un arbre par le codage de Prüfer52 4.2. Programme de génération aléatoire d'une permutation par la table d'inversion 55 4.3. Programme de génération aléatoire d'une triangulation56 4.4. Programme de génération des partitions d'entier par ZS1 et ZS258 4.5. Programme de génération aléatoire d'une partition d'entier59 4.6. Programme de génération aléatoire d'une impaire d'entier63 4.7. Programme de génération aléatoire d'une paire d'entier66 4.8. Programme de génération aléatoire d'une partition stricte d'entier66
5. Conclusion et perspective69 Références71 Annexe72
Trang 3Je tiens particulièrement à remercier Madame PHAN Thi Ha Duong, ma professeur à l’Institut de Mathématiques du VietNam, qui m‘a aidé beaucoup avec ses conseils utiles sur la direction de mon sujet et la méthode de recherche pendant toute la durée du stage.
Je tiens également à remercier tous les professeurs à l’Institut de la Francophonie pour l’Informatique pour l’enseignement, l’aide, les conseils utiles et l’environnement de travail très chaleureuse
J’exprime mes reconnaissances à tous les professeurs à l’Institut de Mathématiques et à mes amis dans l’équipe de recherche dont Mme Phan est responsable pour leur accueil chaleureux et qui m’ont aidé avec des documents, des livres utiles pour ma recherche. Enfin, j’adresse mes sincères remerciements à ma famille, mes parents et mes amis qui sont toujours près de moi et m’ont apporté le courage dans les moments difficiles.
Trang 4Le sujet de ce stage se situe dans le cadre du projet de recherche «Combinatoire énumérative et génération aléatoire» de l'Académies des Sciences et des Technologies du VietNam dont Mme Phan est responsable. En informatique, la génération aléatoire est un thème beaucoup étudié et elle donne lieu à des applications dans des différents domaines tels que des algorithmes cryptographiques, des tests de programmes, des algorithmes probabilistes, des modélisations nucléaires, etc. Dans le cadre de ce sujet, nous nous intéressons à la génération aléatoire des classes des partitions d'entier positif et d'autres objets combinatoires par exemple les arbres, les triangulations et les permutations. L'objectif de ce travail est d'étudier des méthodes existantes qui peuvent faciliter la génération aléatoire et réduire le temps de génération. En plus, le stagiaire proposera de nouveaux algorithmes pour certaines classes. Dans le travail pratique, les algorithmes représentés seront implémentés par des outils comme des bijections, des probabilités et des graphes pour illustrer des méthodes différentes
Ce rapport se compose de cinq chapitres :
L'objectif du premier chapitre est de donner une vue globale sur des objets et des thèmes étudiés dans ce rapport. Ce chapitre est consacré à la présentation des définitions d'objets combinatoires étudiés dans ce rapport comme les arbres, les triangulations, les permutations et les partitions d'entier. Ce sont des objets combinatoires souvent utilisés dans la structure de données informatiques ou dans la construction d'algorithmes. Le concept de génération des objets d'un ensemble et le concept de génération aléatoire d'un objet sont aussi abordés dans ce rapport. Puis, on présente la méthode de fonction génératrice pour calculer le nombre d'objets d'un ensemble.
Le but du deuxième chapitre est d'étudier et valider des différentes méthodes qui permettent de faciliter la génération aléatoire Ce chapitre parle du mécanisme de générer aléatoirement basé sur les données cryptographiques des objets combinatoires. Dans plusieurs cas, la génération aléatoire d'objets est difficile si ces objets ont une structure complexe. Si ces objets sont codés et on fait la génération sur les codages, la génération devient beaucoup plus facile On le voit plus claire via l’algorithme de génération aléatoire d'un arbre par le Codage de Prüfer et via la génération aléatoire d'une permutation par la table d’inversion La fin du chapitre présente l’algorithme de génération aléatoire d'une triangulation en assurant la distribution uniforme. C'est un nouveau résultat de recherche en 2008 du l'équipe dont Mme Phan est responsable. À côté de l'introduction d'algorithmes existants, il y a aussi nos contributions dans ce chapitre Ce sont nos analyses concernant la complexité et la distribution uniforme d'algorithmes Ces analyses aident à comprendre et à comparer l'efficacité de ces algorithmes par rapport aux autres Nous réalisons aussi des programmes de ces algorithmes dans le quatrième chapitre pour illustrer leurs fonctionnements via des paramètres différents.
Le chapitre 3 est le centre de ce rapport qui parle de la partition. La plupart des nos
Trang 5contributions se situent dans ce chapitre. Premièrement, nous rappelons la définition des types de partition, des bijections et des fonctions génératrices pour compter des partitions. Puis, nous introduisons deux algorithmes ZS1 et ZS2 pour générer tous les partitions. Ces deux algorithmes ayant les plus petits temps de fonctionnement sont le résultat de recherche de A. Zoghbi et I. Stojmenovic [18] en 1998. Particulièrement, selon des conseils sur la direction de recherche de Mme Phan, nous avons trouvé aussi 3 nouveaux algorithmes. Ils permettent de générer aléatoirement une partition impaire, une partition paire ou une partition stricte. Tous ces algorithmes assurent la distribution uniforme et sont basés sur la méthode de génération aléatoire d'une partition[5][6]. Des programmes de ces algorithmes sont réalisés au chapitre 4.
Dans la partie de l'implémentation de chapitre 4, il y a 9 programmes. Premièrement, c'est un programme pour générer aléatoirement un arbre par le codage de Prüfer. Il y a aussi deux programmes de génération aléatoire d'une triangulation et d'une permutation.
En suite, ces sont des programmes concernant la partition : deux programmes qui génèrent tous les partitions d’entier positif selon ZS1 et ZS2, quatre programmes pour générer aléatoirement : une partition, une partition impaire, une partition paire ou partition stricte. À côté de l'introduction des algorithmes, il y a des évaluations de la complexité des programmes et des résultats obtenus. Des avantages et des inconvénients des programmes seront aussi discutés
Enfin, le chapitre 5 est consacré pour la conclusion
Mots clés partitions d'entier, partitions strictes, partitions impaires, partitions paires, génération aléatoire, fonction génératrice, bijection, distribution uniforme
Trang 6
This subject is part of the research project "Enumerative Combinatorics and random generation" of the Academies of Science and Technology of Vietnam which Ms. Phan is responsible. In computing, random generation is a subject much studied and it gives rise
to different applications in areas such as cryptographic algorithms, testing programs, probabilistic algorithms, modeling nuclear etc Under this regard, we are interested in the generation of random classes of positive partitions and other combinatorial objects such as trees, triangulations and permutations. The objective of this work is to study existing methods that can facilitate the random generation and reduce the generation time In addition, we will propose new algorithms for classes In practical work, algorithms represented will be implemented by tools such as bijections, probabilities and graphs to illustrate different methods
The report consists of five chapters :
The objective of the first chapter is to give us a global view on objects in this report. This chapter is devoted to presenting definitions of combinatorial objects studied in this report as trees, triangulations, the permutations and partitions over. This combinatorial objects are often used in the structure of data or the construction of algorithms. The concept of generating a set of objects and the concept of random generation of an object are also covered in this report. Then, this method of generating function to calculate the number of objects in a set.
The goal of the second chapter is to examine and validate various methods to facilitate the random generation. Chapter 2 speaks of the mechanism to generate random data based on cryptographiques combinatorial objects. The generation of random objects is difficult if they have the complex structure. In many cases, if they are coded and so on encodings generation, the generation becomes much easier. We see more clearly through the algorithm of random generation tree by the coding Prüfer and via the generation of random permutation of the inversion table. The chapter will present the algorithm of the random generation triangulations ensuring uniform distribution. It is a result of new research in 2008 from the team which Ms. Phan is responsible. Besides the introduction
of existing algorithms, it is also my contributions in this chapter. These are my analysis
on the complexity and uniform distribution of algorithms. These tests will help us to understand and compare the effectiveness of these algorithms compared to others. I realize also programs of these algorithms in the fourth chapter to illustrate how they
The chapter 3 is the center of this report which spoke of the partition. Most of my contributions are in this chapter. First, I remind the definition of partition types of bijections and generating functions for counting scores Then, though I ZS1 two algorithms and ZS2 to generate all the partitions. Both algorithms have the smallest operation time are the result of research by A. Zoghbi and I. Stojmenovic [18] in 1998. Specifically, according to advice on the research direction of Mrs. Phan, I also found 3
Trang 7of random generation of partition [5] [6]. Programs of these algorithms will be carried out in Chapter 4.
In the part of the implementation of Chapter 4, there will be 9 programs. First, I realize
a program to randomly generate a tree by encoding Prüfer. There are also two generations
of triangulation and random permutation, two programs that generate all partitions according ZS1 and ZS2 and four programs to randomly generate a partition, an odd partition, an even partition or a strict partition. Besides the introduction of algorithms, there will be assessments of the complexity and results of programs. Advantages and disadvantages of programs will also be discussed
Finally, the chapter 5 is devoted to the conclusion.
Keywords partitions d'entier, partitions strictes, partitions impaires, partitions paires, génération aléatoire, fonction génératrice, bijection, distribution uniforme
Trang 8
Liste des figures
Figure 1 Une exemple de triangulations9Figure 2 L'algorithme de triangulation20Figure 3 L'arbre numéroté de 10 sommets54Figure 4 L'arbre numéroté de 50 sommets55Figure 5 Une permutation de 30056Figure 6 Une permutation de 10056Figure 7 Une triangulation du polygone convexe de 7 sommets57Figure 8 Une triangulation du polygone convexe de 25 sommets57Figure 9 Les partitions de 20 selon l'ordre inverse lexicographique58Figure 10 Les partitions de 20 selon l'ordre lexicographique59Figure 11 Une partition de 10062Figure 12 Une partition de 25063Figure 13 Une partition impaire de 35065Figure 14 Une partition paire de 50066Figure 15 Une partition stricte de 40068
Trang 9Table 1 Exemple de codage 14Table 2 Exemple de décodage15Table 3 Distribution uniforme de triangulation 22Table 4 Temps de génération des partitions selon ZS1 et ZS232Table 5 Temps de génération des partitions de 75 en représentation standard33Table 6 Complexité de génération aléatoire d'une partition 38Table 7 Complexité de génération aléatoire d'une partition impaire 44
Trang 10Chapitre 1 Introduction
Ce chapitre commence par des définitions d'objets combinatoires étudiés dans ce rapport comme les arbres, les triangulations des polygone convexes, les permutations et les partitions d'entier. Ce sont des objets combinatoires souvent utilisés en informatique. Par exemple les arbres jouent un rơle central dans la conception et analyse d’algorithmes
et ils aident à décrire les propriétés dynamiques d'algorithmes. Le concept de génération tous les objets d'un ensemble et le concept de génération aléatoire d'un objet sont aussi abordés dans ce rapport. Puis, on présente la méthode de fonction génératrice pour calculer le nombre d'objets d'un ensemble. Cette technique réduit le temps de calcul et nous aide à connaỵtre la formule explicite du nombre d'objets d'un ensemble.
1.1 Définitions
Définition 1 : Un graphe G=(X , E) est la donnée d'un ensemble X de sommets et d'un
ensemble E ⊂ X x X d'arcs.
Un graphe peut être orienté ou non orienté. Dans le cas d'un graphe non orienté, les couples (x, y) et (y, x) représentent le même arc. Dans le cas d'un graphe orienté, ils décrivent les deux arcs différents
Définition 6 : Une partition d'un entier positif n est une séquence décroissante des
entiers positifs λ 1 , λ 2 , λ k tels que ∑
i=1 k
λi = n ó λ i est appelé un part de la partition.
Trang 111.3 Génération aléatoire d'un objet assurant la distribution uniforme
Le problème de génération aléatoire est un problème actuel. Si l'objet a la structure complexe, la génération aléatoire n'est pas toujours facile Particulièrement, on s’intéresse à la génération aléatoire assurant la distribution uniforme. C'est à dire que chaque objet a une probabilité égale d'être généré. Pour des applications informatiques, si
on a une suite de données d’entrée générée aléatoirement ayant une distribution uniforme, on pourrait très bien estimer l’exactitude de l’algorithme à travers plusieurs tests différents. Et cela permet de déterminer la qualité de logiciels. Nous pouvons comprendre en profondeur des propriétés de la génération aléatoire via les algorithmes aux chapitres 2 et 3
En combinatoire et en informatique, on a souvent besoins de connaître le nombre des objets d'un ensemble On pourrait utiliser la règle d’addition, de multiplication et quelques d’autres méthodes pour trouver la réponse de ce problème. Une des méthodes efficaces pour compter des objets est la fonction génératrice. L’idée est la suivante : depuis la formule récursive ou la structure de l'objet, on peut déduire la fonction génératrice appropriée; après ça, à l’aide de la méthode de développement de Taylor, cette fonction génératrice sera étendue à une série formelle. Les coefficients de cette
Trang 13Comme écrit dans l'introduction de ce chapitre, les objets présentés dans ce chapitre jouent un rôle important en informatique. Tout au long de cet rapport, nous introduisons des algorithmes existants et construisons nos nouveaux algorithmes concernant ces objets.
Dans le chapitre 2, nous continuons à étudier des algorithmes de génération aléatoire existants et l'efficacité de génération aléatoire en basant les codages d'objets
Trang 14L'objectif du deuxième chapitre est d'aider à comprendre et à comparer l'efficacité de génération aléatoire basant sur les codages d'objets au travers des algorithmes différents. Dans certains cas, la génération aléatoire directe des objets est difficile si ces objets ont
la structure complexe. Si ces objets sont codés et on fait la génération sur leurs codes, la génération devient beaucoup plus facile. En fait, on utilise la méthode de bijection. C’est
à dire que pour générer aléatoirement un objet de l'ensemble A, on génère un objet de l'ensemble B qui possède la bijection avec l’ensemble A. Après avoir généré un objet de l'ensemble B, on construit un objet de l'ensemble A en basant sur la bijection entre eux.
On le voit plus claire via l’algorithme de génération aléatoire d'un arbre par le Codage de Prüfer et via la génération aléatoire d'une permutation par la table d’inversion. Ils sont extraits à partir de documents [5] et [4]. Ces deux algorithmes assurent aussi la distribution uniforme de la génération aléatoire. Enfin, la section dernière du chapitre présentera l’algorithme de génération aléatoire une triangulation assurant la distribution uniforme. C'est un nouveau recherche dans [12] en 2008.
Le codage de Prüfer est une manière très compacte de décrire un arbre. Il se compose
de deux phases : le codage et le décodage. L'idée principale est de générer aléatoirement une séquence S = (s1, s2, sn2) ó si {1, ,n}∊ pour tout 1 ≤ i ≤ n2. À partir de cette séquence, on utilise le décodage de Prüfer pour construire un arbre numéroté T de n sommets. En réalité, la génération aléatoire d'un arbre numéroté n'est pas vraiment facile. Pourtant, si on utilise la séquence S, la complexité de génération est diminuée beaucoup par rapport à la génération directe d'un arbre numéroté
Trang 15• Étape 4 : S'il reste plus de deux sommets dans l'arbre courant T, on retourne à l'étape 1. Si non, on arrête et on a une séquence S de (n2) nombres.
b. Complexité
Pour identifier la feuille i de l'arbre courant ayant le numéro minimum, on doit vérifier les listes de sommets de a1 à an de l'arbre. Si la première liste ai a une élément, le sommet
i est la feuille de l'arbre courant ayant le numéro minimum. En plus, cette feuille est éliminée dans l'arbre T. Donc, le nombre des listes diminue 1 après chaque fois de répétition de l'algorithme. Donc, les opérations à fait dans l'étape 1 à la iième fois de répétition sont égale à (n+1i).
Les opérations à fait dans l'étape 2 et 3 à la iième fois de répétition sont égale à 3 : une opération pour ajouter à la séquence S le seul sommet s adjacent à i dans l'arbre T courant et les deux opérations pour enlever de l'arbre T courant le sommet i et l'arête incidente à i
L'algorithme répète tant qu'il reste plus de deux sommets dans l'arbre courant T. Donc, l'algorithme répétera (n2) fois
• Étape 2 : Ajouter à l'arbre T une arête (i,s) ó s est le sommet correspondant au premier élément de la séquence S,
la iième fois de répétition de l'algorithme, le nombre des éléments de I est (n+1i) et le
Trang 16nombre des éléments de S est ((n2 +1)i ). À la première répétition de l'algorithme, la séquence I a les n éléments et la séquence S a les (n2) éléments. Donc, les opérations à fait dans l'étape 1 à la iième fois de répétition sont égale à (n+1i)((n2 +1)i) = (n+1i)(n1i)=(ni)2 1.
Les opérations à fait dans l'étape 2 et 3 à la iième fois de répétition sont égale à 3 : une opération pour relier par une arête de T le sommet i avec le sommet s correspondant au premier élément de la suite S et les deux opérations pour enlever i de I et s de S
L'algorithme répète tant qu'il reste plus de deux éléments dans I. Donc, l'algorithme répétera (n2) fois.
La complexité de l'algorithme est ((Σ ni )2 + 2 )= O(n2)
Trang 17S=
{4,10,3,8,4,4,5,10}
S={4,10,3,8,4,4,5,10} est le codage
de Prüfer de l'arbre initial
Trang 18Étape 5 Étape 6 Étape 7 Étape 8 Étape 9
Théorème 1 La génération aléatoire d'un arbre par le codage de Prüfer assure la
distribution uniforme. Cette distribution uniforme est égale à 1/n n2
Preuve :
Une séquence S se compose de (n2) nombres. Chaque nombre a la valeur de 1 à n. On peut générer les nn2 séquence S. Alors, la probabilité de génération d'une séquence S est égale à 1/nn2. Il y a la bijection entre une séquence S de (n 2) nombres et un arbre numéroté T de n sommets. Donc, la probabilité de génération d'un arbre T de n sommet est égale à
1/nn2.
Il existe déjà des algorithmes différents pour générer aléatoirement une permutation. Pourtant, la plupart de ces algorithmes n'assurent pas la distribution uniforme ou ont la grande complexité. Dans cette section, nous introduisons une méthode qui assure la distribution uniforme et la petite complexité.
2.2.1 Table d’inversion
Définition 12 : Soit a = a 1 a2 a n une permutation d'entiers de 1 à n. Une table b =
b1b2 b n est appelée la table d'inversion de a si b i est le nombre d'entiers qui se situent à gauche de i dans a et sont supérieurs à i, pour tout 1 ≤ i ≤ n.
Exemple 8. On a une permutation de cinq nombres de 1 à 5 : a = 5 3 1 2 4. La table
d'inversion b de cette permutation est b = 2 2 1 1 0.
Trang 19C'est clair que chaque permutation fournit l'unique table d'inversion et vice versa. Autrement dit, il y a la bijection entre une permutation et une table d'inversion appropriée. Alors, pour avoir une permutation d'entiers de 1 à n, on génère aléatoirement une table d’inversion. Puis, on calcule depuis cette table d’inversion pour obtenir une permutation via la bijection entre les permutations et les tables d’inversion.
2.2.2 Algorithme
Entrée : L'entier n
Sortie : Une permutation a d' entiers de 1 à n.
• Étape 1 : Générer un table b = b1,b2, ,bn tel que 1≤ bi ≤ n – i pour tout 1≤i ≤ n.
• Étape 2 : Pour chaque bi généré aléatoirement, on ajoute i à la (bi +1)ème position vide dans la permutation a
De manière générale, on a : b1 ∈ {0, 1, , n1 }, b 2 {0, 1,…, n2}, , bn1∈ {0, 1}, b n ∈ {0}
Il y a tous les n.(n1).(n2) 1 = n ! tables b. Alors, la probabilité de génération aléatoire d'un table b est 1/n!. Autre part, il y a la bijection entre une permutation a et une table d'inversion b. Pour chaque table b, on a une permutation a. Donc, la probabilité de génération aléatoire d'une permutation est 1/n!. ◻
Trang 20− Le nombre des opérations pour générer une table b est n
− Pour chaque bi , le programme peut parcourir tous les n positions dans la permutation
a pour ajouter i à la bi +1ème position vide. En plus, la table b a les n entiers. Alors, ça fait les n.n opérations pour insérer tous les entiers de la permutation a
Donc, la complexité du programme est n + n.n = n(n +1) = O(n2)
Dans cette section, nous introduisons un algorithme de génération aléatoire de triangulation. Il est créé par N.H.Nguyen en 2008[8]. Il génère un polygone convexe triangulé et assure la distribution uniforme. L’idée de cet algorithme est identique avec l’expression de Rémy[8] pour générer aléatoirement un arbre binaire complet de n sommets à partir d'un arbre binaire complet de (ni) sommets.
2.3.1 Algorithme pour construire une triangulation de (n+1) sommets G’ à partir d’une triangulation de n sommets G
• Étape 3: Ajouter un nouveau sommet v au G. Ce sommet se situe derrière i (selon
la direction inverse de la montre)
• Étape 4 : Ajouter deux nouvelles arêtes (i,v) et (j,v) au G
• Étape 5: Dans G, avec les sommets k = i+1, ,j, on remplace les arêtes (k,i) par les arêtes (k,v). Alors, on obtient une nouvelle triangulation du polygone convexe G' de
(n +1) sommets
Exemple 9. On construit une triangulation du polygone convexe de 5 sommets à partir
d’une triangulation du polygone convexe de 4 sommets Tout d'abord, on choisit aléatoirement une arête (2,4) et un sommet 4 de cette arête. On fait la triangulation comme suite : on ajoute un nouveau sommet 4' qui se situe derrière le sommet 4 selon la direction inverse de la montre. Puis, on ajoute deux nouvelles arêtes (2,4') et (4,4') au G. L'arête (1,4) est replacée par l'arête (1,4). Enfin, on donne de nouvelles étiquettes aux sommets et on a une triangulation du polygone de 5 sommets
Trang 21
2.3.2 Complexité
À partir d’une triangulation d’ordre 1. L’algorithme doit répéter (n –1) fois pour obtenir une triangulation d’ordre n. Chaque fois de répétition, le nombre maximal des arêtes changées est (2n3). Donc, la complexité est (n1)(2n3) O(n≈ 2).
2.3.3 Distribution uniforme
Théorème 3 La distribution uniforme de cet algorithme est 1/(n+1).
Preuve :
Avec n = 1, 2 ou 3, on peut vérifier facilement cette affirmation. Suppose que cet algorithme soit vrai avec les triangulations de polygones convexes de n sommets. On a prouvé que le nombre des triangulations du polygone convexe de n sommets est égale au (n2)ième nombre de Catalan [12] Cn2 ó Cn = 2n!
n+1!n! Selon l’algorithme cidessus, pour avoir une triangulation du polygone de n+1
Exemple 10. Il y a les deux triangulations de polygone de 4 sommets. Nous appliquons
cet algorithme sur ces triangulations et nous avons les 20 triangulations de polygone de 5 sommets. En fait, Il y a seulement les 5 triangulations distinctes car chaque triangulation distincte a répété 4 fois. La probabilité pour générer aléatoirement une triangulation distincte est 4/20 = 1/5
Trang 22
Les 20 triangulations du polygone convexe de 5 sommets ( Il y a 5 triangulations distinctes) obtenues après avoir appliqué l'algorithme sur les 2 triangulations ci dessus.arête choisie : (1,2)
sommet choisi : 1
Trang 23(1,4) 4 (1,4) 1 (1,4) 4 (1,4) 1
Table 3 – Distribution uniforme de triangulation
Trang 24Après avoir analysé les complexités et les distributions uniformes des algorithmes dans
ce chapitre, nous voyons que la génération aléatoire basant sur le code d'objets est facile à réaliser. En plus, la complexité concernant la mémoire et le temps de fonctionnement est petit. Les programmes de ces algorithmes sont réalisés dans le chapitre 4 pour vérifier ces propriétés au travers des paramètres différents
Nous venons d'étudier des objets comme les arbres, les permutation et les triangulations. Dans le chapitre suivant, nous continuons à introduire des contenus le plus importants du rapport – les partitions d'entier
Trang 25Partitions d'entier
La théorie de partitions a une histoire longue. Certains problèmes particulières de partitions ont été étudiés depuis le MoyenÂge. Pourtant, des premières inventions en profondeur ont été découvertes dans le dixhuitième siècle quand L. Euler a prouvé des théorèmes très belles et signifiantes. Euler a vraiment créé la fondation de la théorème de partitions. Il y a encore d'autres grands mathématiciens – Cayley, Gauss, Hardy, Jacobi, Lagrange, Legendre, Littlewood, Rademacher, Schur, Sylvester, etc qui ont contribué beaucoup au développement de la théorie de partitions.
Le chapitre 3 est le centre de ce rapport. La plupart de nos contributions se situent dans
ce chapitre Premièrement, nous rappelons la définition des types de partitions, des bijections et des fonctions génératrices pour compter des partitions Puis, c'est l'introduction de deux algorithmes ZS1 et ZS2 pour générer tous les partitions dans la section 3.4. Ces deux algorithmes ayant le petits temps de fonctionnement sont le résultat de recherche de A. Zoghbi et I. Stojmenovic [17] en 1998. Particulièrement, selon des conseils sur la direction de recherche de Mme Phan, nous avons trouvé aussi 3 nouveaux algorithmes Ils seront introduits dans les sections 3.6, 3.7 et 3.8 Ils permettent de générer aléatoirement une partition impaire, une partition paire ou une partition stricte. Tous ces algorithmes assurent la distribution uniforme et sont basés sur
la méthode d'Euler[5][6] pour générer aléatoirement une partition qui se situe dans la section 3.5. La complexité et la distribution uniforme de tous les algorithmes dans ce chapitre sont analysées Des programmes de ces algorithmes sont réalisés aussi au chapitre 4.
Trang 26λ λ1 , λ 2 , λ k ).
Définition 14 : En représentation de multiplicité, un partition de n est écrite sousλ forme : λ = (μ 1λ1 , μ 2λ2 , ,μ k λk ) ó μ 1 , μ 2 , , μ k sont le nombre de fois de répétitions d'entiers distincts correspondants λ 1 , λ 2 , ,λ k dans la partition λ
On peut classifier les partitions de l'entier n selon l'ordre lexicographique ou l'ordre inverse lexicographique.
Définition 15 : Soit a= (a 1 ,a 2 , ,a s ) et soit b= (b 1 ,b 2 , ,b t ) les deux partitions de n. La partition a est classifiée devant la partition b selon l'ordre lexicographique si ∃ k ≥ 1 tel que a t =b t , pour tout t < k et a k < b k
Trang 27Alors (n k) = (λ1 1) + (λ 2 1) + + (λk 1). (3.1)L'expression (3.1) représente une somme de (nk) qui a au plus k parties car l'entier λi
de parenthèses de R(q) une partie de façon que le somme d'exposants des parties est égale à n.
On peut choisir :
. une partie q a1 .1 dans la première paire de parenthèses,
. une partie q a2 .2 dans la deuxième paire de parenthèses,
. une partie q a3 .3 dans la troisième paire de parenthèses,
Trang 28Exemple 13. Pour avoir l'exposant 12 de la partie q12, on peut choisir : q2.1 dans la
première partie, q0.2 dans la deuxième partie, q2.3 dans la troisième partie, et q1.4 dans la quatrième partie
On a q 2.1.q 0.2. q 2.3. q 1.4 = q 2.1 + 0.2 + 2.3 + 1.4 = q 12
Les exposants (1.4, 2.3, 0.2, 2.1 ) sont récrits sous forme (4,3,3,1,1 ). Cette forme est une partition de 12. Donc, une façon de choix pour avoir q12 est une partition de 12
À travers l'exemple cidessus, on voit que une façon de choix pour avoir qn est une partition de n. Donc, le nombre des choix pour avoir qn est correspondant au nombre des partitions pn. Alors, le coefficient de qn dans R(p) est égal au nombre des partitions de
(1 + q 1.n + q 2.n + q 3.n + ∙ ∙ ∙ ) = 1
1−q n Donc
Alors, la fonction génératrice pour les partitions distinctes est
Trang 30Entrée : l'entier n
Sortie : les partitions selon l'ordre inverse lexicographique Chaque partition est représentée sous forme (x1,x2, , xm). Le nombre des parties m n'est pas fixe. Il change selon chaque partition
• Étape 1 : la première partition est n.
• Étape 2 : Parcourir de droite à gauche dans la partition et trouver la première partie xi qui est plus que 1
• Étape 3 : Soustraire 1 de xi.
• Étape 4 : Remplacer xj par xi pour j = i+1, , m1
• Étape 5 : Remplacer xm par la reste de somme ( xm = n ∑xi , i= 1, ,m 1). On a une nouvelle partition.
partition
• Étape 1 : La première partition est (1,1, ,1). Elle se compose de n nombres 1
• Étape 2 : Parcourir de droite à gauche dans la partition et trouver la première partie à gauche xj satisfaisant xj 1 > xj et xj = xj+1 = xj+2 = xm1.
• Étape 3 : xj est augmenté 1
• Étape 4 : La reste de partition est remplacée par un nombre convenable de
Trang 31• Étape 5 : Si x1 est égale à n, on arrête et on a une nouvelle partition. Si non, on retourne à l'étape 2
n. Et on ne compte pas le temps d'affichage de résultat
La taille de sortie de chaque partition est O(n). Cela signifie que la taille totale des partitions est O(n * P(n)) Toutefois, dans certaines applications, on n'a pas besoin d'imprimer tous les partitions car ils ne servent que la source d'informations pour d'autres travaux sans afficher tous les partitions. Dans cette section, les deux algorithmes ZS1 et ZS2 sont prouvé qu'ils ont la propriété du délai moyen constant et on ne compte pas le temps d'affichage des partitions. Tout d'abord, on a besoins d'un lemme suivant pour prouver la propriété du délai moyen constant de ZS1 et ZS2.
Trang 32Dans la représentation de multiplicité, chaque partition dont la plus grande partie est moins que 3 ou égale à 3 est écrites sous forme = ( cλ 1.3, c 2. 2, c 3 1 ) ó c1, c2, c3 sont
le nombre des fois de répétitions de 3, 2, et 1 dans chaque partition
On a : n = 3c1 + 2c2 + 1c3 . (3.3)
Le nombre des partitions RP(n,3) est les solutions de l'équation (3.3).
On voit que 0 ≤ c1 ≤ (n/3). Pour chaque c1 dans cet intervalle, on résout l'équation 2c1+
c3 = n 3c1. Cet équation a seulement une solution c3 pour chaque c2, pour tout 0 ≤ c2 ≤ (n3c1)/2). Donc, pour chaque c1 fixe, le nombre des solutions est ((n3c1)/2) +1 ≥
(n3c1)/2
Dans cet équation, c1 est le nombre des répétitions du nombre 3 dans chaque partition. Les valeurs possibles de c1 sont 0, 1, 2, , n/3
Le temps de parcourir sur chaque partie de chaque partition est O(1). Le temps de retour pour chercher xi et changer les valeurs de xi+1 à xm est O(rj) ó rj = n – x1 x2 xj est le reste à distribuer après les premières j parties est fixés. La partie xi sera changé seulement après une étape de traçage "balayé" sur ième partie ou après avoir reconnu la ième partie comme le point tournant. Il y a les RP (ri, xi) telles partitions qui gardent la partie intacte xj.
Pour xi>3, selon le lemme au dessus, le nombre de ces partitions est plus que ri2/12. Alors, le nombre moyen d'opérations qui sont effectué sur chaque xi pour toutes les partitions RP(ri, xi ) est
O(1)/ RP(ri,xi) ≤ O(1)/ri2 = O(1/ri2) < qi/ri2 ó qi est constante.
Donc, le nombre moyen des opérations pour toutes les parties ≥ 3 est ≤ q1/r12 + q2/
r22+ +qs/rs2 ≤ q(1/r12 + + 1/rs2) < q(1/n2 + 1/(n1)2 + 1/12 ) < 2q qui est constant (la dernière inégalité est obtenue par appliquer le calcul intégral ).
Le case xi ≤ 2 n'est pas compté dans les arguments au dessus. Pourtant, les deux algorithmes effectuent le nombre constant des opérations sur les cas. Donc, ces deux algorithmes ont le délai moyen constant du temps.
Trang 33Cette section montre notre expérimentation et nos évaluations de ces algorithmes. L'objectif de notre expérimentation est de vérifier la précision de deux algorithme ZS1 et ZS2 et le temps de génération des partitions est petit ou non ? En plus, notre expérimentation est aussi comparée avec des résultats d'autres informaticiens
Nous avons codé ces deux algorithmes ZS1 et ZS2 en langage Java sur l'ordinateur ayant le processeur de Pentium 4 et la mémoire de 512MB. La structure donnée utilisée est une liste d'éléments pour contenir une partition en représentation standard. Les deux programmes de ces algorithmes ont été vérifiés des entiers de 1 à 100. Les deux tables suivants représentent certains nos résultats. Ils contiennent la valeur de n, le nombre des partitions de n et le temps en second de génération tous les partitions sans afficher les résultats Nous avons calculé le temps moyen de 10 fois de fonctionnement du programme
n Nombre des
partitions
Temps de génération en second (sans afficher les partitions )
partitions
Temps de génération
en second(sans afficher les partitions)
Nous avons aussi comparé notre résultat avec le résultat des auteurs de ces algorithmes. Ils sont près identiques. Le table 4 suivant montre l'expérimentation de A. Zoghbi et I. Stojmenovic [18] dans lequel il y a le temps en second de génération tous les partitions de
75 selon des algorithmes différents. Tous ces algorithmes ont été codées en langage C. Ils ont été mis en œuvre sur le PC286, Sun et NeXT. Dans le table de temps de CPU suivant, les noms des algorithmes sont définis premièrement Puis, les ordres de générations sont abrégés comme suit: Un (inverselexicographique), L(lexicographique), P(part ordre ), U( nonclassifiée ) et N (aucun d'entre eux).
Trang 34Table 5 – Temps de génération des partitions de 75 en représentation standard Après avoir comparé sur le table de temps de performance, les auteurs des ces deux algorithmes ont conclu que les deux algorithmes ZS1 et ZS2 étaient beaucoup plus rapide que d'autres algorithmes connus. Au travers les résultats ci dessus, nous pouvons conclure que les deux algorithmes ZS1 et ZS2 sont optimaux. Ses résultats sont précis et
le temps de fonctionnement est très petit par rapport à d'autres algorithmes. En plus, Ils sont faciles à comprendre et à réaliser.
Nous venons de présenter dans la section 3.4 les deux algorithmes de A. Zoghbi et I. Stojmenovic [18]pour générer tous les partitions et nos évaluations concernant la précision
et le temps de fonctionnement Dans la section 3.5, nous continuons à étudier en profondeur la génération aléatoire de partitions.
La génération aléatoire d'une partition a été largement étudiées au cours des trente dernières années, et ont trouvé des applications divers dans la biologie, les statistiques de Bayes, la combinatoire et la physique statistique, etc Dans cette section, nous introduisons l'algorithme d'Euler pour générer aléatoirement une partition. Tout d'abord, nous décrivons son principe général pour la génération au hasard d'un objet de l'ensemble. Au hasard C'est à dire que les objets de l'ensemble ont la même probabilité d'être générés. Ce principe est appliqué dans l'algorithme pour générer aléatoirement une partition d'entier. Enfin, c'est la preuve de la distribution uniforme de cet algorithme
• Étape 1 : Choisir aléatoirement une valeur m de 0 à (n1) selon la probabilité suivante
Trang 35Prob(m) = αm,n a m
a n . (3.5)
• Étape 2 : Choisir aléatoirement un objet d'ordre m et cet objet est étendu pour obtenir un objet d'ordre n
de la première preuve de (3.6) est la fonction génératrice. La deuxième preuve de (3.6) est une preuve combinatoire basée sur la représentation de multiplicité de partitions et elle est la base de l'algorithme de génération aléatoire d'une partition dans cette partie
a. Première preuve :
Cette preuve est basé sur la fonction génératrice. Nous avons la fonction génératrice des partitions
Trang 36Alors
Trang 37Soit la partition de m et soit d un diviseur de (nm). Pour chaque paire ( , d), laΠ Π partition ' de n est obtenue en ajoutant (n m)/d fois de d. Avec tous les partitions Π Π
• Si 1 ≤ x ≤ ∆0 on choisit m = 0
• Si ∆0 < x ≤ ∆0 +∆1 on choisit m = 1
Trang 38à la somme des diviseurs de n Alors, la complexité pour calculer la somme des diviseurs de n est (2 .n ).
Trang 392n'−m Tm2 n' −m12n '+7
Trang 40Soit ' une partition de n. Elle peut être écrite sous forme :Π
'Π : n = μ1r1 + μ2r2+ + μkrk
ó μ1, μ2, , μk sont le nombre de fois de répétitions des entiers correspondants r1, r2, , rk dans la partition '.Π
Suppose que pour tout n' < n, on a montré que cet algorithme a produit des partitions n' en probabilités égales.
Soit Prob( '')Π la probabilité pour avoir une partition de l'entier m < n et soit Prob(
Πm '' ' → Π ) la probabilité de la partition ''Π de m devient la partition '.Π
Selon l'algorithme au dessus, la partition Π' est obtenue à partir de la partition ''Π en replaçant (n – m) dans la partition ''Π par j.d (j= (nm)/d)