Tải bản đầy đủ (.pdf) (116 trang)

Génération aléatoire de classes des partitions dentier et de certains objets combinatoires

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.14 MB, 116 trang )

Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

  Institut 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
             

1


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

Table des matières 


Remerciements­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­2
Résumé­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­3
Abstract­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­5
Liste des figures­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­7
Liste des tableaux­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­8
1. Introduction­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­9
   1.1.     Définitions­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­9
   1.2.     Générer tous les objets ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­10
   1.3.     Génération aléatoire d'un objet assurant la distribution uniforme­­­­­­­­­­­­­­­­­10
   1.4.     Méthode de fonctions génératrices­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­10
2. Codage et Génération aléatoire­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­13
   2.1.     Génération aléatoire d'un arbre par le codage de Prüfer­­­­­­­­­­­­­­­­­­­­­­­­­­­­13
   2.2.     Génération aléatoire d'une permutation par la table d'inversion­­­­­­­­­­­­­­­­­­­17
   2.3.     Génération aléatoire d'une triangulation­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­19
3. Partitions d'entier positif­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­24
   3.1.     Définitions­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­24
   3.2.     Représentation de partitions et l'ordre de la classification­­­­­­­­­­­­­­­­­­­­­­­­­25
   3.3.     Calcul le nombre des partitions­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­25
   3.4.     Génération des partitions par ZS1 et ZS2­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­28
   3.5.     Génération aléatoire d'une partition­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­33
   3.6.     Génération aléatoire d'une partition impaire­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­40
   3.7.     Génération aléatoire d'une partition paire­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­44
   3.8.     Génération aléatoire d'une partition stricte­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­49
4. Expérimentation et Analyse des résultats­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­52
   4.1.     Programme de génération aléatoire d'un arbre par le codage de Prüfer­­­­­­­­­­52
   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 triangulation­­­­­­­­­­­­­­­­­­­­­­­­­­­­56
   4.4.     Programme de génération des partitions d'entier par ZS1 et ZS2­­­­­­­­­­­­­­­­­58
   4.5.     Programme de génération aléatoire d'une partition d'entier­­­­­­­­­­­­­­­­­­­­­­­­59
   4.6.     Programme de génération aléatoire d'une impaire d'entier­­­­­­­­­­­­­­­­­­­­­­­­­63

   4.7.     Programme de génération aléatoire d'une paire d'entier­­­­­­­­­­­­­­­­­­­­­­­­­­­­66
   4.8.     Programme de génération aléatoire d'une partition stricte d'entier­­­­­­­­­­­­­­­66
5. Conclusion et perspective­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­69 
Références­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­71 
Annexe­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­72 
    

             

2


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

REMERCIEMENTS 
   Je 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. 

             

3



Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

Résumé
Le 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 
             

4


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

contributions 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.

             

5


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

Abstract
 
   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 
work via different parameters.
 
   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 
             

6


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

new algorithms. They can randomly generate a partition odd, a partition or a pair strict 
partition. All these algorithms ensure uniform distribution and are based on the method 
of 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.
                     
    

             

 


7


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

 

Liste des figures 
Figure 1 ­ Une exemple de triangulations­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­9
Figure 2 ­ L'algorithme de triangulation­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­20
Figure 3 ­ L'arbre numéroté de 10 sommets­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­54
Figure 4 ­ L'arbre numéroté de 50 sommets­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­55
Figure 5 ­ Une permutation de 300­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­56
Figure 6 ­ Une permutation de 100­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­56
Figure 7 ­ Une triangulation du polygone convexe de 7 sommets­­­­­­­­­­­­­­­­­­57
Figure 8 ­ Une triangulation du polygone convexe de 25 sommets­­­­­­­­­­­­­­­­­57
Figure 9 ­ Les partitions de 20 selon l'ordre inverse lexicographique­­­­­­­­­­­­­­58
Figure 10 ­ Les partitions de 20 selon l'ordre lexicographique­­­­­­­­­­­­­­­­­­­­­­59
Figure 11 ­ Une partition de 100­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­62
Figure 12 ­ Une partition de 250­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­63
Figure 13 ­ Une partition impaire de 350­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­65
Figure 14 ­ Une partition paire de 500­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­66
Figure 15 ­ Une partition stricte de 400­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­68

             

8



Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

 Liste des tableaux
Table 1­ Exemple de codage ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­14
Table 2­ Exemple de décodage­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­15
Table 3­ Distribution uniforme de triangulation ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­22
Table 4­ Temps de génération des partitions selon ZS1 et ZS2­­­­­­­­­­­­­­­­­­­­­32
Table 5­ Temps de génération des partitions de 75 en représentation standard­­­33
Table 6­ Complexité de génération aléatoire d'une partition ­­­­­­­­­­­­­­­­­­­­­­­38
Table 7­ Complexité de génération aléatoire d'une partition impaire ­­­­­­­­­­­­­44

             

9


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

Chapitre 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 2 : Un arbre  est un graphe non orienté, connexe et sans cycle.
Définition 3 :  Un arbre numéroté d'ordre n est un arbre dont ses n sommets sont  
étiquetés par des entiers distincts de 1 à n.                                             ́
Définition   4  :  Une   triangulation   d'ordre   n–2   est   une   façon   de   diviser   un   polygone  
convexe de n sommets en n­2 triangles par des diagonales non­intersections.
     On a prouvé que le nombre des façons pour trianguler un polygone convexe de n 
sommets est égale au (n­2)­ième nombre de Catalan (Cn­2).[2]
Exemple 1 : On a les 5 triangulations d‘ordre 3 ( C3 =5 ).

 Figure 1 – Exemple de triangulations
Définition 5 : Soit A un ensemble de n entiers de 1 à n. Une permutation d'un ensemble  
A est une bijection σ de A sur lui­même. 
Exemple 2.  5 2 1 4 3 est une permutation de l'ensemble A = {1, 2, 3, 4, 5}. On a σ(1)=5, 
σ(2)=2, σ(3)=1, σ(4)=4, σ(5)=3.
Définition  6  :  Une  partition   d'un   entier   positif  n  est  une   séquence   décroissante  des 
k

entiers positifs λ1, λ2, ...λk  tels que   ∑ λ i  = n où λi est appelé un part de la partition. 
i=1

             

10



Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

Cette partition est représentée sous forme λ=(λ1, λ2, ...λk).
Exemple 3. (7, 4, 2, 2, 1) est une partition de 16.
Définition 7  :  Une partition stricte d'un entier positif n est une séquence décroissante 
k

des entiers positifs distincts  λ1, λ2, ...λk  tels que   ∑ λi  = n.
i= 1
Exemple 4. (8, 5, 2, 1) est une partition stricte de 16.
Définition 8 : Une partition impaire d'un entier positif n est une séquence décroissante  
k

des entiers positifs impaires λ1, λ2, ...λk  tels que   ∑ λi  = n.
i= 1

Exemple 5. (5, 5, 3, 3) est une partition impaire de 16.
Définition 9 : Une partition paire d'un entier positif n est une séquence décroissante des  
k

λi  = n.
entiers positifs paires λ1, λ2,...λk  tels que   ∑
i= 1

Exemple 6.  (6, 4, 2, 2, 2) est une partition paire de 16.

1.2  Générer tous les objets
    En informatique, on a souvent besoins de connaître tous les objets de l'ensemble. Le 

but de ce travail est de vérifier des propriétés, des contraintes sur les objets. Cela permet 
d'assurer  la précision de l'algorithme dans les cas possibles. Dans le cadre de génération 
des objets, nous  étudions des méthodes pour trouver des algorithmes permettant réduire 
la complexité concernant la mémoire et le temps de fonctionnement. 

1.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.

1.4  Fonction génératrice[13]
   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 
             

11


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 


série correspondent aux nombres d'objets de même ordre. 

1.4.1 Série formelle
Définition 10 : Soit N = {0, 1, 2, 3, ...} et soit C l’ensemble des nombres complexes. On  
définit CN  comme l’ensemble de tous les injections de N à C
                                                         CN = {a: N ­> C}
        j  ­> aj     


Pour chaque a de C  on exprime: a = a(x) = ∑ a j x j  et a est appelé une série formelle. 
N

j= 0

Une série formelle a(x) où an ≠ 0 et aj = 0 pour tous j >n, est appelée le polynôme de 
degré n, et est décrite comme suite:



L’élément 0  x = ∑ 0x j  est le symbole 0 de CN et défini être à degré ­1.
j=0

1.4.2  Fonction génératrice
Définition 11 : Soit { aj / j=0,1,2,..} une séquence infinie des nombres. La fonction  


génératrice a(x) de séquence {aj / j= 0,1,2,..} est la série formelle  a(x) =  ∑ a j x j .
j= 0


1.4.3  Certains équations souvent utilisés pour étudier les fonctions 
génératrices
   On a :

.

    Pour   prouver   les   équations   ci­dessus,   on   peut   utiliser   la   méthode   inductive   et  des 
transformations   algébriques   normales.   La   méthode   de   fonction   génératrice   est   une 
méthode   vraiment   utile.   La   plupart   d'algorithmes   dans   le   chapitre   3   utilisent   cette 
méthode.
             

12


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

1.5  Conclusion
   Comme é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.

             

13



Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

Chapitre 2
Codage et Génération aléatoire 
    L'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.  

2.1 Génération aléatoire d'un arbre numéroté par le codage de Prüfer[5]
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,..sn­2) où si  ∊  {1,..,n}  pour tout 1  ≤ i ≤ n­2. À  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é.

2.1.1 Codage
a. Algorithme 

­ Entrée : Une arbre T de n sommets  numérotés
­ Sortie : Le code de T : une séquence S = (s1, s2,..sn­2) où si ∊ {1,..,n} pour tout 1 ≤ i ≤ 
n­2.
­ Structure de données en informatique : l'arbre numéroté T est représenté par n listes : a1, 
a2, ..., an. Chaque liste ai contient des sommets qui sont adjacent au sommet  i dans l'arbre 
T.




Étape 1 : Identifier la feuille i de l'arbre courant ayant le numéro minimum,
Étape 2 : Ajouter à la séquence S le sommet s adjacent à i dans l'arbre T courant,
Étape 3 : Enlever de l'arbre T courant le sommet i et l'arête incidente à i,

             

14


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 


É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 (n­2) 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 i­ième  fois de 
répétition sont égale à (n+1­i). 
  Les opérations à fait dans l'étape 2 et 3 à la i­iè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 (n­2) fois.
   La complexité de l'algorithme est  : 
n−2

∑  n+1−i 3  = ((n+4)­1) + ((n+4)­2) +...+ ((n+4)­(n­2)) = (n­2).(n+9)/2. 
i=1

  

2.1.2. Décodage 
a. Algorithme

­ Entrée : une séquence S = (s1, s2,..sn­2) où si ∊ {1,..,n} pour tout 1 ≤ i ≤ n­2.
­ Sortie :  Un arbre numéroté T de n sommets.






Étape 0 : Soit I = (1,..,n),
Étape 1 : Identifier le plus petit élément i de I n'apparaissant pas dans la séquence 
S,

Étape 2 : Ajouter à l'arbre T une arête (i,s) où s est  le sommet correspondant au 
premier élément de la séquence S,
Étape 3 : Enlever i de I et s de S,
Étape 4 : S'il reste des éléments dans S et plus de deux éléments dans I, on 
retourne à l'étape 1. Si non, on arrête et on a un arbre T de n sommets.

Les deux éléments qui restent dans I à la fin de l'algorithme constituent les extrémités de 
la dernière arête à ajouter à T. 

b. Complexité

    Pour identifier le plus petit élément i de I  n'apparaissant pas dans la séquence S, on 
doit  vérifier tous les éléments de I et tous les éléments de S. En plus, le nombre de 
sommets de I et de S diminue 1 après chaque fois de répétition de l'algorithme. Alors, à 
la i­ième  fois de répétition de l'algorithme,  le nombre des éléments de I  est (n+1­i) et le 
             

15


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

nombre des éléments de S est ((n­2 +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 (n­2) éléments. Donc, les opérations à 
fait dans l'étape 1 à la i­ième  fois de répétition sont égale à (n+1­i)((n­2 +1)­i) = (n+1­i)
(n­1­i)=(n­i)2 ­ 1.
  Les opérations à fait dans l'étape 2 et 3 à la i­iè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 (n­2) fois. 
   La complexité de l'algorithme est  Σ((n­i )2 + 2 )= O(n2).
                                             i=1..(n­2)
   Pour plus claire sur le fonctionnement de ces deux algorithmes, veuillez voir un 
exemple suivant.

2.1.3  Exemple 7 [5]

   On a l’arbre suivant:

       Appliquer les deux algorithmes sur cet arbre pour montrer leur fonctionnement du 
codage de Prüfer.

             

16


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

a. Fonctionnement de l’algorithme de codage
Étape 0

Étape 1

Étape 2

Étape 3

Étape 4


Arbre à coder

S = {4}

S = {4, 10}

S = {4, 10, 3}

S = {4, 10, 3, 8}

Étape 5

Étape 6

Étape 7

Étape 8

S = {4,10,3,8,4}

S={4,10,3,8,4,4}

S={4,10,3,8,4,4,5
}
 

S={4,10,3,8,4,4,5,
10} est le codage 
de Prüfer de 

l'arbre initial.
S=

{4,10,3,8,4,4,5,10}

Table 1­ Exemple de codage

b. Reconstruire l’arbre initial en utilisant l’algorithme de décodage
Étape 0

Étape 1

I={1,2,3,4,5,6,7,8 I={2,3,4,5,6,7,8,9,
10}
,9,10}
S={4,10,3,8,4,4,5 S={10,3,8,4,4,5,1
0}
,10}

             

Étape 2

Étape 3

I={3,4,5,6,7,8,9,10
}
S={3,8,4,4,5,10}

I={3,4,5,7,8,9,10}

S={8,4,4,5,10}

17

Étape 4

I={4,5,7,8,9,10}
S={4,4,5,10}


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

Étape 5

I={4,5,8,9,10}
S={4,5,10}

Étape 6

Étape 7

I={4,5,9,10}
S={5,10}

Étape 8

I={5,9,10}
S={10}

Étape 9


I={9,10}
S={}

I = {}
S = {}

Table 2­ Exemple de décodage

2.1.4  Génération aléatoire d'un arbre numéroté par le codage de Prüfer
   Tout d'abord, on génère aléatoirement une séquence S=(s 1, s2,..sn­2) où si ∊ {1,..,n} pour 
tout 1 ≤ i ≤ n­2. La complexité pour générer une séquence S est égale à (n­2). L'arbre T 
de n sommets est construit à partir de cette séquence S par le décodage de Prufer. La 
complexité   du   décodage   est   égale   à   O(n2).   Donc,   la   complexité   pour   générer 
aléatoirement un arbre T est égale à (n­2) + O(n2).
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/nn­2.
Preuve :
  Une séquence S se compose de (n­2) nombres. Chaque nombre a la valeur de 1 à n. On 
peut générer les nn­2 séquence S. Alors, la probabilité de génération d'une séquence S est 
égale à 1/nn­2. 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/nn­2. 

2.2   Génération aléatoire d'une permutation par la table d'inversion[3]
  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 = a1  a2...an.  une permutation d'entiers de 1 à n. Une table b =  
b1b2...bn 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.  

             

18


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

  C'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.


int[] permutation()
{ randomize ;
for (int i:=1; i≤ n ; i++) a[i]:=0;
for(int j:=1; j≤ n; j++)
{
// générer aléatoirement bi
x:= random(n-j+1);
i:= 1; d:=0;
while (i<=n) && (d<=x+1)
{ if a[i]=0 d:=d+1;
i:=i+1;
}
//ajouter i à la (bi +1)-èmeposition vide dans la permutation a.
a[d]:=j;
}
return a;
}
 

2.2.3 Distribution uniforme
Théorème 2  La génération aléatoire de permutation par la table d'inversion assure la 
distribution uniforme et cette distribution est égale à 1/n!.
Preuve :  
   Observer l'exemple 8, on voit que: b1 ∈ {0, 1, 2, 3, 4 }, b2  ∈ {0, 1, 2, 3  }, b3 ∈ {0, 1, 
2}, b4 ∈ {0, 1, }, b5 ∈ {0}.
   De manière générale, on a : b1 ∈ {0, 1,..., n­1 }, b2 {0, 1,…, n­2},.., bn­1∈ {0, 1}, bn ∈ 
{0}.
Il y a tous les  n.(n­1).(n­2)...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!.        
                      ◻
 

             

19


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

2.2.4  Complexité



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).

2.3  Génération aléatoire d'une  triangulation  
  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 (n­i) sommets. 


2.3.1  Algorithme pour construire une triangulation de (n+1) sommets G’ à 
partir d’une triangulation de n sommets G 
Entrée : Une triangulation du polygone convexe de n sommets G.
Sortie :  Une triangulation du polygone convexe de (n+1) sommets G'.
 






Étape 1 : Choisir aléatoirement une arête (i,j) de G.
Étape 2 : Choisir aléatoirement un des deux sommets de cette arête : suppose que i 
est choisi.
É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.


             

20


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

2.3.2  Complexité  

Figure 2 – Algorithme de triangulation
  

  À 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 (2n­3). Donc, la complexité est (n­1)(2n­3) ≈ O(n2). 

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 
 2n  !
(n­2)­ième nombre de Catalan [12] Cn­2   où  Cn = 
.
 n+1  !n!
   Selon l’algorithme ci­dessus, pour avoir une triangulation du polygone de n+1 
sommets, on fait comme suite :
1.  Choisir aléatoirement une des Cn­2 triangulations.
2.  Choisir aléatoirement une des (2n­3) arêtes de la triangulation choisie.

3.  Choisir aléatoirement un des deux 2 sommets de cette arête. 
  Si on appliquer cet algorithme sur tous les triangulations du polygone de n sommets, on 
peut générer les 2(2n­3)Cn­2  triangulations de polygone de n+1 sommets dans lesquels 
chaque triangulation distincte du polygone de (n+1) sommets a répété n fois. On a
n
1
1
=
=
C n−1 
n+1 .
2  2n−3  C  n−2 

Alors, la distribution uniforme de chaque triangulation est égale à 1/(n+1).                    □
    Pour plus claire sur la propriété de la distribution uniforme, veuillez voir un exemple 
dans  le programme de cet algorithme que nous écrivons dans le chapitre 4.
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.
                                                         
             

 
21


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 


Les deux triangulations du polygone convexe de 4 sommets

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

(1,2) 2

(1,2) 1

(1,2) 2

(2,3) 2

(2,3) 3

(2,3) 2

(2,3) 3

(3,4) 3

(3,4) 4

(3,4) 3

(3,4) 4

             


22


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 
(1,4) 4

(1,4) 1

(1,4) 4

(1,4) 1

(2,4) 2

(2,4) 4

(1,3) 1

(1,3) 3

 Table 3 – Distribution uniforme de triangulation

             

23


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 


2.4  Conclusion
    Aprè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.

             

24


Génération aléatoire des classes des partitions d'entier positif et d'autres  objets combinatoires 

Chapitre 3

Partitions 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 dix­huitiè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. 

3.1.  Définitions [7] 

   Nous rappelons ici des définitions de partitions. 
Partition : Une partition d'un entier positif n est une séquence décroissante des entiers  
k

positifs λ1, λ2, ...λk  tels que   ∑ λi  = n  où λi est appelé un part de la partition. 
i= 1

Partition   stricte  :  Une   partition   stricte   d'un   entier   positif   n   est   une   séquence  
k

décroissante des entiers positifs distincts  λ1, λ2, ...λk  tels que   ∑ λi  = n.
i =1

Partition   impaire  :  Une   partition   impaire   d'un   entier   positif   n   est   une   séquence  
k


décroissante des entiers positifs impaires λ1, λ2, ...λk  tels que   ∑ λi  = n.
i= 1

Partition paire : Une partition paire d'un entier positif n est une séquence décroissante  

             

25


×