Asymptotic computational complexityIn computational complexity theory, asymptotic computational complexity is the usage of asymptotic analysis for the estimation of computational complexity of algorithms and computational problems, commonly associated with the usage of the big O notation. With respect to computational resources, asymptotic time complexity and asymptotic space complexity are commonly estimated. Other asymptotically estimated behavior include circuit complexity and various measures of parallel computation, such as the number of (parallel) processors.
Best, worst and average caseIn computer science, best, worst, and average cases of a given algorithm express what the resource usage is at least, at most and on average, respectively. Usually the resource being considered is running time, i.e. time complexity, but could also be memory or some other resource. Best case is the function which performs the minimum number of steps on input data of n elements. Worst case is the function which performs the maximum number of steps on input data of size n.
Méthode de HalleyEn analyse numérique, la méthode de Halley est un algorithme de recherche d'un zéro d'une fonction utilisé pour les fonctions d'une variable réelle dérivables deux fois et à dérivée seconde continue (i.e. C2). La méthode, présentée par l'astronome Edmond Halley, est une généralisation de la méthode de Newton, à convergence cubique. Soit f une fonction C2 et a un zéro de f. La méthode de Halley consiste à itérer à partir d'une valeur x0 proche de a. Au voisinage de a, la suite vérifie : avec K > 0 ; ce qui signifie que la convergence est donc (au pire) cubique.
Algorithme de colonies de fourmisLes algorithmes de colonies de fourmis (, ou ACO) sont des algorithmes inspirés du comportement des fourmis, ou d'autres espèces formant un superorganisme, et qui constituent une famille de métaheuristiques d’optimisation. Initialement proposé par Marco Dorigo dans les années 1990, pour la recherche de chemins optimaux dans un graphe, le premier algorithme s’inspire du comportement des fourmis recherchant un chemin entre leur colonie et une source de nourriture.
Programmation dynamiqueEn informatique, la programmation dynamique est une méthode algorithmique pour résoudre des problèmes d'optimisation. Le concept a été introduit au début des années 1950 par Richard Bellman. À l'époque, le terme « programmation » signifie planification et ordonnancement. La programmation dynamique consiste à résoudre un problème en le décomposant en sous-problèmes, puis à résoudre les sous-problèmes, des plus petits aux plus grands en stockant les résultats intermédiaires.
Compromis temps-mémoireLes compromis temps-mémoire sont utilisés en cryptanalyse pour récupérer des clés à partir de leur trace chiffrée, en s'appuyant sur des tables précalculées. Cette méthode a été formalisée par Martin Hellman dans son article « A cryptanalytic time-memory trade-off » publié en 1980. Comme son nom le suggère, cette méthode probabiliste se trouve à mi-chemin entre : une recherche exhaustive à la demande (demandant un temps excessif) ; et un stockage complet préalable de toutes les solutions possibles en mémoire par un annuaire inverse (demandant une capacité de stockage irréaliste).
Constraint satisfactionIn artificial intelligence and operations research, constraint satisfaction is the process of finding a solution through a set of constraints that impose conditions that the variables must satisfy. A solution is therefore a set of values for the variables that satisfies all constraints—that is, a point in the feasible region. The techniques used in constraint satisfaction depend on the kind of constraints being considered.
Méthode de la sécanteEn analyse numérique, la méthode de la sécante est un algorithme de recherche d'un zéro d'une fonction f. La méthode de la sécante est une méthode comparable à celle de Newton, où l'on remplace par On obtient la relation de récurrence : L'initialisation nécessite deux points x0 et x1, proches, si possible, de la solution recherchée. Il n'est pas nécessaire que x0 et x1 encadrent une racine de f. La méthode de la sécante peut aussi être vue comme une généralisation de la méthode de la fausse position, où les calculs sont itérés.
Fonction linéaire (analyse)Dans les mathématiques élémentaires, les fonctions linéaires sont parmi les fonctions les plus simples que l'on rencontre. Ce sont des cas particuliers d'applications linéaires. Elles traduisent la proportionnalité. Par exemple, on dira que le prix d'un plein d'essence est fonction linéaire du nombre de litres mis dans le réservoir car : pour zéro litre, on paie zéro euro ; pour un litre, on paie 1,40 euro ; pour 2 litres on paie 2,80 euros ; pour 10 litres on paie 14 euros ; pour 100 litres on paie 140 euros ; et pour N litres, on paie 1,4 × N euros.
MétaheuristiqueUne métaheuristique est un algorithme d’optimisation visant à résoudre des problèmes d’optimisation difficile (souvent issus des domaines de la recherche opérationnelle, de l'ingénierie ou de l'intelligence artificielle) pour lesquels on ne connaît pas de méthode classique plus efficace. Les métaheuristiques sont généralement des algorithmes stochastiques itératifs, qui progressent vers un optimum global (c'est-à-dire l'extremum global d'une fonction), par échantillonnage d’une fonction objectif.
ComplexitéLa complexité caractérise le comportement d'un système dont les composants interagissent localement et de façon non linéaire, ce qui se traduit par un comportement difficilement prédictible. La complexité peut donc caractériser un système "composé d'un grand nombre d'éléments interagissant sans coordination centrale, sans plan établi par un architecte, et menant spontanément à l'émergence de structures complexes" (Alain Barrat, directeur de recherche au Centre de physique théorique de Marseille); mais aussi caractériser des systèmes composés de peu d'éléments (voir le chaos déterministe).
Optimisation de codeEn programmation informatique, l'optimisation de code est la pratique consistant à améliorer l'efficacité du code informatique d'un programme ou d'une bibliothèque logicielle. Ces améliorations permettent généralement au programme résultant de s'exécuter plus rapidement, de prendre moins de place en mémoire, de limiter sa consommation de ressources (par exemple les fichiers), ou de consommer moins d'énergie électrique. La règle numéro un de l'optimisation est qu'elle ne doit intervenir qu'une fois que le programme fonctionne et répond aux spécifications fonctionnelles.