giriiş
Sıralama, bilgisayar bilimlerinde öğelerin sayısal veya alfabetik sıra gibi belirli bir sıraya göre düzenlenmesini içeren önemli bir işlemdir. Her biri zaman ve verimlilik göstergelerine sahip çeşitli sıralama algoritmaları geliştirilmiştir. Doğrusal zamanlı sıralama, sıralama algoritmalarının önemli bir avantajı olan bir alt kümesidir: belirli bir öğe kümesini doğrusal zamanda sıralayabilirler, çalışma süresi girdi boyutuyla birlikte doğrusal olarak artar.
En iyi bilinen doğrusal zamanlı sıralama algoritması azalan sıralamadır. Hesaplamalı sıralama, girdi öğelerinin aralığı bilindiğinde ve nispeten küçük olduğunda özellikle etkilidir. Bu, diğer birçok sıralama algoritmasında en çok zaman alan işlem olan öğeleri karşılaştırma ihtiyacını ortadan kaldırır. Giriş alanı bilgisini kullanan hesaplamalı sıralama, doğrusal zaman karmaşıklığına ulaşır. Sayısal sıralama öncelikle her bir öğenin sayısını belirlemek için giriş dizisini tarar. Daha sonra sıralı sonuç tablosundaki öğelerin doğru konumlarını hesaplamak için bu sayıları kullanır. Algoritma aşağıdaki adımlardan oluşur:
- Aralığı belirlemek için giriş dizisinin minimum ve maksimum değerlerini tanımlayın.
- Aralık boyutu ve sıfırlarla başlatılan bir çalışma sayfası oluşturun.
- Giriş dizisini yineleyin ve bulunan her öğeyi artırın.
- Her öğe için doğru konumları elde etmek amacıyla kümülatif toplamı hesaplayarak çalışma sayfasını değiştirin.
- Giriş dizisiyle aynı boyutta bir çıkış dizisi oluşturun.
- Giriş dizisini yeniden taşıyın ve her öğeyi çalışma sayfasına göre çıkış dizisinde doğru konuma yerleştirin.
- Sonuç tablosu artık sıralanmış öğeler içeriyor.
Azalan sıralamanın ana avantajı, O(n) doğrusal zaman karmaşıklığına ulaşmasıdır, bu da onu büyük girdi boyutları için çok verimli kılar. Ancak uygulanabilirliği, girdi elemanlarının seçiminin önceden bilindiği ve nispeten küçük olduğu senaryolarla sınırlıdır.
okulu kim yaptı
Hızlı sıralama veya birleştirme gibi diğer sıralama algoritmalarının tipik olarak birçok pratik uygulama için verimli olduğu düşünülen O(n log n) zaman karmaşıklığına sahip olduğuna dikkat etmek önemlidir. Sayısal sıralama gibi doğrusal zaman sıralama algoritmaları, girdinin belirli kısıtlamaları veya özellikleri doğrusal zaman karmaşıklığının kullanılmasına izin verdiğinde bir alternatif sağlar.
Tarih
Doğrusal zaman sıralama algoritmalarının bilgisayar biliminde zengin bir geçmişi vardır. Doğrusal zaman düzeninin gelişimi 20. yüzyılın ortalarına kadar izlenebilmektedir ve bilim adamlarının ve matematikçilerin katkıları önemli olmuştur. En eski doğrusal zaman sıralama algoritmalarından biri, 1954'te Harold H. Seward tarafından önerilen kova sıralamasıdır. Kova sıralaması, girdi elemanlarını sınırlı sayıda bölüme ayırır ve ardından her bir bölümü ayrı ayrı sıralar. Giriş elemanlarının dağılımı nispeten tekdüze ise bu algoritma doğrusal zaman karmaşıklığına sahiptir.
1959'da Kenneth E. Iverson doğrusal zaman karmaşıklığına ulaşan bir sayı tabanı algoritması tanıttı. Radix, öğeleri sayılarına veya işaretlerine göre en az önemliden en önemliye doğru sıralar. Öğeleri her basamak konumunda sıralamak için sayısal veya grup sıralaması gibi güçlü sıralama algoritmaları kullanır. Radix sıralaması, delikli kartlar ve ilk bilgisayar sistemleri çağında popüler hale geldi. Bununla birlikte, en iyi bilinen doğrusal zaman sıralama algoritması, 1954'te Harold H. Seward ve Peter Elias tarafından tanıtılan ve daha sonra 1961'de Harold H. 'Bobby' Johnson tarafından bağımsız olarak yeniden keşfedilen bir numaralandırmadır. Sayısal sıralama büyük ilgi görmüştür.
Bu, özellikle girdi öğelerinin aralığı bilindiğinde ve nispeten küçük olduğunda etkilidir. Doğrusal zaman sıralamasının tarihi, diğer özel algoritmaların geliştirilmesiyle devam etti. Örneğin, 1987'de Hanan Samet, çok boyutlu veriler için doğrusal bir zaman sıralama algoritması olan ikili dağıtım ağacı sıralamasını önerdi. Yıllar boyunca araştırmacılar, belirli senaryolara ve kısıtlamalara odaklanarak doğrusal planlama algoritmalarını incelemeye ve geliştirmeye devam etti. Hızlı sıralama ve birleştirme gibi algoritmalar, daha fazla senaryoda verimlilikleri nedeniyle daha yaygın olarak kullanılsa da, doğrusal zamanlı sıralama algoritmaları, belirli koşullar doğrusal zaman karmaşıklığının kullanılmasına izin verdiğinde değerli alternatifler sağlar. Genel olarak doğrusal zamanlı sıralamanın geçmişi, büyük veri kümelerini doğrusal zamanda sıralayabilen ve karşılaştırmaya dayalı sıralama algoritmalarının sınırlamalarının üstesinden gelebilen etkili algoritmaların aranmasıyla karakterize edilir. Çeşitli araştırmacıların katkıları, bu özel ayıklama tekniklerinin geliştirilmesinin ve anlaşılmasının yolunu açtı.
Doğrusal Zaman Sıralama Türleri
Birkaç farklı doğrusal zaman sıralama algoritması vardır. İki ana tür, sayım tabanlı algoritmalar ve sayı tabanı tabanlı algoritmalardır. Aşağıdaki türlere göre sınıflandırılmış en yaygın doğrusal zaman sıralama algoritmaları şunlardır:
Saymaya Dayalı Algoritmalar
Radix Tabanlı Algoritmalar
Doğrusal zamanlı sıralamanın avantajları
Sayısal sıralama gibi doğrusal zamanlı sıralama algoritmaları, belirli senaryolarda çeşitli avantajlar sunar.
Doğrusal zamanlı sıralamanın dezavantajları
Doğrusal planlama algoritmalarının avantajları olmasına rağmen bazı sınırlamaları ve dezavantajları da vardır:
dize jsonobject
Bir sıralama algoritması seçerken, girdi verilerinin özelliklerini ve sıralama probleminin gereksinimlerini dikkatlice dikkate almak önemlidir. Doğrusal planlama algoritmaları belirli senaryolarda avantajlar sunarken, yalnızca bazen en uygun veya verimli seçimdir.
Doğrusal zaman sıralama algoritmalarının uygulamaları
Doğrusal zaman sıralama algoritmaları etkilidir ve çeşitli alanlarda birçok uygulamaya sahiptir. Doğrusal zaman sırasının bazı tipik uygulamaları şunlardır:
Doğrusal Zamanlı Sıralamanın C++'da Uygulanması
Doğrusal bir zaman sıralama algoritması olan Sayarak Sıralama'yı uygulayan bir program örneğini burada bulabilirsiniz:
internet tarayıcı ayarları
#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();>
Bu, giriş dizisinin Sayarak Sıralama algoritması kullanılarak artan düzende sıralandığını ve bunun sonucunda sıralanan dizi [1, 2, 2, 3, 3, 4, 8] olduğunu gösterir.
Bu C++ programında, sayma sıralama işlevi vektör dizisine bir başvuru alır ve sayma sıralama yordamını çalıştırır. Çalışma sayfasının boyutunu belirlemek için tablonun maksimum değerini bulur. Daha sonra her bir öğenin oluşumunu sayar ve çalışma sayfasının önek toplamını hesaplar. Daha sonra bir sonuç vektörü oluşturur ve elemanları çalışma sayfasına göre sıralar. Son olarak sıralanan öğeleri orijinal diziye geri kopyalar. Birincil işlevde, örnek dizi {4, 2, 2, 8, 3, 3, 1}, numaralandırma sıralama algoritmasına göre sıralanır ve sıralanmış bir matris olarak yazdırılır. Programın vektörlerle çalışmak ve max_element işlevini kullanarak bir dizinin maksimum öğesini bulmak için kitaplıkları kullandığını unutmayın.