İtfa Edilen Analiz? (En Kötü Durum Performans Garantileri)


13

İtfa Edilen Analiz Nedir? Programlarımda en kötü performans garantilerini elde etmeme nasıl yardımcı olabilir ?

Ben edildi okuma aşağıdaki teknikler programcı elde yardımcı olabilir kötü durum performans garantileri (yani kendi sözleriyle: garanti bir programın çalışma süresi en kötü alçıda çalışma süresini geçmek olmaz):

  • Rastgele algoritmalar (örn. Çabuk sıralama algoritması en kötü durumda ikinci derecedir, ancak girdiyi rastgele sıralamak, çalışma süresinin doğrusal olduğunu garanti eder)
  • İşlem dizileri (analizimiz hem verileri hem de müşteri tarafından gerçekleştirilen işlem dizisini dikkate almalıdır)
  • Amortisman Analizi (performans garantisi sağlamanın bir başka yolu, tüm operasyonların toplam maliyetini, operasyon sayısına bölerek maliyeti amortisman etmektir.Bu ayarda, ortalama maliyeti korurken bazı pahalı operasyonlara izin verebiliriz Başka bir deyişle, birkaç pahalı operasyonun maliyetini, bir kısmını çok sayıda ucuz operasyonun her birine atayarak yayıyoruz)

Yazar, amortize analizin nasıl elde edileceğinin bir örneği olarak Stack için dizi veri yapısının yeniden boyutlandırılmasının kullanılmasından bahsetti, ancak yine de amortize analizin ne olduğunu ve en kötüye ulaşmak için gerçekte nasıl uygulanabileceğini (veri yapısı? Algoritması?) Anlamıyorum. -cast performans garantileri

Yanıtlar:


14

İtfa edilmiş analizi uygulamıyorsunuz. Daha doğru Osınırlar elde etmek için bir teknik .

Yapmanız gereken temel gözlem, pahalı operasyonların hiçbir zaman yapılamayacağıdır.

Dizi destekli veri yapısı söz konusu olduğunda, dizinin arada sırada yeniden boyutlandırılması gerekir. Bu en pahalı işlemdir ve O(n)zaman alır . Diziye tüm diğer ekler vardır O(1).

Öğeleri eklemek için çalışma zamanını belirlemek üzere , en pahalı işlemle nçarparak , genel çalışma zamanı davranışıyla sonuçlanır .nO(n)O(n^2)

Ancak, bu yanlıştır, çünkü yeniden boyutlandırma çok sık gerçekleşemez.

Para hakkında konuşurken , borcunuzu zaman içinde birden fazla küçük ödeme ile ödediğinizde amortismana tabi tutursunuz .

Bu modeli algoritmaları da düşünmek için kullanabiliriz. Zihinsel haritalamayı önlemek için "zaman" ı "para" ile değiştiriyoruz.

Dizi uzunluğuyla dolduğunda n, boyutunu iki katına çıkarabiliriz. Aşağıdaki işlemleri yapmamız gerekiyor:

  • 2nBellek yığınlarını tahsis edin
  • nöğeleri kopyala

Hem bellek ayırmanın hem de kopyalamanın doğrusal zamanda gerçekleştiğini varsayarsak, bu çok pahalı bir işlem olacaktır. Ancak, şimdi analiz için borç ve itfa fikrini kullanabiliriz. Sadece borcumuzu ödemeden önce amortismana tabi tutacağız.
Diyelim ki diziyi yeniden boyutlandırdığımızda (para / zaman) bakiyemiz 0'a geri döndü (yani bir borcumuz yok ya da artıklarımız yok).

Bunun aşağıdaki sonuçları vardır:

  • Sonraki nöğelerin eklenmesi, yeniden boyutlandırma ve kopyalama maliyetini karşılayacaktır ( nyuvalar ve nkullanılmayan yuvalar kullandık)

Artık her ekleme işleminin ne kadar ödemesi gerektiğini düşünebiliriz:

  • İnsert
  • Bir yığın bellek ayırmanın maliyeti
  • yeni tahsis edilen belleğe taşıma maliyeti

Şimdi bellek ayırma, sonraki nöğeleri kopyalama ve ekleme maliyetlerini karşıladık . Ancak, eski nöğelere yer ayırmayı ve kopyalamayı henüz ihmal etmedik .

Eski nunsurlarımızın maliyetlerini yeni (henüz eklenmemiş) nunsurlarımıza dağıtırız:

  • Bir yığın bellek ayırmanın maliyeti
  • yeni tahsis edilen belleğe taşıma maliyeti

Toplamda, her ekleme işlemi 5 birime mal olur. Bu, kendi yerleştirilmesi ve kendisi ve eski unsurlardan biri için alanın taşınması ve tahsisi için ödeme yapar.

Her ekleme işlemi hala sabit bir zaman alır, ancak yeniden boyutlandırma ücretsiz olarak gerçekleşir: Her ekleme için "daha fazla" zaman harcayarak bunu amorti ettik.

Sonuç olarak, nöğelerin eklenmesi O(n)zaman alır .

İtfa edilmiş analiz için diğer teknikler burada açıklanmaktadır .


1

Her şeyden önce: Algoritmalar için bir uygulama tekniği değil, program çalışma zamanlarını analiz etmek için bir tekniktir.

Listenizde bahsedilen örnek iyi bir örnektir: Dizi destekli veri yapısına tek bir öğe eklemek. Her bir ekleme işlemi için en kötü durum mevcut tüm öğeleri kopyalamak zorundadır. Bu tür bir analiz çok kötümserdir, çünkü aklı başında bir yeniden boyutlandırma stratejisi kullanıyorsanız (boyutu x> 1.0 ile çarparak) bunu yapmak zorunda değilsiniz. Daha sonra analiz, gerçek çalışma zamanı yalnızca O (n) iken, öğe sayısı n öğe başına O (n ^ 2) bağlı - O (n) olduğunu söylüyor.

Eklenen (çoğu yeniden boyutlandırılması gerekmeyen) tüm öğelerin yeniden boyutlandırma maliyetini ortalarsanız, amortize edilmiş analiz yapıyorsunuzdur. İtfa edilmiş analiz, algoritmanın gerçek davranışıyla eşleşen bir O (n) sınırı ile sonuçlanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.