Veri yapısı ile arama, ekleme ve silme süresinde silme


25

itfa süresi içerisinde aşağıdaki işlemleri destekleyen sıralı bir listeyi tutacak bir veri yapısı var mı ?O(1)

  • GetElement (k) : Listenin .k

  • InsertAfter (x, y) : Yeni öğeyi y'den hemen sonra listeye ekleyin.

  • Sil (x) : Listeden x'i kaldır.

Son iki işlem için, x'in doğrudan veri yapısına gösterici olarak verildiğini varsayabilirsiniz; InsertElement, karşılık gelen işaretçiyi y için döndürür. InsertAfter (NULL, y) listenin başına y ekler.

Örneğin, boş bir veri yapısından başlayarak, aşağıdaki işlemler sıralı listeyi aşağıda gösterildiği gibi günceller:

  • InsertAfter (NULL, a) [A]
  • InsertAfter (NULL, b) [b, a]
  • InsertAfter (b, c) [b, c, a]
  • InsertAfter (a, d) [b, c, a, d]
  • Sil (c) [b, a, d]

Bu beş güncellemeden sonra GetElement (2) d döndürmeli ve GetElement (3) bir hata döndürmelidir.


2
Gelen listesi Endeksleme için optimum Algoritmalar ve alt küme Rank (1989) bir Bulunan Bu sorunun çözümü. Ω(log nlog log n)
AT

2
@Raphael: Eğer veri yapısı bir dizi olsaydı, adı verilen eleman anlamına gelir . Diziler, ilk işlemi O ( 1 ) zaman içinde destekler, ikinciyi değil; bağlantılı listeler ikinci işlemi O ( 1 ) zaman içinde destekler, ancak ilkini desteklemez. A[k]O(1)O(1)
JeffE

2
O(logn)

1
@Raphael: Netleştirmek için düzenlendi.
JeffE

2
O(1)

Yanıtlar:


33

YOK HAYIR.

Ω(logn/loglogn)

Güncelleme ve sorgulama işlemleriyle ilgili ek varsayımlar olmadan, Dietz'in veri yapısı mümkün olan en iyisidir (en azından sabit faktörlere kadar).


3
@ AT: Bu sınır asla "yanlış kanıtlanmadı". Uygulanmadığı durumlar var, ama bu tamamen farklı bir ifade!
Raphael

5
@AT: Sıralama alt sınırının daha zayıf bir hesaplama modelinde, yani ikili karar ağaçlarında olduğu kanıtlandı. Daha hızlı algoritmalar geliştirerek "yanlış kanıtladı" oldu bağlı olamaz ikili karar ağaçları olarak tanımlanabilir. Fredman ve Saks'in alt sınırlarının yanlış olduğunu kanıtlamak için, belleğe erişmeyen daha hızlı bir algoritma tasarlamak zorundasınız . İyi şanslar.
JeffE

@JeffE ve Raphael; lütfen diğer cevabımı gözden geçirin ve şansınız olduğunda sonucumu onaylayın / reddedin. Teşekkürler.
AT

6

1
Ω(logn/loglogn)

Aslında. Ayrıca, bu sınırın , sabit boyutlu kelimelerle liste gösterme problemine uygulandığını doğrulayabilir misiniz ?
AT

1
Θ(logn/loglogn) Ω(logn)
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.