Nasıl sıralı sette bir öğenin dizinini bulmak için?

oy
4

Ben de (BST tarafından desteklenmektedir) Sıralanmış sette bir öğe bulabilirsiniz O(logN). Şimdi istiyorum endeksi bu elementin. Örneğin, sette {1, 3, 4, 10}, dizin 4IS 2ve indeksi 1olduğunu 0.

Önemsiz bir çözümdür böylece Açıkçası, ben sadece sette adımlayabilirsiniz O(N). Daha iyi ihtimalle BST özellikleri ve / veya yardımcı veri yapılarını kullanarak yapabilirmiyim?

Oluştur 09/05/2011 saat 11:46
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
3

Basit bir BST rastgele elemanların yerleştirilmesi sırası ile, tam ağacı yürüme olmadan belirli bir elementin daha küçüktür kaç unsurlar belirlemek için bir yol var.

Eğer böyle bir kırmızı-siyah ağaç olarak dengeli bir ağaç olsaydı, o zaman en azından nedeniyle ağacın yüksekliği üzerinde sınırları için endeks üzerinde alt ve üst sınır koyabilirsiniz. Bir BST elemanlarının yerleştirilmesi sırası tekrar olmayan rasgele ise, bunu yürüyen olmadan ağaç yüksekliği hakkında bir şeyler söylemek ve yaklaşık endeksinin bazı tahminini verebilir.

Yardımcı veri yapıları gelince, onların dizine unsurları eşleyen bir yardımcı sözlüğü oluşturabilirsiniz. Ancak, bu dizin oluşturma (K) O alır ve BST yeni unsurlar eklerken endeksi bayat olur, bu nedenle bu sadece seyrek güncellemeleri ile BSTS için iyi çalışır.

indeksi ve saymak: Başka bir çözüm iki özelliklere sahip BST düğümleri uzatmaktır. endeks bu düğümünde daha küçüktür birçok element ağacındaki nasıl söylüyor. sayım birçok unsurları son o düğümün endeksi güncellenen BST içinde ne kadar söylüyor. Ekleme, silme nispeten basit değişikliklerle ve sabit zamanın ötesinde bu temel işlemleri etkilemez, ve O (1) doğrudan elementin endeksi alabilirsiniz, BST'de arayın.

Eğer yeni bir düğüm eklemek gibi yeni eleman daha küçük ise Esasen, her düğüm için size, aşağı doğru yolda geçmektedir (sonraki adım, sol çocuğa bir araştırma), bu düğümün hem indeksini ve sayısını artırır. Yeni elementin yer bulmak verirseniz, kendi üst dayalı bir sayım ve ana şirketinin ve sol çocuk için geçerli bir dizin verir. Bu yanlış bir indeksi yenisi daha elementler daha büyük bırakır, ancak ebeveynin sayım değerine bakarak bir unsuru aramak gibi kolayca güncelleme olabilir - fark ebeveynin sayımı ve çocuk arasındaki nasıl söyler sadece endekse bu farkı eklemek yani en son, çocuğun endeksi güncellenen beri küçük elemanların birçok eklemeleri oldu.

Cevap 09/05/2011 saat 13:13
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more