2014-12-11 12 views
5

O (1) veya O (logN) fakat daha küçük bir katsayılı mı? Bu belirtilmemişse, en azından haritanın/kümenin kırmızı-siyah veya AVL ağacı kullanılarak uygulandığı konusunda makul bir varsayım temelinde cevabı bilmek isterim. - O (logn) Doğru bir yineleyici ipucu sağladıysa, map/set :: insert'in karmaşıklığı nedir?

  • fiili ekleme yapmak

    • doğru yeri bulmak -: Genel algoritma gibi bir şey, sanırım, bir öğe eklemek için?
    • Gerekirse ağacı yeniden dengeleme -? Ancak doğru yineleyici ipucu temin halinde

    Şimdi, daha sonra birinci basamak olmaktadır O (1). Diğer adımlar ayrıca O (1) veya O (logN) mu?

  • +0

    Bunu bir düşünün. Ekleme yöntemini yazıyorsanız hangi adımları gerçekleştirirsiniz? Ağacın yeniden dengelenmesi gerekiyorsa ne yaparsın? Adımlar düğüm sayısına bağlı mı? –

    +1

    İşte size yardımcı olabilecek bir takım cevaplar: [stl-map-performance] (http://stackoverflow.com/questions/10165708/stl-map-performance), [neden-is-stdmap-uygulamalı-kırmızı gibi -black-tree] (http://stackoverflow.com/questions/5288320/why-is-stdmap-implemented-as-red-black-tree), [arasındaki fark-kırmızı-siyah-ağaçlar-ve-avl- ağaçlar] (http: // stackoverflow.com/questions/16257761/kırmızı-siyah-ağaçlar-ve-avl-ağaçları arasındaki fark) – nouney

    cevap

    5

    Standart, kapların nasıl uygulanacağını söylemez, bu nedenle bir RB'ye veya bir AVL ağacına güvenemezsiniz. Pratikte ... karmaşıklığı, faturaya uyan başka herhangi bir uygulama hakkında bilmiyorum ki . Ancak, numaralı cevabın, genel olarak “ logaritmik cevabını bulacağınız karmaşıklık sınırlamalarındadır, ancak t hemen ön tarafa yerleştirilirse amortize edilir. ” İpucu, ipucu doğruysa, uygulama, ekleme işlemi O (1) olacak şekilde olmalıdır.

    +2

    Bu sorunun C++ 03'ten C++ 11'e nasıl dönüştüğü aşağıda açıklanmıştır: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1780.html –

    0

    İlk standart, kümeyi uygulamak için ne tür bir veri yapısının kullanıldığını tam olarak söylemedi. Bir çeşit kendiliğinden dengelenmiş ikili arama ağacına yönelmemize yardımcı olan, yalnızca bu işlemlerin karmaşıklığı.

    Evet, doğru yineleyici yerleştirerek yerleştirmek için doğru ipucu verirseniz, o zaman tüm adımlar, adım 2 ve 3 olarak O (1) olarak itfa edilir ve hiçbir şeye bağlı değildir.

    2
    • doğru yeri bulmak - Gerekirse O (1), bir AVL veya RB ağaç
    • ise olursa olsun ağacını yeniden dengelemek - O (logn)
    • fiili ekleme yapmak - AVL ağacı için tam BIG-O notasyonunu bilmiyorum ama bir RB ağacı için O (1).

    Yineleyici bir ipucu ile, # 2 (ekleme) adımı ve 3. adım (yeniden dengeleme) etkilenmez. Bir yineleyici sağlayarak, sadece 1 numaralı adımı ("doğru yeri bul") kendiniz yapıyorsunuz, genel karmaşıklık aynı.

    +0

    "bir RB ağacı için bu işlemin karmaşıklığı O (1)" dir. -? –

    +0

    @ n.m. ---------? – nouney

    +1

    Bu karmaşıklığı nereden alıyorsunuz? –

    İlgili konular