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(log⁡n)

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.