Home About us Products Services Contact us Bookmark
:: wikimiki.org ::
Tri Par Tas

Tri par tas

Le tri par tas est un algorithme de tri sur place d'un tableau asymptotiquement optimal.

Principe

L'idée qui sous-tend cet algorithme consiste à voir le tableau comme un tas, c'est-à-dire un arbre binaire vérifiant les propriétés suivantes :
- la différence maximale de profondeur entre deux feuilles est de 1 (i.e. toutes les feuilles se trouvent sur la dernière ou sur l'avant-dernière ligne) ;
- les feuilles de profondeur maximale sont « tassées » sur la gauche. Un tas peut facilement se représenter par un tableau, en posant que les deux fils de l'élément d'indice n sont les éléments d'indices 2n+1 et 2n+2. En d'autres termes, les nœuds de l'arbre sont placés dans le tableau ligne par ligne, chaque ligne étant décrite de gauche à droite. Notons qu'avec cette représentation, les sous-tas (enracinés n'importe où, et finissant n'importe où) sont des sous-tableaux contigus. Toutes les procédures travaillant sur cette représentation des tas s'appliquent donc naturellement aux sous-tas. L'opération de base du tri par tas est le tamisage, ou percolation, d'un élément, supposé le seul « mal placé » dans un arbre qui est presque un tas. Plus précisément, considérons un arbre A = A[0] dont les deux sous-arbres (A[1] et A[2]) sont des tas, tandis que la racine est éventuellement plus petite que ses fils. L'opération de tamisage consiste à échanger la racine avec le plus grand de ses fils, et ainsi de suite récursivement jusqu'à ce qu'elle soit à sa place. Pour construire un tas à partir d'un arbre quelconque, on tamise les racines de chaque sous-tas, de bas en haut (par taille croissante) et de droite à gauche. Pour trier un tableau à partir de ces opérations, on commence par le transformer en tas. On échange la racine avec le dernier élément du tableau, et restreint le tas en ne touchant plus au dernier élément, c'est-à-dire à l'ancienne racine. On tamise la racine dans le nouveau tas, et on répète l'opération sur le tas restreint jusqu'à l'avoir vidé et remplacé par un tableau trié.

Pseudo-code

On fait les hypothèses suivantes : arbre est un tableau et arbre[i] désigne le i-ème élément de ce tableau. fonction tamiser(arbre,longueur,noeud): debut i:=noeud tant que (arbre[i]arbre[2i+1]: echanger arbre[2i] et arbre[i] i:=2i sinon echanger arbre[2i+1] et arbre[i] echanger arbre[i] et arbre[2i] i:=2i+1 fin si fin tant que fin fonction fonction tri_par_tas(arbre): debut pour i:=longueur(arbre)/2 a 2 debut tamiser(arbre,longueur(arbre),i) fin pour # maintenant l'arbre est partiellement trié dans l'ordre décroissant pour i:=longueur(arbre) a 2 debut echanger arbre[i] et arbre[1] # le premier élément romps l'ordre # on restaure l'ordre par la fonction tamiser tamiser(arbre,i-1,1) fin pour fin fonction À la fin de la fonction tri_par_tas le tableau arbre est trié suivant l'ordre croissant. Il suffit d'inverser les opérateurs de comparaison pour obtenir un tri dans l'ordre décroissant.

Analyse

Cet algorithme permet de trier sur place les éléments d'un tableau en un temps de l'ordre de n \log n dans le pire des cas, où n est le nombre d'éléments à trier. Les principaux atouts de cette méthode sont la faible consommation mémoire et l'efficacité optimale, étant donné qu'on ne fait aucune hypothèse sur la nature des données à trier. Tas ja:ヒープソート

Algorithme de tri

En informatique ou en mathématiques, un algorithme de tri est un algorithme qui permet d'organiser une collection d'objets selon un ordre déterminé. Les objets à trier font donc partie d'un ensemble muni d'une relation d'ordre (de manière générale un ordre total). Les ordres les plus utilisés sont l’ordre numérique et lexicographique (dictionnaire). Il est évident que suivant la relation d'ordre considérée, une même collection d’objet peut donner lieu à divers arrangements, pourtant il est possible de définir un algorithme de tri indépendamment de la fonction d’ordre utilisée. Celui-ci ne fera qu'utiliser une certaine fonction d’ordre correspondante à une relation d’ordre qui doit permettre de comparer tout couple d'éléments de la collection.

Classification

La classification des algorithmes de tri est très importante, car elle permet de choisir le type d’algorithme le plus adapté au problème traité, tout en tenant compte des contraintes imposées par celui-ci. Les principales caractéristiques qui permettent de différencier les algorithmes de tri sont : la complexité algorithmique, les ressources nécessaires et le caractère stable.

Complexité algorithmique


- La complexité algorithmique temporelle dans le pire des cas permet de fixer une borne supérieure du nombre d'opérations qui seront nécessaire à trier un ensemble de n éléments. On utilise pour symboliser cette complexité la notation de Landau : O.
- La complexité algorithmique temporelle en moyenne : c’est le nombre d'opérations élémentaires effectué en moyenne pour trier une collection d’éléments. Elle permet de comparer les algorithmes de tris et donne une bonne idée du temps d'exécution qui sera nécessaire à l’algorithme ; on arrive à l'estimer avec une précision assez importante.
- La complexité algorithmique spatiale (en moyenne ou dans le pire des cas) représente, quant à elle, l’utilisation mémoire que va nécessiter l'algorithme. Celle-ci peut dépendre, comme le temps d'exécution, du nombre de quantités à trier. Dans la plupart des tris, T(n) = O(n2) bien que pour certains algorithmes, T(n) = O(n·log(n)). On peut montrer que la complexité temporelle en moyenne et dans le pire des cas d’un algorithme basé sur une fonction de comparaison ne peut pas être meilleur que n·log(n)). :Le problème du tri consiste, étant donné une suite u = (u1, u2, ..., un) d’éléments d’un ensemble totalement ordonné (par exemple \mathbb), à déterminer une permutation σ de 1, ..., n telle que : y = (uσ(1), uσ(2), ..., uσ(n)) soit triée. L'algorithme doit donc être en mesure de fournir toute les possibilités de permutation des termes de la suite, car il est équivalent de fournir la permutation σ que la suite triée y. Si l’on considère que les comparaisons sont les seules opérations élémentaires, le nombre de permutation de n éléments étant n! (factorielle n) et sachant que l’algorithme différencie deux cas à chaque comparaison, il faut que le nombre d’opérations élémentaires h soit tel que : 2^h \geq n! ainsi h \geq n \cdot \log_2(n) Les tris qui ne demandent que n·log(n) comparaisons en moyenne sont dits optimaux. Pour certains types de données (entiers, chaînes de caractères de taille bornée), il existe cependant des algorithmes plus efficaces au niveau du temps d'exécution, comme le tri comptage ou le tri radix. Ces algorithmes n'utilisent pas la comparaison entre éléments (la borne n·log(n) ne s'applique donc pas pour eux) mais nécessitent des hypothèses sur les objets à trier. Par exemple, le tri comptage et le tri radix s'appliquent à des entiers que l'on sait appartenir à l'ensemble [1, m] avec comme hypothèse supplémentaire pour le tri radix que m soit de la forme 2k.

Caractère en place

Un algorithme est dit en place s'il n'utilise qu'un nombre très limité de variables et qu’il modifie directement le tableau qu’il est en train de trier. Ceci nécessite l’utilisation d'une structure de donnée adaptée (un tableau par exemple). Ce caractère est très important si on ne dispose pas d'une grande quantité de mémoire utilisable.

Caractère stable

Un algorithme est dit stable s'il garde l'ordre relatif des quantités égales pour la relation d'ordre. Exemple, si on considère la suite d’éléments suivante : (4, 1) (3, 1) (3, 7) (5, 6) que l'on tri par rapport à leur première coordonnée (la clé), deux cas sont possibles, quand l’ordre relatif est respecté et quand il ne l'est pas : (3, 1) (3, 7) (4, 1) (5, 6) (ordre relatif maintenu) (3, 7) (3, 1) (4, 1) (5, 6) (ordre relatif changé) Lorsque deux éléments sont égaux
pour la relation d'ordre (c’est-à-dire qu'il ont la même clé), l'algorithme de tri conserve l'ordre dans lequel ces deux éléments se trouvaient avant son exécution. Les algorithmes de tri instables peuvent être retravaillés spécifiquement afin de les rendre stable, cependant cela peut être au dépend de la rapidité et/ou peut nécessiter un espace mémoire supplémentaire.

Exemples d'algorithmes de tri


- Tri à bulles : Algorithme quadratique, T(n) = O(n2), en moyenne et dans le pire des cas, stable et en place ;
- Tri par sélection : Algorithme quadratique, T(n) = O(n2), en moyenne et dans le pire des cas, qui trie sur place ;
- Tri par insertion : Algorithme quadratique, T(n) = O(n2), en moyenne et dans le pire des cas, stable et en place. C'est le plus rapide et le plus utilisé pour un petit nombre de valeurs à trier ;
- Tri rapide (
quick sort) : O(n \log n) en moyenne, mais quadratique au pire cas, en place mais pas stable;
- Tri fusion (
merge sort) : O(n \log n) en moyenne et dans le pire des cas, stable mais pas en place ;
- Tri par tas (
heap sort) : toujours environ deux fois plus lent que le tri rapide, c'est-à-dire aux alentours de O(n \log n), il est donc intéressant de l'utiliser si l'on soupçonne que les données à trier seront souvent des cas quadratiques pour le tri rapide;
- Tri comptage : dans certaines conditions c'est un algorithme linéaire, T(n) = O(n), stable mais nécessite l'utilisation d'une seconde liste de même longueur que la liste à trier ;
- Tri par base : c'est aussi un tri linéaire dans certaines conditions (moins restrictives que pour le tri par comptage), T(n) = O(n), stable mais nécessite aussi l'utilisation d'une seconde liste de même longueur que la liste à trier.

Lien externe


- [http://www.herve.name/algo.php Mémoire de synthèse sur les algorithmes de tri] Tri
-
ja:ソート ko:정렬 알고리즘 th:อัลกอริทึมการเรียง


Catégorie:Algorithme de tri

Article principal


- Algorithme de tri Tri ja:Category:ソート

Premio di Roma

Il Prix de Rome è una borsa di studio istituita dallo stato francese per gli studenti più distinti nel campo delle arti. Ai vincitori era data la possibilità di studiare all'Accademia di Francia a Roma, fondata da Jean Baptiste Colbert nel 1666. Nacque nel 1663 in Francia sotto il regno di Luigi XIV come ricompensa annuale a giovani e promettenti pittori, scultori e architetti che dimostrassero la loro superiorità in una impegnativa competizione ad eliminazione con i propri pari. Le categorie di gara erano pittura, scultura, architettura e incisione all'acquaforte: nel 1803 venne aggiunta anche composizione musicale. Gli studenti spesso gareggiavano svariati anni in fila, soffrendone grandemente in caso di mancata vittoria. Tra gli artisti più famosi a competere nel campo della pittura, senza raggiungere la vittoria o nemmeno una menzione d'onore, possiamo citare Eugène Delacroix, Edouard Manet e Edgard Degas. Jacques Louis David tentò il suicidio dopo aver perso la competizione per tre anni di seguito. Per 300 anni, il francese Gran Prix de Rome di pittura è stato il più alto onore a cui un artista di qualsiasi parte del mondo potesse aspirare, dato l'effetto sull'attenzione della stampa internazionale e il lancio verso la fama e, spesso, lungo la via delle carriere artistiche finanziariamente redditizie che riusciva a dare. L'estenuante competizione per il premio venne abolita nel 1968 ma la borsa di studio è ancora elargita a giovani artisti che l'Accademia ritiene meritevoli di incoraggiamento. Oggi numerosi Paesi offrono i prix de Rome; tra questi il Belgio, il Canada, l'Olanda. Negli Stati Uniti d'America un premio annuale è offerto direttamente dall'Accademia Americana a Roma. categoria:Premi ko:로마대상

jednorki bandyta tapety wygaszacze gry narty w szwajcarii zakady bukmacherskie motorola gry java










































:: RELATED NEWS ::
Clatskanie, Oregon
Clatskanie (IPA: ) is a city located in Columbia County, Oregon. It was named for the Clatskanie River, which empties into the Columbia River within the city limits. As of the 2000 census, the city had a total population of 1,528.

History

According to some reports, the original name of this town when it was
Columbia City, Oregon
Columbia City is a city located in Columbia County, Oregon. It was named for the Columbia River, on whose banks it sits. As of the 2000 census, the city had a total population of 1,571.

History

Columbia City was founded in 1867 by Jacob and Joseph Caples, with asperations of becoming the terminus for Ben Holliday's Willamette Valley railr
Prescott, Oregon
Prescott is a city located in Columbia County, Oregon. It was named in 1905 for the owner of the local sawmill. As of the 2000 census, the city had a total population of 72.

Geography

2000Prescott is located at 46°2'57" North, 122°53'15" West (46.049272, -122.887608). According to the United States C
Rainier, Oregon
Rainier is a city located in Columbia County, Oregon. As of the 2000 census, the city had a total population of 1,687.

History

Rainier was founded on the banks of the Columbia River in 1851 by Charles E. Fox. The name was taken from Mount Rainier in Washington, which can be seen from the t
Scappoose, Oregon
Scappoose is a city located in Columbia County, Oregon. It was named for a nearby stream, which drains the southern part of the county. The name "Scappoose" is of Native American origin, and is said to mean "gravelly plain". As of the 2000 census, the city had a total population of 4,976.

Geography

2000Scappoose is located at 45°45
St. Helens, Oregon
St. Helens is the county seat of Columbia County, Oregon. It was founded by Captain H. M. Knighton, a native of New England in 1845 as Plymouth. The name of the community was changed to St. Helens in the later part of 1850, after the view of Mount St. Helens across the Columbia River in Washington. As of the
Vernonia, Oregon
in Vernonia]] Vernonia is a city located in Columbia County, Oregon. The city is located on the Nehalem River, in a valley on the western side of the Coast Ranges. It is located the heart of the of the most important timber-producing areas of the state, and logging has played an important role in the hi
Marcus Giamatti
Marcus Giamatti (born October 3, 1961 in New Haven, Connecticut) is an American actor. He is the son of former Yale University president and Major League Baseball commissioner A. Bartlett Giamatti and older brother of actor
Paul Giamatti
Paul Edward Valentine Giamatti (born June 6, 1967) is an American actor.

Early life

Gimatti was born in New York City, New York to A. Bartlett Giamatti, a Yale University professor who later became president of the university and
Bandon, Oregon
Bandon is a city located in Coos County, Oregon, on the south side of the mouth of the Coquille River. It was named by George Bennet, an Irish peer, who settled nearby in 1873 and named the town after Bandon, Ireland, his native home. As of the 2000 census, the city had a total population of 2,833.


All Rights Reserved 2005 wikimiki.org