Université Gustave Eiffel

Carine Pivoteau

Assistant Professor of Computer Science

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.

Carine Pivoteau

Research Interests

Realistic analysis of algorithms

Moving away from classical complexity analysis toward a framework that explains algorithm performance on practical, real-world inputs.

Average-case analysis of algorithms

Studying the expected complexity of algorithms under probabilistic assumptions about the input distribution.

Analytic combinatorics, generating functions, and symbolic methods

Using complex analysis and generating functions to enumerate combinatorial structures and derive asymptotic properties.

Random generation of combinatorial structures (Boltzmann model)

Developing efficient algorithms for the uniform random generation of large combinatorial structures using the Boltzmann model.

Publications

Loading publications...

Teaching

Header Image

Master 1 Informatique

Java

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.

Course Materials
Java

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.

Course Materials
Java

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.

Course Materials
Java

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.

Course Materials

ESIEE - Esipe E4

Java

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.

Course Materials
Java

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.

Course Materials

Licence 3 Informatique

Haskell

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.

Course Materials
Architecture

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.

Course Materials

Additional Resources

Theses

Génération aléatoire de structures combinatoires: méthode de Boltzmann effective

2008

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

2005

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

Code and Software

2018
The NewtonGF package, a Maple package for combinatorial Newton iteration
2014
Maple worksheets for several Boltzmann samplers

Talks and presentations

2025
Branch Prediction Analysis of Morris-Pratt and Knuth-Morris-Pratt Algorithms
CPM
2023
Méthodes automatiques pour la génération aléatoire de structures combinatoires
ALEA CIRM
2016
Good Predictions Are Worth a Few Comparisons
2011
Algorithms for Combinatorial Systems: Between Analytic Combinatorics and Species Theory
2010
Average Analysis of Glushkov Automata under a BST-Like Model
FSTTCS
2008
Démo : génération aléatoire de RANs et partitions planes
2008
Itération de Newton combinatoire pour l'oracle de Boltzmann
2008
Oracle de Boltzmann effectif
2007
Random sampling of plane partitions
2007
Effective Boltzmann sampling
2005
Échantillonnage aléatoire sous le modèle de Boltzmann : le cas non étiqueté