Initiation aux structures des données, à l'algorithmique et à l'analyse des algorithmes (amphis).
Perfectionnement à la programmation en Java (TDs).
Ce cours entend amener les élèves de niveau INF361 au niveau de fin de INF371, afin de pouvoir poursuivre le cursus d'informatique de l'Ecole. L'enseignement porte essentiellement sur les structures de données (hachage, arbres, graphes), sur l'algorithmique, et sur un minimum de théorie de la complexité. Ce cours est également l'occasion de se perfectionner en Java. Les TDs explorent en profondeur une partie du matériel présenté en amphi.
Niveau requis : INF361
Modalités d'évaluation : Un contrôle continu (devoir à la maison), un examen classant en salle (3h).
Langue du cours : Français
Credits ECTS : 5
- Responsable: Albenque Marie
- Responsable: Chiche Nathan
- Responsable: Filliâtre Jean-Christophe
- Responsable: Haucourt Emmanuel
- Responsable: Izabachene Malika
- Responsable: Lairez Pierre
- Responsable: Mezzarobba Marc
- Responsable: Pilaud Vincent
- Responsable: Filliâtre Jean-Christophe
Ce cours présente les fondements de l'informatique en tant que science. Si l'idée d'utiliser des machines pour effectuer des calculs est ancienne, c'est dans les années 30 que les travaux d'Alan Turing, Alonzo Church, Kurt Goedel et d'autres ont posé les bases de ce qui allait devenir l'informatique que nous connaissons aujourd'hui.
Leurs travaux ont révélé que le raisonnement et le calcul sont intimement liés et ces bases doivent donc se comprendre dans la tradition, plus ancienne, de la logique et des fondements des mathématiques, de Peano à Zermelo en passant par Hilbert et bien d'autres. Il est remarquable que ces bases sont toujours d'actualité, malgré les progrès technologiques spectaculaires.
Alors que d'autres cours montrent comment programmer, on explicite ici le cadre de ce qui est faisable, en termes
- de calculabilité : certains problèmes ne peuvent pas être résolus par une machine ;
- de complexité : certains problèmes ne peuvent être résolus en un temps raisonnable.
C'est par exemple sur ces points que reposent les technologies cryptographiques et le fameux problème "P=NP" à $1.000.000.
Programme
Logique des propositions et des prédicats : Formules, modèles, satisfiabilité, validité, prouvabilité
Exemples de théories: arithmétique et théorie des ensembles
Modèle de calcul : machines de Turing, calculabilité, décidabilité, théorème de l'arrêt, machine universelle
Classes de complexité : P, NP, réduction de problème, NP-complétude, problèmes SAT
Niveau requis : Pas de pré requis.
En revanche, ce cours est un pré-requis pour les thématiques "Algorithmique et optimisation" et "Langages, preuves, calcul" du PA Info en 3ème année.
Modalités d'évaluation : Examen sur table.
Langue du cours : Français
- Responsable: Blanc Manon
- Responsable: Bournez Olivier
- Responsable: Mimram Samuel
- Responsable: Zeilberger Noam
- Responsable: Blanc Manon
- Responsable: Bournez Olivier
Algorithms are the heart of all computation. This course, building on the algorithmic foundations laid in the first computer science courses (INF321 or INF311+INF411), equips the student with a solid background in modern algorithmics. Having followed this course, the student will have a profound knowledge of the most central algorithms, both understanding how and why they work and being able to solve a wide range of computational problems with these building blocks. This is material that everyone aiming to work in a computer science or computing related context needs to know, let it be in a research or industrial environment. In addition to this, we shall also give a brief introduction to several more recent topics like randomized algorithms, evolutionary algorithms, online algorithms, or algorithmic game theory, which had a significant impact on how we understand computing today.The course is taught in English (amphis, poly), for all the rest including the exam both French and English are offered.
- Responsable: Albenque Marie
- Responsable: Coupechoux Marceau
- Responsable: Doerr Benjamin
- Responsable: Krejca Martin
- Responsable: Loiseau Patrick
- Responsable: Zhou Hang
L'analyse de données moderne s'appuie sur des langages de haut niveau comme Python ou R pour la manipulation et le traitement des données. Toutefois, derrière les bibliothèques standard comme Scikit-Learn se cachent des implémentations dans des langages de bas niveau comme C ou C++ pour une exécution optimisée et une gestion efficace des ressources mémoire ou de calcul. D'où l'intérêt de ce cours, dont l'objectif est double : d'une part, se familiariser avec certaines des techniques standard d'analyse de donnéés et d'apprentissage machine ; d'autre part, acquérir une compétence en programmation C/C++ qui permette à terme aux élèves d'adapter les implémentations bas niveau existantes à leurs besoins spécifiques. A noter que les paradigmes de programmation abordés lors du cours sont quasi-exclusivement séquentiels, la programmation concurrente étant tout juste effleurée lors de la dernière séance et réservée pour d'autres cours.
Détail des séances (analyse de données / C++):
1. Introduction brève à l'analyse de données / C++ comme du C (1/2)
2. Recherche de plus proches voisins et extraction dans les bases de données / C++ comme du C (2/2)
3. k-means / structs et classes (1/2)
4. Clustering hiérarchique / structs et classes (2/2)
5. Estimation de densité / héritage
6. Classification et régression k-NN / généricité
7. Modèles linéaires pour la régression / STL
8. Modèles linéaires pour la classification / C++11
9. Extraction de features / -
10. Réseaux de neurones / multithreading
Références:
En analyse de données :
- Hastie, Tibshirani, Friedman: The Elements of Statistical Learning: Data Mining, Inference, and Prediction (2nd ed.). Springer, 2017.
- Bishop: Pattern Recognition and Machine Learning. Springer, 2006.
En C++ :
- Weiss: C++ for Java Programmers. Prentice Hall, 2003.
- Stroustrup. The C++ Programming Language (4th ed.). Addison-Wesley, 2013.
Prérequis : INF371 ou INF411
Recommandés : MAP433 et INF421
- Responsable: Beguinot Julien
- Responsable: Berkemer Sarah
- Responsable: Ehrhardt Adrien
- Responsable: Krejca Martin
- Responsable: Oudot Steve
- Responsable: Pogudin Gleb
- Responsable: Tomchuk Bogdan
- Responsable: Tsigaridas Elias
- Responsable: Oudot Steve
- Responsable: Braune Theo
- Responsable: Bredif Mathieu
- Responsable: Cani Marie-Paule
- Responsable: Desbrun Mathieu
- Responsable: Rohmer Damien