Halatlar için eşdeğeri bir van Emde Boas ağacı var mı?


23

Tanıdığım biri yakın gelecekte bir metin editörü uygulamayı planlıyor, bu da bir metin editörü için ne tür veri yapılarının hızlı olduğunu düşünmemi sağladı. En çok kullanılan yapılar görünüşte halatlar veya boşluk tamponlarıdır .

Van Emde Boas ağaçları , etrafındaki en hızlı öncelik sıralarıdır, içine koyabileceğiniz öğe sayısı ve yüksek bir başlangıç ​​maliyeti ile ilgili bir üst sınırlama sakıncası yoksa. Sorum şu ki, Van Emde Boas ağacı kadar hızlı bir veri yapısı var mı, ancak metin editörü işlemlerini destekliyor mu?

Veri yapımızda yalnızca karakterine kadar desteklememiz gerekir (eğer log m = 32 ise 4GB değerine kadar ASCII karakterini destekleriz). Biz izin verilir mlogm=32 zaman yeni bir veri yapısı başlatmak için. Aşağıdaki işlemleri desteklemek istiyoruz:m

  • Pozisyonda bir karakter ekleme içinde , O ( giriş günlük m ) (ve bu sayede, 1 ile takip eden her karakterinin pozisyonunu artması).iO(loglogm)
  • Pozisyonda bir karakter sil içinde , O ( giriş günlük m ) .iO(loglogm)
  • Konumundaki karakter Dönüş içinde , O ( giriş günlük m ) .iO(loglogm)

Bu nedenle, (0, 'a') yazıp ardından (0, 'b') yazıp "ba" ile sonuçlanır.

Daha da iyisi bu olurdu:

  • O içindeki bazı indekslere 'pointer' değerini döndürün ( log log m ) .iO(loglogm)
  • Bir 'işaretçi' verildiğinde, karakteri bu konumda .O(1)
  • Bir 'işaretçi' verildiğinde, karakteri bu pozisyonda kaldırın .O(1)
  • Bir 'işaretçi' verildiğinde, bu konumda 'de bir karakter ekleyin ve bir işaretleyiciyi aşağıdaki konuma getirin.O(1)
  • (isteğe bağlı) Bir 'işaretçi' verildiğinde, 'deki sonraki / önceki karaktere bir' işaretçi 'verin .O(1)

Yanıtlar:


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.