SORU
2 Aralık 2008, Salı


Ne's Up O(1) ile mi?

Ben bir şey fark ediyor çok garip kullanım O(1) tartışma algoritmaları içeren karma ve türleri arama yap, sık sık bağlamında kullanarak bir sözlük türü tarafından sağlanan dil sistemi kullanan veya sözlük ya da karma bir dizi tanımlamak için kullanılan kullanarak dizi indeks gösterim.

Temelde, O(1) sabit bir zaman ve (genellikle) sabit yer ile sınırlı demektir. Bazı çok temel işlemleri O(1), Ancak kullanarak Ara diller ve özel VMs eğilimi gösterir deforme olanları düşünerek buraya (örneğin, nasıl amorti çöp toplayıcı ve diğer dinamik süreçlerin ne olur, yoksa O(1) faaliyetleri).

Ama görmezden amortisman gecikmeleri, çöp toplama, ve bu yüzden, ben hala anlamıyorum nasıl sıçrama varsayım bazı teknikleri içeren bir çeşit arıyor olabilir O(1) dışında çok özel koşullar altında.

Bunu daha önce fark etmiş olsa da, bir örnek sadece Pandincus question, "'Proper’ collection to use to obtain items in O(1) time in C# .NET?" geldi.

Orada bahsettiğim gibi, O(1) erişim gibi bir garanti bağlı sağlayan tek toplama tamsayı indeks değeri ile sabit bağlı bir dizidir. Karine dizi O(1) işlemleri indeksi olan hücreyi bulmak için kullandığı random access memory için bazı eşleştirme tarafından yürütülmektedir.

Dizin farklı bir tür için uygun bir hücre (veya tam sayı dizini ile seyrek bir dizi için) yerini belirlemek için arama çeşit içeren koleksiyonları için, hayat o kadar kolay değil. Çarpışmalar vardır ve tıkanıklık mümkünse özellikle, erişim tam olarak O(1) olur. Ve eğer bu koleksiyonu esnek ise, tek ve temel yapısı (bir ağaç ya da karma bir tablo gibi) genişleyen maliyetini amorti tanımak gerekirhangitıkanıklık rölyef (örneğin, yüksek çarpışma sıklığı veya ağaç dengesizlik).

Hiç bu esnek ve dinamik yapılar olarak O(1) konuşmayı düşünmüştüm. Henüz görüyorum bunları teklif olarak O(1) çözüm olmadan herhangi bir kimlik koşullarına bağlı olmalı muhafaza etmek aslında O(1) erişim olmak emin (gibi olan sabit olduğu negligibly small).

SORU: bu hazırlık Her soru için. O etrafında casualness(1) nedir ve neden bu kadar körü körüne kabul mu? Yakın sabit olsa bile O(1) undesirably büyük olabilir olduğunu kabul etmiş mi? Veya O(1) sadece resmi olmayan kullanım için hesaplama karmaşıklığı bir fikir vermesi mi? Kafam karıştı.

GÜNCELLEME: Cevaplar ve yorumlar tanımlanması O(1) kendimi rahat, tamir nerede nokta. Hala iyi cevaplar arıyorum ve yorum konuları bazı cevapları daha da ilginç, bazı durumlarda oldukça fazladır.

CEVAP
2 Aralık 2008, Salı


Sorun, insanların terminoloji ile çok özensiz. Önemli ama farklı 3 sınıf var:

O(1) en kötü durum

Bu basit - tüm işlemler en kötü durumda, zaman sabit bir miktar daha fazla, ve her durumda bu nedenle. Bir dizinin bir öğesi erişim O(1) kötü durum.

O(1) en kötü ihtimalle amorti

İtfa edilmişher operasyon da en kötü durumda O(1), N işlemleri herhangi bir dizi için, dizinin toplam maliyeti en kötü durumda O(N) hayır. Bunun anlamı olsa bile edemeyiz bağlı maliyet herhangi bir tek işlem ile sabit, daima olacaktır yeterince "hızlı" operasyon yapmak için "yavaş" gibi işlemleri bu süre sırasından işlemleri lineer sayısının işlemleri.

Örneğin, standart Dynamic Array çiftler kapasitesini ne zaman doluyor gerektirir O(1) itfa süresi eklemek için bir öğe en sonda da olsa bazı eklemeler gerektirir O(N) zaman - her zaman vardır yeter O(1) eklemeler dosyasındaki N öğeleri her zaman alır O(N) toplam süre.

O(1)-örnek ortalama

Bu bir hile. Ortalama durum iki olası tanımları vardır: rastgele girdiler sabit girdiler, ve deterministik algoritmalar için bir rastgele algoritmalar için.

İçin rastgele algoritmalar ile sabit girdiler, biz hesapla ortalama durum süre için herhangi bir giriş tarafından analiz algoritma ve belirleyici bir olasılık dağılımı tüm olası çalışma saatlerini ve alarak ortalamasının üzerinde olan dağıtım (bağlı olarak algoritma, bu olabilir veya olmayabilir Olası nedeniyle Durdurulması Sorunu).

Diğer durumda, girdiler üzerinde bir olasılık dağılımı ihtiyacımız var. Eğer bir sıralama algoritması ölçmek için olsaydı, örneğin, böyle bir olasılık dağılımı N sahip olduğu tüm dağılım olur! giriş Olası permütasyon eşit derecede Olası. O zaman, durum ortalama çalışma süresi, olası tüm girişler, her giriş olasılığa göre ağırlıklı ortalama çalışma süresi.

Bu soru konu deterministik olan hash tabloları, olduğundan, ortalama durum ikinci tanımı üzerinde duracağım. Şimdi yapamayız, her zaman belirlemek olasılık dağılımı girişleri, çünkü, Eh, evet, bir karma hemen her şey, ve bu öğeler yapılabileceği bir kullanıcı yazarak onları ya da bir dosya sistemi. Bu nedenle, ne zaman konuşmak hakkında hash tabloları, çoğu insan sadece varsayalım girdilerin iyi yetişmiş ve karma işlevi, iyi davranmış bu karma değeri herhangi bir giriş aslında rasgele dağıtılmış düzgün değerlerinde Olası hash değerleri.

Bir dakikanızı ayırın ve bu son nokta batsın - karma tablo için O(1) ortalama durum performansı hash değerleri eşit olarak dağıtılır tüm varsayarak geliyor. Eğer bu varsayım genellikle ama kesinlikle olamaz, değil ve oluyor) ihlal edilmesi durumunda, çalışma zamanı, artık ortalama O(1).

Ayrıca Denial of Service by Algorithmic Complexity bkz. Bu yazıda, yazarlar, varsayılan karma fonksiyonları bazı zayıflıkları Perl iki sürümü tarafından kullanılan karma çarpışmalar dizelerle çok sayıda oluşturmak için sömürdüklerini nasıl tartışın. Silahlı olan bu listenin dizeleri, onlar oluşturulan bir hizmet reddi saldırısı bazı web sunucuları tarafından besleme onları bu dizeleri sonuçlandı en kötü durum O(N) davranış hash tablolar tarafından kullanılan web sunucuları.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • David Wills

    David Wills

    31 Aralık 2007
  • EEVblog

    EEVblog

    4 NİSAN 2009
  • videoisunrelated

    videoisunrel

    5 Mart 2009

İLGİLİ SORU / CEVAPLAR