Introduction
Le tri est une opération essentielle en informatique qui consiste à ranger les éléments dans un ordre précis, tel que l'ordre numérique ou alphabétique. Différents algorithmes de tri ont été développés, chacun avec des indicateurs de temps et d'efficacité. Le tri temporel linéaire est un sous-ensemble d'algorithmes de tri présentant un avantage significatif : ils peuvent trier un ensemble donné d'éléments en temps linéaire, le temps d'exécution augmente linéairement avec la taille d'entrée.
L’algorithme de tri temporel linéaire le plus connu est le tri décroissant. Le tri informatique est particulièrement efficace lorsque la plage d’éléments d’entrée est connue et relativement petite. Cela élimine le besoin de comparer les éléments, la principale opération fastidieuse dans de nombreux autres algorithmes de tri. En utilisant la connaissance du domaine d'entrée, le tri informatique atteint une complexité temporelle linéaire. Un tri numérique analyse d'abord le tableau d'entrée pour déterminer le nombre de chaque élément. Il utilise ensuite ces nombres pour calculer les positions correctes des éléments dans le tableau des résultats ordonnés. L'algorithme comprend les étapes suivantes :
- Pour déterminer la plage, identifiez les valeurs minimale et maximale du tableau d'entrée.
- Créez une feuille de calcul initialisée avec la taille de la plage et les zéros.
- Parcourez le tableau d'entrée et incrémentez chaque élément trouvé.
- Modifiez la feuille de calcul en calculant le total cumulé pour obtenir les positions correctes pour chaque élément.
- Créez un tableau de sortie de la même taille que le tableau d'entrée.
- Déplacez à nouveau le tableau d'entrée, en plaçant chaque élément dans la position correcte dans le tableau de sortie en fonction de la feuille de calcul.
- La table de résultats contient désormais des éléments triés.
Le principal avantage du tri décroissant est qu’il atteint une complexité temporelle linéaire de O(n), ce qui le rend très efficace pour les grandes tailles d’entrée. Cependant, son applicabilité est limitée aux scénarios dans lesquels le choix des éléments d’entrée est connu à l’avance et relativement restreint.
Il est important de noter que d’autres algorithmes de tri, tels que le tri rapide ou la fusion, ont généralement une complexité temporelle de O(n log n), ce qui est considéré comme efficace pour de nombreuses applications pratiques. Les algorithmes de tri temporel linéaire, tels que le tri numérique, offrent une alternative lorsque certaines contraintes ou propriétés de l'entrée permettent d'utiliser une complexité temporelle linéaire.
Histoire
Les algorithmes de tri temporel linéaire ont une riche histoire en informatique. Le développement de l’ordre du temps linéaire remonte au milieu du XXe siècle et les contributions des scientifiques et des mathématiciens ont été significatives. L'un des premiers algorithmes de tri temporel linéaire est le tri par compartiments, proposé par Harold H. Seward en 1954. Un tri par compartiments divise les éléments d'entrée en un nombre fini de compartiments, puis trie chaque compartiment séparément. Cet algorithme a une complexité temporelle linéaire si la distribution des éléments d'entrée est relativement uniforme.
0,2 en fraction
En 1959, Kenneth E. Iverson a introduit un algorithme de base qui permet d'obtenir une complexité temporelle linéaire. Radix trie les éléments par leurs nombres ou signes du moins significatif au plus significatif. Il utilise des algorithmes de tri robustes, tels que le tri numérique ou par compartiment, pour trier les éléments à chaque emplacement de chiffre. Le tri Radix est devenu populaire à l’ère des cartes perforées et des premiers systèmes informatiques. Cependant, l'algorithme de tri temporel linéaire le plus connu est une énumération, introduite par Harold H. Seward et Peter Elias en 1954 et redécouverte plus tard indépendamment par Harold H. « Bobby » Johnson en 1961. Le tri numérique a reçu une attention considérable.
Ceci est particulièrement efficace lorsque la gamme d’éléments d’entrée est connue et relativement petite. L’histoire du tri temporel linéaire s’est poursuivie avec le développement d’autres algorithmes spécialisés. Par exemple, en 1987, Hanan Samet a proposé le tri par arbre de distribution binaire, un algorithme de tri temporel linéaire pour les données multidimensionnelles. Au fil des années, les chercheurs ont continué à étudier et à améliorer les algorithmes de planification linéaire, en se concentrant sur des scénarios et des contraintes spécifiques. Bien que des algorithmes tels que le tri rapide et la fusion soient plus largement utilisés pour leur efficacité dans un plus grand nombre de scénarios, les algorithmes de tri temporel linéaire offrent des alternatives précieuses lorsque certaines circonstances permettent d'exploiter la complexité du temps linéaire. En général, l’histoire du tri temporel linéaire se caractérise par la recherche d’algorithmes efficaces capables de trier de grands ensembles de données en temps linéaire, surmontant ainsi les limites des algorithmes de tri basés sur la comparaison. Les contributions de différents chercheurs ont ouvert la voie au développement et à la compréhension de ces techniques de tri spécialisées.
Types de tri temporel linéaire
Il existe plusieurs algorithmes de tri temporel linéaire différents. Les deux principaux types sont les algorithmes basés sur le nombre et les algorithmes basés sur la base. Voici les algorithmes de tri temporel linéaire les plus courants, classés en fonction des types suivants :
Algorithmes basés sur le comptage
Algorithmes basés sur des bases
Avantages du tri temporel linéaire
Les algorithmes de tri temporel linéaire, tels que le tri numérique, offrent plusieurs avantages dans des scénarios spécifiques.
Inconvénients du tri temporel linéaire
Bien que les algorithmes d’ordonnancement linéaire présentent des avantages, ils présentent également certaines limites et inconvénients :
Lors du choix d'un algorithme de tri, il est essentiel de considérer attentivement les spécificités des données d'entrée et les exigences du problème de tri. Bien que les algorithmes de planification linéaire offrent des avantages dans des scénarios spécifiques, ils ne constituent que parfois le choix le plus approprié ou le plus efficace.
réseau neuronal artificiel
Applications des algorithmes de tri temporel linéaire
Les algorithmes de tri temporel linéaire sont efficaces et ont de nombreuses applications dans divers domaines. Voici quelques applications typiques de l’ordre temporel linéaire :
Implémentation du tri temporel linéaire en C++
Voici un exemple de programme implémentant Counting Sort, qui est un algorithme de tri temporel linéaire :
#include #include using namespace std; void countingSort(vector& arr) { // Find the maximum element in the array int max_val = *max_element(arr.begin(), arr.end()); // Create a count array to store the count of each element vector count(max_val + 1, 0); // Count the occurrences of each element for (int num : arr) { count[num]++; } // Compute the prefix sum for (int i = 1; i <count.size(); i++) { count[i] +="count[i" - 1]; } create a sorted output array vector output(arr.size()); place the elements in order for (int i="arr.size()" 1;>= 0; i--) { output[count[arr[i]] - 1] = arr[i]; count[arr[i]]--; } // Copy the sorted elements back to the original array for (int i = 0; i <arr.size(); i++) { arr[i]="output[i];" } int main() vector arr="{4," 2, 8, 3, 1}; sort the array using counting countingsort(arr); print sorted cout << 'sorted array: '; for (int num : arr) ' endl; return 0; < pre> <p> <strong>Sample Output</strong> </p> <pre> Sorted array: 1 2 2 3 3 4 8 </pre> <p>This indicates that the input array has been sorted in ascending order using the Counting Sort algorithm, resulting in the sorted array [1, 2, 2, 3, 3, 4, 8].</p> <p>In this C++ program, the counting sort function takes a reference to the vector arr and runs the counting sort routine. It finds the table's maximum value to determine the worksheet's size. It then counts each element's occurrence and calculates the worksheet's prefix sum. Then, it creates a result vector and puts the elements in order according to the worksheet. Finally, it copies the sorted elements back into the original array. In the primary function, the example array {4, 2, 2, 8, 3, 3, 1} is sorted by the enumeration sort algorithm and printed as a sorted matrix. Note that the program uses libraries to work with vectors and find the maximum element of an array using the max_element function.</p> <hr></arr.size();></count.size();>
Cela indique que le tableau d'entrée a été trié par ordre croissant à l'aide de l'algorithme Counting Sort, ce qui a donné le tableau trié [1, 2, 2, 3, 3, 4, 8].
Dans ce programme C++, la fonction de tri par comptage prend une référence au vecteur arr et exécute la routine de tri par comptage. Il trouve la valeur maximale du tableau pour déterminer la taille de la feuille de calcul. Il compte ensuite l'occurrence de chaque élément et calcule la somme des préfixes de la feuille de calcul. Ensuite, il crée un vecteur de résultat et met les éléments dans l'ordre selon la feuille de calcul. Enfin, il copie les éléments triés dans le tableau d'origine. Dans la fonction principale, l'exemple de tableau {4, 2, 2, 8, 3, 3, 1} est trié par l'algorithme de tri par énumération et imprimé sous forme de matrice triée. Notez que le programme utilise des bibliothèques pour travailler avec des vecteurs et trouver l'élément maximum d'un tableau à l'aide de la fonction max_element.