dancinlab/anima-corpus-5lang-unified huggingface dataset:
Les espaces vectoriels utilisés sont d'une grande diversité. On y trouve les classiques espaces vectoriels de dimension 2 ou 3 sur les nombres réels, cependant la dimension peut être quelconque, même infinie. Les nombres complexes sont aussi très utilisés, ainsi que les rationnels. Il n'est pas rare qu'une partie des nombres réels ou complexes soit considéré comme un espace vectoriel rationnel. Le corps de base peut aussi contenir un nombre fini d'éléments, définissant parfois un espace vectoriel fini.
Georg Frobenius, à la suite de travaux de Richard Dedekind, développe une nouvelle théorie en 1896. Elle se fonde sur l'idée que l'ensemble des « symétries » (au sens : automorphismes) d'un espace vectoriel possède une structure de groupe. Il est toujours possible de représenter un groupe fini par des « symétries » bien choisies sur un espace vectoriel de dimension suffisante. Un groupe est ainsi incarné par des transformations géométriques simples. Une telle incarnation prend le nom de représentation d'un groupe.
Les espaces vectoriels choisis sont de dimension finie, en général sur le corps des complexes, cependant pour disposer de bonnes propriétés arithmétiques le corps peut être celui des rationnels ou encore utiliser des entiers algébriques comme pour la démonstration du théorème de Burnside sur les groupes résolubles. Richard Brauer étudie un cas très abstrait, celui des représentations sur un espace vectoriel construit à l'aide d'un corps fini.
Anneau 
Un exemple célèbre d'anneau disposant aussi d'une structure d'espace vectoriel est celui des polynômes à coefficients dans un corps. Cet espace vectoriel, de dimension infinie, est largement utilisé en algèbre linéaire, à travers par exemple le polynôme minimal ou caractéristique. Le morphisme canonique entre les polynômes et les applications linéaires d'un espace vectoriel est à l'origine d'une structure d'algèbre qui est un anneau, si la multiplication externe est oubliée.
Cette méthode permet d'élucider la structure de certains anneaux. Tout anneau est un espace vectoriel sur ceux de ses sous-anneaux qui sont des corps. L'espace vectoriel ressemble à la structure développée par Grassman. Cette remarque est utilisée au début du , en particulier par Emil Artin et Emmy Noether, pour élucider cette structure dans le cas des anneaux artiniens et noethériens, qui sont des copies de sous-algèbres sur un espace vectoriel construit sur sous-anneau qui s'avère être un corps.
Un exemple d'application est celui des figures constructible à la règle et au compas. Ces points forment un corps disposant d'une structure d'espace vectoriel sur les nombres rationnels. Il est de dimension infinie et, pour chaque point, le plus petit sous-corps le contenant est de dimension finie égale à une puissance de 2. Un tel sous-corps est appelé une tour d'extensions quadratiques. Cette propriété de ces espaces vectoriels permet de résoudre d'antiques conjectures comme la duplication du cube, la trisection de l'angle ou la construction d'un polygone régulier.
L'exemple historique de la théorie est celui de la résolution d'une équation polynomiale. Le théorème d'Abel donne une condition nécessaire et suffisante de résolution par radicaux. Les espaces vectoriels utilisés ont pour éléments ceux du plus petit corps L contenant tous les coefficients du polynôme ainsi que ses racines et le corps sous-jacent est un sous-corps K du premier contenant tous les coefficients. Le groupe de Galois est composé des automorphismes du corps L qui laissent invariant le corps K. Ces automorphismes sont en nombre fini et sont des automorphismes du K-espace vectoriel L. L'élément clé de la démonstration montre que l'équation est résoluble seulement si ces automorphismes sont diagonalisables.
L'algèbre générale, ou algèbre abstraite, est la branche des mathématiques qui porte principalement sur l'étude des structures algébriques et de leurs relations. L'appellation algèbre générale s'oppose à celle d'algèbre élémentaire ; cette dernière enseigne le calcul algébrique, c'est-à-dire les règles de manipulation des formules et des expressions algébriques.
Histoire 
Comme dans d'autres parties des mathématiques, des problèmes et des exemples concrets ont joué un rôle important dans le développement de l'algèbre abstraite. Jusqu'à la fin du , beaucoup - ou plus - de ces problèmes étaient en quelque sorte liés à la théorie des équations algébriques. Les principaux thèmes sont les suivants:
 Résolution de systèmes d'équations linéaires, ce qui a conduit à l'algèbre linéaire
 Tentatives de trouver des formules aux solutions d'équations polynomiales générales de degré supérieur qui ont abouti à la découverte de groupes comme des manifestations abstraites de symétrie
 Études arithmétiques des formes de degré quadratique supérieur et des équations diophantiennes, qui ont produit directement les notions d'un anneau et idéal.
Algèbre moderne 
La fin du  et le début du  a connu un énorme changement dans la méthodologie des mathématiques. L'algèbre abstraite a émergé autour du début du , sous le nom d'algèbre moderne. Son étude faisait partie de l'entraînement pour plus de rigueur intellectuelle en mathématiques. Les définitions officielles de certaines structures algébriques ont émergé au .
Applications 
En raison de sa généralité, l'algèbre abstraite est utilisée dans de nombreux domaines des mathématiques et de la science. Par exemple, la topologie algébrique utilise des objets algébriques pour son étude. La théorie algébrique des nombres étudie divers anneaux numériques qui généralisent l'ensemble des entiers. En utilisant la théorie des nombres algébriques, Andrew Wiles a prouvé le dernier théorème de Fermat.
Structures algébriques 
 Magma
 Demi-groupe (ou semi-groupe)
 Quasigroupe
 Monoïde
 Groupe
 Anneau
 Module
 Corps
 Corps commutatif
 Espace vectoriel
 Algèbre linéaire
 Algèbre sur un anneau
 Algèbre sur un corps
 Opérade
Étymologie 
Le mot « algorithme » vient du nom du mathématicien Al-Khwârizmî (latinisé au Moyen Âge en ), qui, au  écrivit le premier ouvrage systématique donnant des solutions aux équations linéaires et quadratiques. Le h muet, non justifié par l'étymologie, vient d’une déformation par rapprochement avec le grec  (arithmós). « Algorithme » a donné « algorithmique ». Le synonyme « algorithmie », vieux mot utilisé par exemple par Wronski en 1811, est encore parfois utilisé.
Étude systématique 
Le premier à avoir systématisé des algorithmes est le mathématicien perse Al-Khwârizmî, actif entre 813 et 833. Dans son ouvrage Abrégé du calcul par la restauration et la comparaison, il étudie toutes les équations du second degré et en donne la résolution par des algorithmes généraux. Il utilise des méthodes semblables à celles des Babyloniens, mais se différencie par ses explications systématiques là où les Babyloniens donnaient seulement des exemples.
Le savant andalou Averroès (1126-1198) évoque une méthode de raisonnement où la thèse s’affine étape par étape, itérativement, jusqu’à une certaine convergence et ceci conformément au déroulement d’un algorithme. À la même époque, au , le moine Adelard de Bath introduit le terme latin de , par référence au nom de Al Khuwarizmi. Ce mot donne algorithme en français en 1554.
Au , on pourrait entrevoir une certaine allusion à la méthode algorithmique chez René Descartes dans la méthode générale proposée par le Discours de la méthode (1637), notamment quand, en sa deuxième partie, le mathématicien français propose de . Sans évoquer explicitement les concepts de boucle, d’itération ou de dichotomie, l’approche de Descartes prédispose la logique à accueillir le concept de programme, mot qui naît en français en 1677.
L'époque contemporaine 
L’algorithmique des  a pour fondement mathématique des formalismes, par exemple celui des machines de Turing, qui permettent de définir précisément ce qu'on entend par « étapes », par « précis » et par « non ambigu » et qui donnent un cadre scientifique pour étudier les propriétés des algorithmes. Cependant, suivant le formalisme choisi on obtient des approches algorithmiques différentes pour résoudre un même problème. Par exemple l'algorithmique récursive, l'algorithmique parallèle ou l’informatique quantique donnent lieu à des présentations d'algorithmes différentes de celles de l'algorithmique itérative.
Les informaticiens utilisent fréquemment l’anglicisme implémentation pour désigner la mise en œuvre de l'algorithme dans un langage de programmation. Cette implémentation réalise la transcription des opérations constitutives de l’algorithme et précise la façon dont ces opérations sont invoquées. Cette écriture en langage informatique, est aussi fréquemment désignée par le terme de « codage ». On parle de « code source » pour désigner le texte, constituant le programme, réalisant l’algorithme. Le code est plus ou moins détaillé selon le niveau d’abstraction du langage utilisé, de même qu'une recette de cuisine doit être plus ou moins détaillée selon l’expérience du cuisinier.
Étude formelle 
De nombreux outils formels ou théoriques ont été développés pour décrire les algorithmes, les étudier, exprimer leurs qualités, pouvoir les comparer :
 ainsi, pour décrire les algorithmes, des structures algorithmiques ont été mises en évidence : structures de contrôle et structures de données ;
 pour justifier de la qualité des algorithmes, les notions de correction, de complétude et de terminaison ont été mises en place ;
 enfin, pour comparer les algorithmes, une théorie de la complexité des algorithmes a été définie.
Structures algorithmiques 
Les concepts en œuvre en algorithmique, par exemple selon l'approche de N. Wirth pour les langages les plus répandus (Pascal, C), sont en petit nombre. Ils appartiennent à deux classes :
 les structures de contrôle :
 séquences,
 conditionnelles,
 boucles ;
 les structures de données :
 constantes,
 variables,
 tableaux ;
 structures récursives (listes, arbres, graphes).
Étant donné la garantie qu'un algorithme terminera, la preuve de correction doit apporter l'assurance que si l'algorithme termine en donnant un résultat, alors ce résultat est effectivement une solution au problème posé. Les preuves de correction font habituellement intervenir une spécification logique que doivent vérifier les solutions du problème. La preuve de correction consiste donc à montrer que les résultats de l'algorithme vérifient cette spécification.
Complexité algorithmique 
Les principales notions mathématiques dans le calcul du coût d’un algorithme précis sont les notions de domination (notée O(f(n)), « grand o »), où f est une fonction mathématique de n, variable désignant la quantité d’informations (en bits, en nombre d’enregistrements) manipulée dans l’algorithme. En algorithmique on trouve souvent des complexités du type :
Sans entrer dans les détails mathématiques, le calcul de l’efficacité d’un algorithme (sa complexité algorithmique) consiste en la recherche de deux quantités importantes. La première quantité est l’évolution du nombre d’instructions de base en fonction de la quantité de données à traiter (par exemple, pour un algorithme de tri, il s'agit du nombre de données à trier), que l’on privilégiera sur le temps d'exécution mesuré en secondes (car ce dernier dépend de la machine sur laquelle l'algorithme s'exécute). La seconde quantité estimée est la quantité de mémoire nécessaire pour effectuer les calculs. Baser le calcul de la complexité d’un algorithme sur le temps ou la quantité effective de mémoire qu’un ordinateur particulier prend pour effectuer ledit algorithme ne permet pas de prendre en compte la structure interne de l’algorithme, ni la particularité de l’ordinateur : selon sa charge de travail, la vitesse de son processeur, la vitesse d’accès aux données, l’exécution de l’algorithme (qui peut faire intervenir le hasard) ou son organisation de la mémoire, le temps d’exécution et la quantité de mémoire ne seront pas les mêmes.
Souvent, on examine les performances « au pire », c'est-à-dire dans les configurations telles que le temps d'exécution ou l'espace mémoire est le plus grand. Il existe également un autre aspect de l'évaluation de l'efficacité d'un algorithme : les performances « en moyenne ». Cela suppose d'avoir un modèle de la répartition statistique des données de l'algorithme, tandis que la mise en œuvre des techniques d'analyse implique des méthodes assez fines de combinatoire et d'évaluation asymptotique, utilisant en particulier les séries génératrices et des méthodes avancées d'analyse complexe. L'ensemble de ces méthodes est regroupé sous le nom de combinatoire analytique.
Quelques indications sur l’efficacité des algorithmes et ses biais 
L'efficacité algorithmique n’est souvent connue que de manière asymptotique, c’est-à-dire pour de grandes valeurs du paramètre n. Lorsque ce paramètre est suffisamment petit, un algorithme de complexité asymptotique plus grande peut en pratique être plus efficace. Ainsi, pour trier un tableau de  (c’est un paramètre de petite taille), il est inutile d’utiliser un algorithme évolué comme le tri rapide (l’un des algorithmes de tri asymptotiquement les plus efficaces en moyenne) : l’algorithme de tri le plus simple à écrire sera suffisamment efficace.
Entre deux algorithmes informatiques de complexité identique, on utilisera celui dont l’occupation mémoire est moindre. L’analyse de la complexité algorithmique peut également servir à évaluer l’occupation mémoire d’un algorithme. Enfin, le choix d’un algorithme plutôt qu’un autre doit se faire en fonction des données que l’on s’attend à lui fournir en entrée. Ainsi, le tri rapide, lorsque l’on choisit le premier élément comme pivot, se comporte de façon désastreuse si on l’applique à une liste de valeurs déjà triée. Il n’est donc pas judicieux de l’utiliser si on prévoit que le programme recevra en entrée des listes déjà presque triées ou alors il faudra choisir le pivot aléatoirement.
D'autres paramètres à prendre en compte sont notamment :
 les biais intrinsèques (acceptés ou involontaires) de nombreux algorithmes peuvent tromper les utilisateurs ou systèmes d'intelligence artificielle, de machine learning, de diagnostic informatique, mécanique, médical, de prévision, de prévention, de sondages ou d'aide à la décision (notamment pour les réseaux sociaux, l'éducation [ex : parcoursup ], la médecine, la justice, la police, l'armée, la politique, l'embauche…) prenant mal en compte ou pas du tous ces biais. En 2019, des chercheurs de Télécom ParisTech ont produit un rapport inventoriant les principaux biais connus, et quelques pistes de remédiation
 la localité de l’algorithme. Par exemple pour un système à mémoire virtuelle ayant peu de mémoire vive (par rapport au nombre de données à traiter), le tri rapide sera normalement plus efficace que le tri par tas car le premier ne passe qu’une seule fois sur chaque élément de la mémoire tandis que le second accède à la mémoire de manière discontinue (ce qui augmente le risque de ).
 certains algorithmes (ceux dont l'analyse de complexité est dite amortie), pour certaines exécutions de l’algorithme (cas marginaux), présentent une complexité qui sera très supérieure au cas moyen, mais ceci sera compensé par des exécutions rendues efficaces du même algorithme dans une suite d'invocations de cet algorithme.
 l'Analyse lisse d'algorithme, qui mesure les performances des algorithmes sur les pires cas, mais avec une légère perturbation des instances. Elle explique pourquoi certains algorithmes analysés comme inefficaces autrement, sont en fait efficaces en pratique. L'algorithme du simplexe est un exemple d'un algorithme qui se comporte bien pour l'analyse lisse.
Approches pratiques 
L'algorithmique a développé quelques stratégies pour résoudre les problèmes :
 algorithme glouton : un premier algorithme peut souvent être proposé en étudiant le problème très progressivement : on résout chaque sous-problème localement en espérant que l'ensemble de leurs résultats composera bien une solution du problème global. On parle alors d'algorithme glouton. L'algorithme glouton n'est souvent qu'une première étape dans la rédaction d'un algorithme plus performant ;
 diviser pour régner : pour améliorer les performances des algorithmes, une technique usuelle consiste à diviser les données d'un problème en sous-ensembles de tailles plus petites, jusqu'à obtenir des données que l'algorithme pourra traiter au cas par cas. Une seconde étape dans ces algorithmes consiste à « fusionner » les résultats partiels pour obtenir une solution globale. Ces algorithmes sont souvent associés à la récursivité ;
 recherche exhaustive (ou combinatoire) : une méthode utilisant l'énorme puissance de calcul des ordinateurs consiste à regarder tous les cas possibles. Cela n'est pour autant possible que dans certains cas particuliers (la combinatoire est souvent plus forte que l'énorme puissance des ordinateurs, aussi énorme soit-elle) ;
 décomposition top-down / bottom-up : (décomposition descendante, décomposition remontante) les décompositions top-down consistent à essayer de décomposer le problème en sous-problèmes à résoudre successivement, la décomposition allant jusqu'à des problèmes triviaux faciles à résoudre. L'algorithme global est alors donné par la composée des algorithmes définis au cours de la décomposition. La démarche bottom-up est la démarche inverse, elle consiste à partir d'algorithmes simples, ne résolvant qu'une étape du problème, pour essayer de les composer pour obtenir un algorithme global ;
 pré-traitement / post-traitement : parfois, certains algorithmes comportent une ou deux phases identifiées comme des pré-traitements (à faire avant l'algorithme principal), ou post-traitement (à faire après l'algorithme principal), pour simplifier l'écriture de l'algorithme général ;
 programmation dynamique : elle s'applique lorsque le problème d'optimisation est composé de plusieurs sous-problèmes de même nature, et qu'une solution optimale du problème global s'obtient à partir de solutions optimales des sous-problèmes.
Les heuristiques 
Pour certains problèmes, les algorithmes ont une complexité beaucoup trop grande pour obtenir un résultat en temps raisonnable, même si l’on pouvait utiliser une puissance de calcul phénoménale. On est donc amené à rechercher la solution de façon non systématique (algorithme de Las Vegas) ou de se contenter d'une solution la plus proche possible d’une solution optimale en procédant par essais successifs (algorithme de Monte-Carlo). Puisque toutes les combinaisons ne peuvent être essayées, certains choix stratégiques doivent être faits. Ces choix, généralement très dépendants du problème traité, constituent ce qu’on appelle une heuristique. Le but d’une heuristique n'est donc pas d'essayer toutes les combinaisons possibles, mais de trouver une solution en un temps raisonnable et par un autre moyen, par exemple en procédant à des tirages aléatoires. La solution peut être exacte (Las Vegas) ou approchée (Monte-Carlo). Les algorithmes d'Atlantic City quant à eux donnent de façon probablement efficace une réponse probablement juste (disons avec une chance sur cent millions de se tromper) à la question posée.
C’est ainsi que les programmes de jeu d’échecs ou de jeu de go (pour ne citer que ceux-là) font appel de manière très fréquente à des heuristiques qui modélisent l’expérience d’un joueur. Certains logiciels antivirus se basent également sur des heuristiques pour reconnaître des virus informatiques non répertoriés dans leur base, en s’appuyant sur des ressemblances avec des virus connus, c'est un exemple d'algorithme d'Atlantic City. De même le problème SAT qui est l'archétype du problème NP-complet donc très difficile est résolu de façon pratique et efficace par la mise au point d'heuristiques.
Exemples d’algorithmes, de problèmes, d'applications ou domaines d'application 
Il existe un certain nombre d’algorithmes classiques, utilisés pour résoudre des problèmes ou plus simplement pour illustrer des méthodes de programmation. On se référera aux articles suivants pour de plus amples détails (voir aussi liste des algorithmes) :
 algorithmes ou problèmes classiques (du plus simple ou plus complexe) :
 échange, ou comment échanger les valeurs de deux variables : problème classique illustrant la notion de variable informatique (voir aussi Structure de données),
 algorithmes de recherche, ou comment retrouver une information dans un ensemble structuré ou non (par exemple Recherche dichotomique),
 algorithme de tri, ou comment trier un ensemble de nombres le plus rapidement possible ou en utilisant le moins de ressources possible,
 problème du voyageur de commerce, problème du sac à dos, problème SAT et autres algorithmes ou approximations de solutions pour les problèmes combinatoires difficiles (dit NP-complets) ;
 algorithmes ou problèmes illustrant la programmation récursive (voir aussi algorithme récursif) :
tours de Hanoï,
 huit dames, placer huit dames sur un échiquier sans qu’elles puissent se prendre entre elles,
 suite de Conway,
 algorithme de dessins récursifs (fractale) pour le Tapis de Sierpiński, la Courbe du dragon, le Flocon de Koch… ;
 algorithmes dans le domaine des mathématiques :
 calcul de la factorielle d'un nombre, de la Fonction d'Ackermann ou de la suite de Fibonacci,
 algorithme du simplexe, qui minimise une fonction linéaire de variables réelles soumises à des contraintes linéaires,
 fraction continue d'un nombre quadratique, permettant d'extraire une racine carrée, cas particulier de la méthode de Newton,
 dans le domaine de l'algèbre : l'algorithme d'unification, le calcul d'une base de Gröbner d'un idéal de polynôme et plus généralement presque toutes les méthodes de calcul symbolique,
 en théorie des graphes qui donne lieu à de nombreux algorithmes,
 test de primalité ;
 algorithmes pour et dans le domaine de l'informatique :
 cryptologie et compression de données,
 informatique musicale,
 algorithme génétique en informatique décisionnelle,
 analyse et compilation des langages formels (voir Compilateur et Interprète (informatique)),
 allocation de mémoire (ramasse-miettes).
Pouvoir exécutif 
Les élections présidentielles se déroulent en un ou deux tours. Si aucun candidat ne récolte plus de 45 % des votes, alors un deuxième tour est organisé. Seuls les deux candidats qui ont remporté le plus de votes participent au deuxième tour (2003). Historiquement, le pays est marqué par le bipartisme entre le Parti justicialiste (ou péroniste), qui fut cependant interdit de 1955 aux élections de 1973, puis à nouveau réprimé après le coup d'Etat de mars 1976, et le parti radical (Union Civique Radicale, UCR) et l'élection se fait normalement dès le premier tour.
Histoire 
L'année 1890 est considérée comme un tournant dans l'histoire politique de l'Argentine. C'est l'année d'un important soulèvement populaire par suite d'une crise économique qui avait accentuée la misère des classes populaires et appauvrit les classes moyennes. C'est aussi l'apparition de la dite « génération de 1890 » comprenant Leandro N. Alem (futur fondateur de l'Union civique radicale), Lisandro de la Torre (futur fondateur du Parti démocrate progressiste) et Juan B. Justo (futur fondateur du Parti socialiste). Cette nouvelle génération d'hommes politiques favorise une forme d'union des classes populaires et des classes moyennes, sous la direction de ces dernières, contre le pouvoir oligarchique des propriétaires fonciers, des grands commerçants et des banquiers. L'Union civique radicale — qui passe, après le suicide d'Alem, sous la direction d'Hipólito Yrigoyen — devient l'expression principale des classes moyennes et, dans une moindre mesure, populaires. Sa tactique allie, à partir de 1892, un dosage réfléchi entre le recours à la voie électorale légale et l'adoption de la voie insurrectionnelle.