İnşaat & Yapısal Mühendislik
Nasıl Konting Sorti Küçük Integer Mensajlarının Sıralamasını Nasıl Geliştirir
Table of Contents
Saying Sort
Konting Sort, her farklı değerin frekansına sayarak, farklı değere dayanan bir tür karşılaştırma algoritmasıdır.Bu yaklaşım, Quicksort veya Mergesort gibi karşılaştırma bazlı bir tür algoritmadır.Bu yaklaşım, giriş domaininin sınırlı olduğu birçok performans-kritik uygulama için tercih eder.
Algoritma ilk olarak 1954 yılında Harold H. Seward tarafından tarif edildi ve bilgisayar bilimleri için temel bir teknik olarak kalıyordu. onun basitliği ve verimliliği, öğrenci yaşları, notlar veya mütevazı bir yay ile tam anlamıyla veri. değer aralığına göre, Konting Sorting Sorting Sorting Sorting indirgeme O(n log n) daha düşük karşılaştırma sıralamayı önlemek, O(n + k) zaman k giriş değerlerinin aralığıdır.
Nasıl Konting Sort Works
Konting Sort'in temel mekanizması basittir: her değerin giriş serisinde kaç kez göründüğünü sayar, sonra her elementin son konumunu hesaplamayı kullanır.The process of three separate steps:
- [FONT:0)Kırma:[Dönetici:[Dönetici:0)[[[Dönetici değerlerinin aralığı), başlangıç sıfıra doğru. Her değer için sayı ve artış üzerinden.
- [FONT:0) Ön ekleri hesaplamak:[Dönetici:[Dönetici:0) Sayısal sıralamada her elementin bulunduğu varsayılan diziye dönüştüğü veya eşit olarak, bu adım, her bir farklı değer için başlangıç pozisyonları belirler.
- [[Dönetici:0)Placing elemanları:[Dönetici için sağdan soldan gelen giriş serisine karşı çık.(Süresellik için), orada bulunan elementi bulmak için sayı dizisini kullanın ve sayıyı bozmak.
Algoritma yeni bir türe geri döner, orijinal değişmeden ayrılır. A variable called ESFLT:0}in-place Counting Sort) var ancak nadiren kullanılır, çünkü istikrar veya uzay verimliliğini tehlikeye atıyor.
Adım-byStep Örnek
Diziyi dikkate alın:0][4, 2, 2, 8, 3, 3, 1]) 0 ile 8. arasında değerlerin nerede olduğu 8.
- [0,1,0,0,0,0,0,0,0,0,1]. (Index 1 bir kez, indeks 2, indeks 8 bir kez.)
- [0,6,6,6,6,7] [0,6,6,6,6,7]. Şimdi her değer bize bu sayı için başlangıç pozisyonunu anlatıyor.
- [FONT=0]Output: [Dönetici: [Dönetici:0] Traverse original array from end: ilk element okuma 1 → pozisyon = 1.2 - 1 = 0 → çıktı[0]=1, decrement count[1] to 0. Sonraki 3 → pozisyon = sayı = sayı[3] - 1 = 4 → çıktı → çıktı[3] = 3,0,2,3,3,4,8.
Bu örnek, Konting Sortinin tamamen karşılaştırmalarından nasıl kaçındığını, sadece arithmetic operasyonlarına güvendiğini gösteriyor.
C ⁇ Kompleksiity
Zaman Kompleksi
- [FONT:0)En iyi, Ortalama ve en kötü Vaka: O(n + k), n'un element sayısı ve k'nin n'e göre küçük olduğu zaman, algoritma lineer zaman çalışır.
- [FONT=0)Comparison to Karşılaştırmak için:[DÜT:1] Quicksort ve Mergesort'un O(n log n) ortalama karmaşıklığı vardır. n = 106 ve k = 1000, Sayısal Sort ( ⁇ 1,001,000 işlemleri) tipik bir O(n log n) türünden yaklaşık 13 kat daha hızlıdır.
Uzay Kompleksi
- [FONT=0)Primary:[Dönetici: [Dönetici: 0,3|k) sayı için, artı O (n) çıktı serisi için.Bu hafıza paketi büyükse yasaklanabilir (örneğin, 32-bit tamsa, k = 232).
- [FONT:0]Stable varyant:[Dönem:[Dönem: 0,3) Bir boyut n'un yardımcı bir çıktı serisini gerektirir; yerinde, fedakarlıklar veya karmaşık indeks manipülasyonu kullanın.
When to Use Counting Sorting
Konting Sort aşağıdaki koşullar altında en etkili olanıdır:
- Giriş tamsayılardan oluşur (veya küçük tamsayılara, karakterler veya ayrı kategoriler gibi) gibi haritalanabilir veriler.
- Dizi k n. ortak bir baş kuralı k ≤ O(n)'dır.
- Memory ciddi bir şekilde kısıtlanmamış değildir, çünkü sayı serisi ve çıkış tampon ekstra alanı gerektirir.
- Stability gereklidir (örneğin, birden fazla anahtarla sıralama). Standart uygulama, elementlerin sağdan sola çekildiğinde stabildir.
Mükemmel kullanım koşulları notları (0-100), yaş (0-120), ürün kategorileri ( birkaç yüz tane SKU'ya kadar) veya subroutine inurFLT:0)Radix Sort).
Sınırlamalar ve Tahminler
Hızına rağmen, Konting Sort, uygulamasını sınırlamanın dezavantajları vardır:
- [FONT:0)Integer sadece:[[Dönetici: 1 ) Bir tam tam tam tam tam tam tam tam tam tam tam tam tam tam tam tam tamsa dönüştürülemezler.
- [FONT=0)Large aralığı:[Dönetici:[Dönder: · 1 ve 107 arasında 100 sayı – sayı – sayı sadece birkaç elementi sıralarken muazzam hafıza harcıyor.
- [FONT:0)Non-adaptive:[Dönetici:[Dönetici:0)[Dönetici:[Dönetici:[Dönetici:0)[Dönetici:[Dönetici:[Dönetici:[Dönetici:0)) Konting Sorti Her zaman tüm girişleri tarayın ve sayıyı inşa etmek gerekir, hatta veriler zaten sıralamalı veya neredeyse sıralanırsa bile.
- [FONT=0}Negative values:[[Dönetici: 0) Standart Saying Sorti, negatifleri ele almak için, değerleri minimuma yükselterek değiştirebilirsiniz (toplam 0 to max – min).
Bu kısıtlamalar Konting Sort'in özel bir araçtır, genel amaçlı algoritmaların evrensel bir değiştirilmesi değildir.
İlgili Sorting Algorithms ile Karşılaştırma
Konting Sort vs. Radix Sort
Radix Sort, her bir sayısalda sabit bir tür (kesinlikle Konting Sort) kullanarak fikir en az önemli olan basamakları sıralayarak genişletir.Thix Sorted by sorting digits from least important to most important, using a istikrarlı sort (often Counting Sorting Sort) at each digit. while Counting Sorting Sorted Sorted Sort by 8-bit basamaklar üzerinde bir sayı üzerinde çalışırken, Radix Sorted 256 girişler için hafıza kullanımını azaltır.
Konting Sort vs.BAN Sort Sort
Shell, elementleri bir dizi kovaya ve her bir kovaya bireysel olarak dağıtır (toplama sıralamasıyla birlikte). Konting Sort Sort her kovanın tek ayrı bir değere karşılık geldiği özel bir tür olarak görülebilir.Win Sort Sort Sort Sort Sort Sort Sort Sort Sort Sort Sort Sort Sort Sort Sorted-point data, but Counting Sort is limited to tam anlamıyla dağıtılmıştır.
Bir Stable Counting Sorting
Stability, bir anahtar tarafından sıralandığında, diğer anahtardan eşit elementlerin göreceli siparişini korurken önemlidir. Standart Konting Sorti, çıktı yerleştirme döngüsü sağdan solun girişinin sağdan soluna doğru olduğu zaman doğal olarak istikrarlıdır. İşte istikrarlı bir şekilde özetleme:
- Açıklama olarak tarif edilen sayı serisini ele alalım.
- Ek özetlere dönüştürül (her değerin sıralamasında yer alır).
- Geri dönüş düzenindeki girdi serisini geri çevir. Her bir element için, saydığı pozisyonda, o zaman bu sayıyı hayal kırıklığına uğratmak.
Çünkü sonundan elementler iletiyoruz, verilen bir değerin son olayı, en yüksek olası indekse girer, göreceli siparişi korur.Bu istikrarlı sürüm Radix Sort için her bir sayısal üzerinde düzgün bir şekilde çalışmak önemlidir.
Pratik Uygulama Pratik Uygulama Pratik Uygulama Pratik Uygulama
- [FONT:0]Eğitimsel yüksek lisans sistemleri: O(n) zamanında yüzlerce sınav puan ( aralığı 0-100) sıralayın.
- [FONT:0)Bioinformatics:[Dönder:[Dönder: 1) Sorting tam sayıları veya DNA k-mer frekansları alfabe büyüklüğü küçük olduğunda (A, C, G, T).
- [FONT:0)Database indeks bakımı:[Dönetici:0)[Döneticileri hafızaya sığacak kadar küçük sıraya ayırıyor.
- [FONT:0]İmage processing:[[Döneticileri sıralarken, [Döneticileri veya renkleri sıralaması)
- [FONT=0]Orta anahtar tarafından alıntı:) Radix Sort içinde kullanılır, bu birçok kütüphane ve dilde verimli bir şekilde sıralamak için iş bir şeydir (örneğin, .NET runtime küçük aralıklar için bir adaptif karışımı kullanır).
Teori ve varyantlarda daha fazla, diğer algoritmaların bulunduğu yazara özel referanslar için:0)Wikipedia: Konting Sort) ve [[Deks forGeeks: Counting Sort)[Deks[FLT}[Drilişler için [[Döneticileri]][Drilliant'ın Konting Sorting Sorti][/FONT][/FONT][/FONT][/FONT=2}[DeksForGeeksForGeeksForGeeks: Counting Sort)
Büyük Menajler için Konting Sorting Sort for Large Ranges
K büyük ama n da büyük olduğunda, saf Konting Sorti hafıza yoğun hale gelir. Çeşitli optimizasyonlar var:
- [FONT:0]Komşeküresellik:[Dönetici:0)Komşekür edilen değerlerin sayısı büyük olduğunda, ancak farklı değerlerin sayısı küçük.Bu ticaret sürekli zaman indeksleme oranı yüksek, ancak hafıza tüketimini azaltır.
- [FONT=0]Hybrid yaklaşımlar:[Dönetici:[Dönetici:0)[Döneticileri ile birlikte bir araya getirir.For example, if the range expires 106, use Radix Sort with a base that keep digit ranges small.
- [FONT:0) Yerinden gelen varyantlar:[Dönler:[Dönler:[Dönler: 0) Bazı optimizasyonlar, bir çıkış dizisi olmadan ekstra alanı azaltır, ancak genellikle istikrar feda ederler veya pozisyonları bulmak için döngüleri gerektirir.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Konting Sort, değer aralığının tam anlamıyla element sayısına göre küçük bir tamsayı ortaya koyar. O(n + k) zaman karmaşıklığı ve lineer performans, Radix Sort alt sürümler gibi senaryolarda vazgeçilmez hale getirir ve daha öngörülebilir sistemlerle uygulamalar yapılır.[değiştir | kaynağı değiştir]