Hem azaltma tuşu hem de artış tuşu işlemleriyle öncelik sırası


11

Bir Fibonnaci Yığını aşağıdaki işlemleri destekler:

  • insert(key, data) : veri yapısına yeni bir öğe ekler
  • find-min() : öğeye minimum anahtarla bir işaretçi döndürür
  • delete-min() : öğeyi minimum anahtarla kaldırır
  • delete(node) : ile gösterilen öğeyi siler node
  • decrease-key(node) : ile gösterilen elemanın anahtarını azaltır node

Tüm silinmeyen işlemler (itfa edilmiş) süresidir ve silme işlemleri amortisman süresidir.O(1)O(logn)

Ayrıca destek bir öncelik sırası herhangi uygulamaları vardır increase-key(node)olarak (itfa edilmiş) zaman?O(1)


@ Raphael , minimum öğenin anahtarını şimdi en büyük anahtar olacak şekilde artırırsanız , süper sabit miktarda yeniden dengeleme yapmak zorunda olmadığınız hemen belli olmaz (en azından benim için).
Joe

Yanıtlar:


10

Eğer sahip bir öncelik sırası vardır varsayalım , ve . O zaman aşağıdaki zaman alır bir sıralama algoritmasıdır :O(1) find-minincrease-keyinsertO(n)

vector<T>
fast_sort(const vector<T> & in) {
  vector<T> ans;
  pq<T> out;
  for (auto x : in) {
    out.insert(x);
  }
  for(auto x : in) {
    ans.push_back(*out.find_min());
    out.increase_key(out.find_min(), infinity);
  }
  return ans;
}

1
Ben (de|in)crease-keysadece artı ya da eksi bir yaptı varsaymıştı .
Raphael

Ve sabit zamanda artan tuş işlemine izin veren ancak logaritmik (veya daha fazla) azalma sağlayan bir DS var mı? (Bir yığın için)
Gonzalo Solera

2
@GonzaloSolera: Bu cevaptaki imkansızlık kanıtı, azaltma anahtarını umursamıyor; O (1) find-min, boost-key ve insert zaten bir problemdir (ve kanıtın insert'e bağımlılığı gerçekten gerekli değildir; O (n) heapify yeterlidir, ya da muhtemelen aynı yığını çoklu olarak kullanabiliriz) heapify veya insert maliyetine bakılmaksızın karşılaştırma sıralama sınırlarını ihlal ettiğini kanıtlamak için sıralar).
user2357112 Monica

Tamam üzgünüm, bunu okumayı özledim. Yorumun için teşekkürler!
Gonzalo Solera
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.