TC101A : Algorithmique


Retour
Imprimer la fiche programme
Code analytique: EDOTCG101
Responsable  : Julien MONTAGNER
Co-responsable  : Philippe LENCA
   
Programmé en UVTC101

Présentation :

Le but de ce cours est de présenter une approche de l'informatique par des aspects qui demeurent stables vis-à-vis des mutations techniques et technologiques. En effet, contrairement aux systèmes qui subissent toujours varient selon l'époque et répondent aux exigences d'objectifs toujours en évolution, ce module présente les principes fondateurs de l'algorithmique. Ainsi, on parlera de problèmes et de leur résolution, indépendamment de la médiation effective des machines et des langages, hormis les conventions adoptées ici pour l'écriture des algorithmes.

L'image de l'informatique se réduit en général à une pratique organisée autour d'une machine et d'un humain en situation de résolution d'un problème. Or cette image, qui doit beaucoup à la banalisation de l'informatique, n'est que la partie médiatique d'une science à part entière qui articule des principes, des méthodes, des exigences et des valeurs de rigueur. Cette image occulte également plusieurs aspects d'une discipline dont la complexité grandissante se reflète dans presque tous les secteurs de l'activité humaine de nos jours. Il est impensable de concevoir un modèle d'ingénieur étranger à l'informatique. Même s'il ne sera pas forcément amené à programmer lui-même, un ingénieur aura toujours à composer avec les potentialités offertes par l'informatique. Il est ainsi fondamental de comprendre les enjeux et limites de l'algorithmique (et au delà des performances de systèmes et programmes s'exécutant sur des machines).

Ce sont précisément ces grandes lignes d'idées qui font l'ambition de ce cours. Il s'agira de présenter les principales méthodes de résolution de problèmes sous l'angle algorithmique, et de savoir appliquer les bonnes méthodes aux bons problèmes.

On s'intéressera également à l'étude de la complexité des algorithmes étudiés. Cette partie a pour objectif de déterminer a priori (indépendamment de l'exécution sur une machine donnée) quelles seront les performances (coût d'exécution en temps, mémoire, accès réseau, etc.) d'un algorithme. Enfin une analyse en situation (avec exécution sur machine cette fois) sera réalisée. Cette partie, évidemment pratique, sera l'occasion de discuter d'outils fondamentaux pour l'ingénieur (simulation, plan d'expérience, analyse de données, etc.).

Le cours portera également sur les éléments de conception complémentaire avec la démarche d'écriture des algorithmes dans la résolution d'un problème par l'outil informatique (éléments de basiques de génie logiciel, démarche d'analyse descendante, notion de modularité, etc.), en complément avec l'apprentissage du langage C et du langage Java se déroulant en parallèle.

Pré-requis :

Le cours s'appuiera sur certains éléments présentés en parallèle dans les modules suivants :
- TC131C, Maîtrise de l'environnement numérique de travail (système d'exploitation)
- TC131A, Langage C (TP d'algo en langage C, donc faits après ce module)

Bien que les outils vus en cours soient indépendant des langages de programmation, nous emploierons le langage C pour la formalisation des algorithmes. Le formalisme de base sera donc présenté dans ce module, avant d'être complété dans le module TC131A.

Liens :

Certains exemples s'appuieront sur des éléments présentés en parallèle :
- TC 101C, Analyse harmonique et distributions
- TC 111B, Théorie des signaux et filtrage
- TC 131A, Codage, logique et langage C
- TC 131D, Bases de la programmation objet
- TC 131B, Méthodes et outils d'analyse numérique

Les structures de données et algorithmes vus pourront être approfondis dans les modules suivants :
- INF 413, Algorithmique avancée
- INF 435, Graphes
- MTS 443, Technologies du multimédia

Volume horaire : 21h


Contenu détaillé :

Cours 1 : Algorithme, outil de résolution de problèmes
- Indépendance vis-à-vis des langages
- Structure d'un algorithme (boite noire/blanche), démarche de conception
- Structuration des données, variables simples/complexes
- Notion de séquentialité
- Structures algorithmiques et pseudo-langage
- Notion de trace d'un algorithme
- Introduction à la complexité algorithmique

Cours 2 : Problèmes complexes, structuration de programmes
- Algorithmes paramétrés (procédures et fonctions)
- Décomposition modulaire, communication inter-modules
- Notion de récursivité, conception vs. coût mémoire/exécution
- Démarches d'analyse descendante/ascendante
- Notions de test et validation
- Familles d'algorithmes classiquement étudiées

Cours 3 : Analyse de complexité
- Motivations
- Critères d'analyse
- Focus sur le nombre d'opérations élémentaires et sur la mémoire
- Principales notations, focus sur O()
- Principales relations de récurrence
- Théorème général
- Classe de complexité
- Exécution des algorithmes : entre le rêve et la réalité

Cours 4 : familles et stratégies algorithmiques
- Les grandes familles d'algorithmes
- Algorithmes de tri
- Stratégies et schémas algorithmiques
- Optimisation des algorithmes

BE1 (3h - travail en groupes) : Démarches d'analyse et de conception

TP1 (3h) : Algorithmique et aléatoire, sensibilisation à la notion de simulation pour la construction de jeux de données

TP2 (3h - noté par binôme, compte-rendu à fournir en fin de séance) : Programmation d'algorithmes de tri simples, évaluation de leur complexité (travail préparatoire demandé)

Les séances de TP se dérouleront dans l'environnement Linux, et les programmes écrits en langage C seront compilés en ligne de commande.


Année 2012/2013
Dernière mise à jour le 06-SEP-12
Validation par le responsable de programme le


IMT Atlantique
Campus de Brest
Technopôle Brest-Iroise
CS 83818
29238 Brest Cedex 3
France

Tél  +33 (0)2 29 00 11 11
Fax +33 (0)2 29 00 10 00