logo

Doğrusal Zaman Sıralaması

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:

  1. Aralığı belirlemek için giriş dizisinin minimum ve maksimum değerlerini tanımlayın.
  2. Aralık boyutu ve sıfırlarla başlatılan bir çalışma sayfası oluşturun.
  3. Giriş dizisini yineleyin ve bulunan her öğeyi artırın.
  4. Her öğe için doğru konumları elde etmek amacıyla kümülatif toplamı hesaplayarak çalışma sayfasını değiştirin.
  5. Giriş dizisiyle aynı boyutta bir çıkış dizisi oluşturun.
  6. Giriş dizisini yeniden taşıyın ve her öğeyi çalışma sayfasına göre çıkış dizisinde doğru konuma yerleştirin.
  7. Sonuç tablosu artık sıralanmış öğeler içeriyor.
Doğrusal Zaman Sıralaması

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

    Saymaya Dayalı Sıralama:Saymaya Dayalı, karşılaştırmalı olmayan bir sıralama algoritmasıdır. Giriş dizisindeki her belirli öğenin oluşumunu sayar ve bu bilgiyi, sıralanmış çıktı dizisindeki her öğenin doğru konumunu belirlemek için kullanır. Saymaya Dayalı sıralama, giriş öğelerinin tam sayı olduğunu veya tam sayılara eklenebileceğini varsayar.

Radix Tabanlı Algoritmalar

    Radix'i sırala:Radix Sort, öğeleri sayılarına veya karakterlerine göre sıralayan, karşılaştırmaya dayalı olmayan bir sıralama algoritmasıdır. En az anlamlı sayıdan en anlamlıya kadar öğelerdeki her sayıyı veya işareti sayar. Radikal sıralama, giriş öğelerinin tamsayılar veya dizeler olduğunu varsayar.Kova Sıralaması:Kova Sıralaması, öğeleri aralıklarına veya dağılımlarına göre sabit gruplara bölen bir Radix Sıralaması çeşididir. Her bölüm, farklı bir sıralama algoritması veya yinelemeli olarak grup sıralaması kullanılarak ayrı ayrı sıralanır.MSD (En Önemli Hane) Radix Sıralaması:MSD Taban Sıralaması, öğeleri en önemli değerlerine göre sıralamaya başlayan bir taban sıralama çeşididir. Öğeleri, geçerli sayının değerine göre yinelemeli olarak alt gruplara böler ve tüm sayılar sayılana kadar her alt gruba MSD Taban Sıralaması uygular.LSD (En Az Önemli Hane) Taban Sıralaması:LSD Radix Sort, öğeleri en az önemli olanlarına göre sıralamaya başlayan başka bir varyanttır. Öğeleri her sayıya göre yinelemeli olarak en sağdan en sola doğru sıralayarak sıralanmış bir sonuç üretir. Hem sayım tabanlı hem de kök tabanlı sıralama algoritmaları, girdi öğelerinin aralık veya temsili yapıları (örneğin sayılar veya karakterler) gibi belirli özelliklerinden yararlanarak doğrusal zaman karmaşıklığı elde eder. Ancak bunların uygulanabilirliği girdi verilerinin özelliklerine bağlı olarak değişebilir.

Doğrusal zamanlı sıralamanın avantajları

Sayısal sıralama gibi doğrusal zamanlı sıralama algoritmaları, belirli senaryolarda çeşitli avantajlar sunar.

    Büyük giriş boyutları için verimli:Doğrusal zaman sıralama algoritmalarının zaman karmaşıklığı O(n)'dir; bu, çalışma süresinin girdi boyutuyla doğrusal olarak arttığı anlamına gelir. Bu, onları, tipik olarak O(n log n) zaman karmaşıklığına sahip olan hızlı sıralama veya birleştirme algoritmaları gibi karşılaştırmaya dayalı sıralama algoritmalarıyla karşılaştırıldığında, büyük veri kümeleri için çok verimli kılar.Karşılaştırma işlemi yok:Numaralandırma sıralaması gibi doğrusal zamanlı sıralama algoritmaları, temel karşılaştırmaya dayanmaz. Bunun yerine, girdi öğeleri hakkında kapsamları veya dağılımları gibi belirli nitelikleri veya bilgileri kullanırlar. Bu özellik, karmaşık nesneler veya pahalı karşılaştırma işlemleri gibi karşılaştırma maliyetinin yüksek olduğu durumlarda onları avantajlı hale getirir.Belirli giriş özelliklerine uygunluk:Doğrusal zamanlı sıralama algoritmaları genellikle girdi öğeleriyle ilgili belirli gereksinimlere veya varsayımlara sahiptir. Örneğin, bir sıralama düzenini hesaplamak için girdi öğelerinin aralığını önceden bilmeniz gerekir. Bu koşullar karşılandığında doğrusal zamanlı sıralama algoritmaları, genel sıralama algoritmalarına göre önemli performans avantajları sunabilir.Kararlı sıralama:Sayısal ve taban sıralaması da dahil olmak üzere birçok doğrusal zamanlı sıralama algoritması doğası gereği kararlıdır. Tutarlılık, yinelenen anahtarlara veya değerlere sahip öğelerin sıralanmış çıktıda göreceli sırayı koruması anlamına gelir. Birden fazla özniteliğe sahip nesneleri veya kayıtları sıralarken veya eşit değerdeki öğelerin orijinal sırasının korunması önemli olduğunda bu kritik olabilir.Kullanım kolaylığı:Numaralandırma sıralaması gibi doğrusal zaman sıralama algoritmalarının uygulanması, daha karmaşık karşılaştırmaya dayalı sıralama algoritmalarına kıyasla genellikle nispeten kolaydır. Anlaşılması ve hata ayıklaması daha kolay olabilir, bu da onları basitlik ve netliğin arzu edildiği durumlar için uygun hale getirir.

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
    Girdi gereksinimlerinin kısıtlanması:Doğrusal zaman sıralama algoritmaları genellikle girdi öğeleriyle ilgili belirli gereksinimlere veya varsayımlara sahiptir. Örneğin, bir sıralama düzenini hesaplamak için girdi öğelerinin aralığını önceden bilmeniz gerekir. Bu kısıtlama, bu koşulların karşılandığı durumlara uygulanabilirliğini sınırlar. Aralık genişse veya bilinmiyorsa bellek gereksinimleri kullanışsız hale gelebilir veya mevcut kaynakları aşabilir.Ek alan gereksinimleri:Sayısal sıralama gibi bazı doğrusal zaman sıralama algoritmaları, diğer dizileri veya veri yapılarını depolamak için ek alan gerektirir. Gereken alan genellikle giriş öğelerinin sayısıyla orantılıdır. Özellikle büyük veri kümeleri veya sınırlı bellek kaynaklarıyla uğraşırken, bellek kullanımı bir sorun olduğunda bu bir dezavantaj olabilir.Çok Yönlülük Eksikliği:Doğrusal zaman sıralama algoritmaları, belirli senaryolar veya kısıtlamalar için tasarlanmış özel algoritmalardır. Genel ayıklama görevleri veya farklı girdi dağılımları için daha uygun ve verimli olmaları gerekebilir. Hızlı sıralama veya birleştirme gibi karşılaştırmaya dayalı sıralama algoritmaları daha çok yönlüdür ve daha geniş bir girdi aralığı aralığını işleyebilir.Küçük aralıklar veya seyrek veriler için verimsiz:Numaralandırma gibi doğrusal zamanlı sıralama algoritmaları, giriş öğelerinin aralığı küçük ve yoğun bir şekilde dağıtıldığında en verimlidir. Aralık genişse veya veriler seyrekse (yani yalnızca birkaç farklı değer), algoritma, giriş aralığının boş veya seyrek doldurulmuş bölümlerini işlerken zamandan ve emekten tasarruf sağlayabilir.Belirli veri türleriyle sınırlıdır:Numaralandırma sıralaması gibi doğrusal zamanlı sıralama algoritmaları, öncelikle negatif olmayan tam sayıları veya anahtar/değer nesnelerini sıralamak için tasarlanmıştır. Kayan noktalı sayılar, dizeler veya karmaşık veri yapıları gibi diğer veri türlerini sıralamak için uygun olmayabilirler. Farklı veri türlerini veya özel karşılaştırma işlevlerini işlemek için doğrusal zaman sıralama algoritmalarını uyarlamak, ek ön işleme veya değişiklikler gerektirebilir.

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:

    Küçük Aralıklı Tam Sayıları Sıralama:Sayım sıralaması ve taban sıralaması gibi doğrusal zaman sıralama algoritmaları, değer aralığı şu olduğunda tam sayı dizilerini sıralamak için idealdir. Bu algoritmalar, giriş verileri hakkında varsayımlar yaparak, karşılaştırmaya dayalı sıralamayı atlamalarına olanak tanıyarak doğrusal zaman karmaşıklığı elde eder.Dize sıralaması:Dizileri verimli bir şekilde sıralamak için doğrusal zamanlı sıralama algoritmaları da uygulanabilir. Dizilerin uzunlukları veya karakterleri gibi benzersiz özelliklerini alarak, Radix Sort gibi algoritmalar, dizeleri sıralarken doğrusal zaman karmaşıklığı elde edebilir.Veritabanı İşlevleri:Sıralama, Doğrusal zamanlı sıralama algoritmalarının önemli bir işlevidir ve büyük veri kümelerini belirli sütunlara veya alanlara göre verimli bir şekilde sıralayabilir. Bu, daha hızlı sorgu işleme ve veritabanı işlemlerinde daha iyi performans sağlar.Histogramlar Oluşturma:Histogramlar çeşitli istatistiksel ve veri analizi görevleri için gereklidir. Sayısal sıralama gibi doğrusal zamanlı sıralama algoritmaları, bir veri kümesindeki öğelerin oluşumlarını verimli bir şekilde sayarak histogramlar oluşturabilir.Dış sıralama:Verinin tamamen belleğe sığamadığı senaryolarda harici sıralama tekniği kullanılır. Harici Tabanlı Sıralama veya Harici Sayımlı Sıralama gibi doğrusal zamanlı sıralama algoritmaları, diskte veya diğer harici depolama aygıtlarında depolanan büyük veri kümelerini verimli bir şekilde sıralayabilir.Etkinlik Planlama:Doğrusal zaman sıralama algoritmaları, olayları başlangıç ​​veya bitiş zamanlarına göre planlayabilir. Olayları artan sırada sıralamak çatışmaları, çakışan dönemleri tanımlamayı veya bir sonraki uygun dönemi bulmayı kolaylaştırır.Günlük dosyalarını analiz etme:Günlük dosyalarını analiz etmek, sistem yönetimi ve hata ayıklamada yaygın bir görevdir. Günlükleri zaman damgalarına göre sıralamak için doğrusal zaman sıralama algoritmaları kullanılabilir; böylece kalıpları, anormallikleri tanımlamayı veya belirli olayları aramayı kolaylaştırır.Veri sıkıştırma:Sıralama, çeşitli veri sıkıştırma tekniklerinde önemli bir rol oynar. Burrows-Wheeler Dönüşümü (BWT) veya Öne Taşı Dönüşümü (MTF) gibi algoritmalar, sıkıştırma verimliliğini artırmak amacıyla verileri yeniden düzenlemek için doğrusal zaman sıralamasına dayanır. Bunlar doğrusal zaman sıralama algoritmalarının uygulamalarına sadece birkaç örnektir.

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&amp; 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&apos;s maximum value to determine the worksheet&apos;s size. It then counts each element&apos;s occurrence and calculates the worksheet&apos;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.