Toutes les méthodes reposent sur la démarche de spécification formelle, implémentation et preuve. L'évaluation de l'efficacité d'un problème est basée sur un calcul du temps d'éxécution et de consommation de la mémoire (théorie de la complexité) La récursion sert de base à ce cours. Nous utilisons d'abord des structures de données récursives: arbres, arbres rouges-noirs, listes, etc. Ensuite, des méthodes systématiques de construction de programmes efficaces seront présentées: 1- la méthode "diviser pour régner" 2- les méthodes de mémorisation, dont la programmation dynamique 3- la méthodes gloutonne 4- la méthode générer/tester  5- les méthodes heuristiques