Cours & Tutoriels

Algorithmes

Complexité, Tris ...

60 cours
MP, PSI et la TSI Analyse des algorithmes Diviser pour régner Algorithmes de tri Exercices java Exercices langage c Exercices python algorithmes de tri tri sélection tri insertion tri bulles tri rapide

Algorithme de tri rapide

Tri rapide Le tri rapide (Quicksort) est un algorithme de tri basé sur le paradigme Diviser pour régner, proposé par C.A.R. Hoare en 1959. C'est l'un des algorithmes de tri les plus utilisés en pratique grâce à ses excellentes performances en moyenne.

Langage C Langage java Langage Python MPSI, PCSI et la PTSI MP, PSI et la TSI Algorithmes de tri analyse des algorithmes algorithmes de tri tri sélection tri insertion tri bulles

Algorithmes de tri élémentaires (Tri sélection, tri par insertion et tri à bulles)

Problème du tri Étant donné un tableau T[0..n-1] de n éléments comparables, trier consiste à réorganiser les éléments de façon à obtenir T[0] ≤ T[1] ≤ … ≤ T[n-1]. Les trois algorithmes présentés ici sont dits élémentaires : simples à comprendre et à implémenter, mais de complexité O(n^2) dans le pire cas — à utiliser sur de petits tableaux ou comme base pédagogique.

Diviser pour régner Programmation dynamique

Rappel sur l'approche récursive

La récursivité est un concept fondamental en informatique et en programmation. Elle consiste à définir une fonction en utilisant une ou plusieurs instances de cette même fonction. En d'autres termes, une fonction récursive est une fonction qui s'appelle elle-même à l'intérieur de sa propre définition. Cela permet de résoudre des problèmes complexes en les divisant en sous-problèmes plus simples, qui sont ensuite résolus en appelant la fonction récursive sur les sous-problèmes.

Programmation dynamique

Méthodes de la programmation dynamique : Mémoisation et tabulation

La programmation dynamique est une technique d'optimisation qui résout des problèmes complexes en les décomposant en sous-problèmes plus simples, et en stockant les résultats intermédiaires pour éviter les calculs répétitifs. Mémoisation et tabulation sont deux approches couramment utilisées pour optimiser les solutions de programmation dynamique. Elles permettent de résoudre les problèmes plus efficacement en stockant les résultats intermédiaires pour éviter les calculs répétitifs.

Programmation dynamique

Le concept de sous-structure optimale

Le concept de sous-structure optimale fait référence à une propriété des problèmes d'optimisation où une solution optimale du problème global peut être construite à partir de solutions optimales de ses sous-problèmes. Cette propriété est essentielle pour appliquer la programmation dynamique et les algorithmes gloutons.

Programmation dynamique

Le concept de sous-problèmes superposés

Le concept de sous-problèmes superposés fait référence à une situation dans laquelle un problème peut être décomposé en sous-problèmes plus petits, mais certains de ces sous-problèmes sont résolus plusieurs fois lors de la résolution du problème initial. Cette répétition de sous-problèmes identiques est une caractéristique essentielle qui permet d'appliquer la programmation dynamique pour résoudre efficacement le problème.

Initiation à l'algorithmique

Conception des algorithmes

Avant d'écrire un algorithme, vous devez vous poser les questions suivantes : (1) Quelles entrées voulez-vous utiliser pour l'algorithme ? (2) Quelles contraintes devez-vous garder à l'esprit lorsque vous essayez de résoudre ce problème ? ...

Initiation à l'algorithmique

Introduction à l'algorithmique

Un programmeur doit savoir ce qu'est un algorithme, afin de savoir comment l'utiliser pour écrire du code. Un algorithme est un ensemble de règles, d'instructions ou de processus qu'une machine ou un système doit suivre pour résoudre un problème. Il peut inclure le type d'opérations à utiliser et les variables à déclarer. En termes simples, un algorithme est un ensemble de règles définissant les étapes à suivre pour obtenir les résultats souhaités.