Introducció
L'ordenació és una operació essencial en informàtica que consisteix a ordenar els elements en un ordre específic, com ara l'ordre numèric o alfabètic. S'han desenvolupat diversos algorismes d'ordenació, cadascun amb indicadors de temps i eficiència. L'ordenació temporal lineal és un subconjunt d'algorismes d'ordenació amb un avantatge significatiu: poden ordenar un conjunt determinat d'elements en temps lineal, el temps d'execució augmenta linealment amb la mida d'entrada.
L'algorisme d'ordenació temporal lineal més conegut és l'ordenació descendent. L'ordenació computacional és particularment eficient quan el rang d'elements d'entrada és conegut i relativament petit. Això elimina la necessitat de comparar elements, la principal operació que consumeix temps en molts altres algorismes d'ordenació. Utilitzant el coneixement del domini d'entrada, l'ordenació computacional aconsegueix una complexitat temporal lineal. Una ordenació numèrica explora primer la matriu d'entrada per determinar el recompte de cada element. A continuació, utilitza aquests números per calcular les posicions correctes dels elements a la taula de resultats ordenada. L'algorisme consta dels passos següents:
- Per determinar l'interval, identifiqueu els valors mínims i màxims de la matriu d'entrada.
- Creeu un full de treball inicialitzat amb la mida de l'interval i els zeros.
- Itereu sobre la matriu d'entrada i incrementeu cada element trobat.
- Modifiqueu el full de treball calculant el total acumulat per obtenir les posicions correctes per a cada element.
- Creeu una matriu de sortida de la mateixa mida que la matriu d'entrada.
- Torneu a moure la matriu d'entrada, col·locant cada element a la posició correcta a la matriu de sortida segons el full de treball.
- La taula de resultats ara conté elements ordenats.
El principal avantatge de l'ordenació descendent és que aconsegueix una complexitat temporal lineal de O(n), cosa que la fa molt eficient per a grans mides d'entrada. No obstant això, la seva aplicabilitat es limita a escenaris on l'elecció dels elements d'entrada és coneguda per endavant i relativament petita.
És important tenir en compte que altres algorismes d'ordenació, com ara quicksort o merge, solen tenir una complexitat temporal de O(n log n), que es considera eficient per a moltes aplicacions pràctiques. Els algorismes d'ordenació temporal lineal, com ara l'ordenació numèrica, ofereixen una alternativa quan determinades restriccions o propietats de l'entrada permeten utilitzar la complexitat temporal lineal.
Història
Els algorismes d'ordenació temporal lineal tenen una rica història en informàtica. El desenvolupament de l'ordre temporal lineal es remunta a mitjans del segle XX, i les contribucions de científics i matemàtics van ser importants. Un dels primers algorismes d'ordenació lineal de temps és l'ordenació de cubs, proposat per Harold H. Seward el 1954. Una classificació de cubs divideix els elements d'entrada en un nombre finit de cubs i després ordena cada cub per separat. Aquest algorisme té una complexitat temporal lineal si la distribució dels elements d'entrada és relativament uniforme.
El 1959, Kenneth E. Iverson va introduir un algorisme de radix que aconsegueix una complexitat temporal lineal. Radix ordena els elements segons els seus nombres o signes de menys significatiu a més significatiu. Utilitza algorismes d'ordenació robustos, com ara l'ordenació numèrica o de cub, per ordenar els elements a la ubicació de cada dígit. La classificació Radix es va fer popular a l'era de les targetes perforades i els primers sistemes informàtics. No obstant això, l'algorisme d'ordenació temporal lineal més conegut és una enumeració, introduïda per Harold H. Seward i Peter Elias el 1954 i posteriorment redescoberta independentment per Harold H. 'Bobby' Johnson el 1961. L'ordenació numèrica ha rebut una atenció considerable.
Això és especialment eficaç quan el rang d'elements d'entrada és conegut i relativament petit. La història de l'ordenació temporal lineal va continuar amb el desenvolupament d'altres algorismes especialitzats. Per exemple, l'any 1987, Hanan Samet va proposar l'ordenació d'arbres de distribució binària, un algorisme d'ordenació temporal lineal per a dades multidimensionals. Al llarg dels anys, els investigadors han continuat estudiant i millorant els algorismes de programació lineal, centrant-se en escenaris i limitacions específics. Tot i que els algorismes com ara quicksort i merge són més utilitzats per la seva eficiència en més escenaris, els algorismes d'ordenació en temps lineal ofereixen alternatives valuoses quan determinades circumstàncies permeten explotar la complexitat del temps lineal. En general, la història de l'ordenació temporal lineal es caracteritza per la recerca d'algorismes eficients que puguin ordenar grans conjunts de dades en temps lineal, superant les limitacions dels algorismes d'ordenació basats en comparacions. Les contribucions de diversos investigadors van obrir el camí per desenvolupar i comprendre aquestes tècniques de classificació especialitzades.
Tipus d'ordenació temporal lineal
Hi ha diversos algorismes d'ordenació temporal lineal diferents. Els dos tipus principals són algorismes basats en el recompte i algorismes basats en radix. Aquests són els algorismes d'ordenació temporal lineal més comuns, classificats segons els tipus següents:
Algorismes basats en el recompte
Algorismes basats en radis
Avantatges de l'ordenació temporal lineal
Els algorismes d'ordenació temporal lineal, com ara l'ordenació numèrica, ofereixen diversos avantatges en escenaris específics.
Inconvenients de l'ordenació temporal lineal
Tot i que els algorismes de programació lineal tenen els seus avantatges, també tenen certes limitacions i desavantatges:
A l'hora d'escollir un algorisme d'ordenació, és essencial tenir en compte les especificitats de les dades d'entrada i els requisits del problema d'ordenació. Tot i que els algorismes de programació lineal ofereixen avantatges en escenaris específics, només de vegades són l'opció més adequada o eficient.
llista de matrius d'ordenació de java
Aplicacions dels algorismes d'ordenació temporal lineal
Els algorismes d'ordenació temporal lineal són eficients i tenen moltes aplicacions en diversos camps. Aquí hi ha algunes aplicacions típiques de l'ordre temporal lineal:
Implementació de l'ordenació temporal lineal en C++
Aquí teniu un exemple d'un programa que implementa Counting Sort, que és un algorisme d'ordenació temporal lineal:
#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();>
Això indica que la matriu d'entrada s'ha ordenat en ordre ascendent mitjançant l'algorisme de Counting Sort, donant lloc a la matriu ordenada [1, 2, 2, 3, 3, 4, 8].
En aquest programa C++, la funció d'ordenació de recompte pren una referència al vector arr i executa la rutina d'ordenació de recompte. Troba el valor màxim de la taula per determinar la mida del full de treball. A continuació, compta l'aparició de cada element i calcula la suma del prefix del full de treball. Aleshores, crea un vector de resultats i posa els elements en ordre segons el full de treball. Finalment, torna a copiar els elements ordenats a la matriu original. A la funció principal, la matriu d'exemple {4, 2, 2, 8, 3, 3, 1} s'ordena mitjançant l'algorisme d'ordenació d'enumeració i s'imprimeix com una matriu ordenada. Tingueu en compte que el programa utilitza biblioteques per treballar amb vectors i trobar l'element màxim d'una matriu mitjançant la funció max_element.