My work focuses on combinatorics and the analysis of algorithms, with an emphasis on practical efficiency. I began with the random generation of combinatorial structures, particularly through the Boltzmann method, which constructs generators from combinatorial specifications. This led me to automate the treatment of the associated generating functions central to analytic combinatorics. In parallel, I study algorithm analysis with the goal of explaining observed behaviors and enriching the theoretical framework. Two directions structure this effort: developing non-uniform input models that better reflect real data, and integrating processor-level architectural features into the computational model for more realistic performance analyses.
Contact Information
Office
LIGM, bâtiment Copernic, bureau 4B100
Phone
+33 1 60 95 77 34
Research Interests
Moving away from classical complexity analysis toward a framework that explains algorithm performance on practical, real-world inputs.
Studying the expected complexity of algorithms under probabilistic assumptions about the input distribution.
Using complex analysis and generating functions to enumerate combinatorial structures and derive asymptotic properties.
Developing efficient algorithms for the uniform random generation of large combinatorial structures using the Boltzmann model.
Publications
Unable to load publications from the archive.
Teaching
Master 1 Informatique
Advanced Java
This course extends the beginner's Java course. It focuses on the design of libraries and programs in Java. It covers object-oriented, data-oriented and functional programming; classes, records, inner classes and views, anonymous classes, enums and lambdas; reflection and annotations; vectorized (SIMD) instructions; advanced parameterized types such as arrays, wildcards and raw types; mutable and immutable collections together with internal and external iteration; and both streams and push-style iteration via spliterators.
Concurrency
The course aims to teach how to design and implement Java software applications that make use of concurrency. It covers the main issues raised by concurrent execution, the implementation of lock-based synchronization methods, and the design of thread-safe classes. It also introduces key concurrency-related design patterns such as the producer–consumer pattern, the use of the Java concurrency API, and the use of atomic operations.
Network programming
The objective of this course is to understand the fundamental principles required to design and implement software applications that manage network communication on top of the IP, UDP, and TCP protocols. We study architectures suited to these tasks (concurrent servers, non-blocking I/O, etc.) and examine how to integrate the core mechanisms of communication protocols, including data representation, framing, streams, and acknowledgments. All concepts are illustrated in Java, but they apply to any programming language.
Boot camp
It is an intensive refresher week designed to prepare students for the Master's programming courses. The refresher focuses on the Java language, covering basic object-oriented programming concepts as well as recent Java features, and may extend to other topics such as functional programming or algorithmics, depending on each student's level.
ESIEE - Esipe E4
Advanced Java
This course extends the beginner's Java course. It focuses on the design of libraries and programs in Java. It covers object-oriented, data-oriented and functional programming; classes, records, inner classes and views, anonymous classes, enums and lambdas; advanced parameterized types such as arrays, wildcards and raw types; mutable and immutable collections together with internal and external iteration; and both streams and push-style iteration via spliterators.
Concurrency
The course aims to teach how to design and implement Java software applications that make use of concurrency. It covers the main issues raised by concurrent execution, the implementation of lock-based synchronization methods, and the design of thread-safe classes. It also introduces key concurrency-related design patterns such as the producer–consumer pattern and the use of the Java concurrency API.
Licence 3 Informatique
Functional programming
This course introduces the key ideas needed to write purely functional programs in Haskell. It starts with the essentials such as recursion, higher-order functions, and algebraic data types, and then moves on to more abstract topics to broaden your perspective on functional programming. Concepts are presented through concrete Haskell examples, and the lectures are supported by many exercises to help you practice and deepen your understanding.
Advanced computer architecture
Students are expected to be familiar with the basic principles of how a computer works (circuits, ALU, memory, etc.). This course goes further by examining the more advanced, yet standard, components of a modern processor architecture, especially those that strongly influence program performance. Topics covered include integer and floating-point computation; methodology for measuring execution time, with applications to memory access; memory organization and access costs; instruction-level parallelism and pipelining; architecture-dependent compiler optimizations (using gcc); branch prediction; and vectorization.
Additional Resources
Theses
Génération aléatoire de structures combinatoires: méthode de Boltzmann effective
La génération aléatoire uniforme est un enjeu central en combinatoire. Dans le modèle de Boltzmann, les structures combinatoires sont générées avec une taille aléatoire, ce qui permet de concevoir des générateurs particulièrement efficaces. L'objectif de cette thèse est de rendre cette méthode de génération effective pour un grand nombre de classes combinatoires décomposables en automatisant l'ensemble des traitements impliqués dans la conception des générateurs...
Génération aléatoire et modèles de Boltzmann
Les premiers générateurs aléatoires de structures combinatoires avaient pour but de rendre possibles des recherches de propriétés par échantillonnage portant sur des analyses statistiques de classes combinatoires qu’il était impossible d’étudier de façon exhaustive. Nijenhuis et Wilf ont alors proposé une méthode récursive pour concevoir des générateurs aléatoires uniformes en taille fixée pour différentes classes combinatoires telles que des partitions...