If you're seeing this message, it means we're having trouble loading external resources on our website.

Bağlandığınız bilgisayar bir web filtresi kullanıyorsa, *.kastatic.org ve *.kasandbox.org adreslerinin engellerini kaldırmayı unutmayın.

Ana içerik

Ekleme sıralamanın analizi

Seçmeli sıralama gibi, ekleme sıralama dizenin indeksleri üzerinde döngüler. 1,2,3,,n1 indekslerindeki ögelerde insert çağırır. indexOfMinimum a her çağrı gibi, inserte her çağrının süresi de sıralanmış alt dizinin uzunluğuna bağlıdır. Aslında, bir önceki cümlede ''bağlıdır'' yerine, ''bağlı olabilir'' de diyebilirdik, bunun nedenini göreceğiz.
insert ü çağırdığımız ve bir alt diziye eklenen değerin, bu alt dizideki ögelerin hepsinden daha küçük olduğu bir durumu düşünelim. Örneğin, eğer [2, 3, 5, 7, 11] alt dizisine 0 ekliyorsak, bu durumda alt dizideki her öge bir konum sağa kaymalıdır. Buna göre, genel olarak, eğer k ögeli bir alt diziye ekleme yapıyorsak, tüm k bir konum sağa kaymak zorunda olabilir. Bir ögeyi bir anahtarla karşılaştırmak ve ögeyi kaydırmak için tam olarak kaç kod satırına ihtiyacımız olduğunu saymak yerine, bunun sabit bir satır sayısı olduğuna mutabık olalım ve bunu c sabiti olarak adlandıralım. Buna göre, k ögeli bir alt diziye ekleme yapmak için ck satıra kadar gerek duyabiliriz.
inserte her çağrıda, eklenen değerin dizide solundaki her ögeden daha küçük olduğunu varsayın. Birinci kere insert çağırdığımızda, k=1'dir. İkinci seferde, k=2'dir. Üçüncü seferde,k=3'tür. Böylece, son seferde k=n1 olur. Böylece, sıralanmış alt dizelere eklemek için harcanan toplam süre,
c1+c2+c3+c(n1)=c(1+2+3++(n1)) .
Bu toplam bir aritmetik seridir, yalnızca n1 'e gider, n'ye değil. Aritmetik seri formülümüzü kullandığımızda, alt dizilere eklemek için harcanan toplam sürenin şu olduğunu buluruz:
c(n1+1)((n1)/2)=cn2/2cn/2 .
Büyük-θ gösterimini kullanırsak, alt dereceden terim cn/2 ile c ve 1/2 sabit faktörlerini çıkardığımızda, bu durumda ekleme sıralamanın çalışma süresinin Θ(n2) olduğunu buluruz.
Ekleme sıralama Θ(n2) kezden daha az sürebilir mi? Cevap, evettir. [2, 3, 5, 7, 11] dizisini düşünün, burada sıralanmış alt dizi ilk dört ögedir ve biz 11 değerini ekliyoruz. İlk testte 11'in 7'den büyük olduğunu buluruz, dolayısıyla alt dizideki ögelerden hiç birisinin sağa kaymasına gerek yoktur. O zaman, bu insert çağrısı sabit zaman alır. Her insert çağrısının sabit zaman aldığını varsayalım. inserte n1 çağrı olduğundan, eğer her çağrı sabit süre (c) alıyorsa, bu durumda ekleme sıralama için toplam süre c(n1)'dir; bu Θ(n2) değil, Θ(n)'dir.
Bu durumlardan biri oluşabilir mi? insert e her çağrı alt dizideki her ögenin bir konum sağa kaymasına neden olabilir mi? insert'e yapılan her çağrı hiçbir ögenin kaymamasına yol açabilir mi? İki sorunun da cevabı evettir. Eğer eklenen anahtar solundaki ögelerin tümünden küçükse, insert e her çağrı her ögenin kaymasına neden olur. Buna göre, eğer her öge solundaki her ögeden küçükse, ekleme sıralamanın çalışma zamanı Θ(n2)'dir. Her ögenin solundaki ögeden küçük olması ne anlama gelir? Dizinin ters sırada, [11, 7, 5, 3, 2] gibi başlaması gerekir. Dolayısıyla, ekleme sıralama için en kötüsü, ters sıralanmış bir dizidir.
Bu durumun tersi nedir? Eğer eklenen anahtar solundaki ögelerin tümünden büyük veya eşitse, insert e yapılan bir çağrı hiç bir ögenin kaymasına yol açmaz. Buna göre, her öge solundaki ögeden büyük veya eşitse, ekleme sıralamanın çalışma zamanı Θ(n)'dir. Bu durum, dizi zaten sıralanmış olarak başladığında olur ve dolayısıyla zaten sıralanmış olan bir dizi, ekleme sıralama için en iyi durumdur.
Ekleme sıralamanın çalışma zamanı için başka neler söyleyebiliriz? Diyelim ki, dize rastgele bir sırayla başlar. Bu durumda, ortalamada, her bir ögenin solundaki ögelerin yarısından az olmasını beklerdik. Bu durumda, ortalamada, k ögelik bir alt dizide bir insert çağrısı, bunların k/2'sini kaydırır. Çalışma zamanı, en kötü durumdaki çalışma zamanının yarısı olur. Ancak sabit katsayıların önemli olmadığı asimptotik gösterimde, ortalama durumda çalışma süresi (aynı en kötü durum gibi)Θ(n2) olacaktır.
Eğer dizinin ''neredeyse sıralanmış'' olduğunu bilseydiniz ne olurdu, yani her öge, sıralandığında olması beklenen, en fazla sabit konum sayısından -diyelim ki 17- başlasaydı? Bu durumda insert e her çağrı en fazla 17 ögeyi kaydırır ve k ögelik bir dizideki bir insert çağrısı için süre maksimum 17c olacaktır. insert e n1 çağrının tamamında, çalışma süresi 17c(n1) olacaktır, bu en iyi durumda olduğu gibi Θ(n)'dir. Neredeyse-sıralanmış bir dizi verildiğinde, ekleme sıralaması hızlı olur.
Özetlersek, ekleme sıralama için çalışma zamanları:
  • En kötü durum: Θ(n2).
  • En iyi durum: Θ(n).
  • Rastgele bir dizi için ortalama durum: Θ(n2).
  • "Neredeyse sıralanmış" durum: Θ(n).
Ekleme sıralamanın tüm durumlarına uygun bir genel bir ifadede bulunmamız gerekseydi, O(n2) zamanında çalıştığını söylememiz gerekirdi. Bunun her durumda Θ(n2) zamanda çalıştığını söyleyemezsiniz, zira en iyi durum Θ(n) zamanda çalışır. Bunun her durumda Θ(n) zamanda çalıştığını da söyleyemezsiniz, zira en kötü durumda çalışma zamanı Θ(n2)'dir.
Bu içerik Dartmouth Bilgisayar Bilimleri öğretim görevlileri Thomas Cormen ve Devin Balkcom ile Khan Academy bilgisayar bölümü içeriklerini hazırlayan takımın işbirliği ile hazırlanmıştır. İçerik CC-BY-NC-SA lisanslıdır.

Tartışmaya katılmak ister misiniz?

Henüz gönderi yok.
İngilizce biliyor musunuz? Khan Academy'nin İngilizce sitesinde neler olduğunu görmek için buraya tıklayın.