Bölünebilir yığını


22

Aşağıdaki iki işleme tabi tutulan bir dizi öğeyi tutabilen veri yapıları hakkında ne bilinmektedir?

  • Push (x): dizinin sonuna x ekleyin ve dizideki konumu için bir tanımlayıcı döndürün
  • Özü (S): sırasız bir tanımlayıcı kümesi verilir, bu konumlardaki öğeleri sıradan çıkarın ve kaldırılan öğelerin listesini sıra sırasına göre döndürün

İsterseniz bunu bir istif veya bir ayırma işlemi olan ve iki istife ayıran bir sıra olarak düşünebilirsiniz: çıkartma işlemi bir pop veya dequeue işlemi uygulamak için kullanılabilir ve çıkartılmış öğe dizisi de konulabilir. farklı bir istif veya sıraya geri dönelim.

Zaten bildiklerim: bir sekans, her bir tanımlayıcının bir bağlantılı liste düğümüne bir gösterici olduğu ve iki düğüm de ilişkisiz iki öğenin konumları arasında hızlı bir karşılaştırma yapmayı sağlayan bir konum numarası saklayan, iki kat bağlantılı bir liste olarak korunabilir. sırayla Veri yapısı ilerledikçe konum numaralarını güncellemek zor değildir, böylece hepsi maksimum değerinin tamsayılarıdır; burada n , listedeki geçerli öğe sayısıdır. Bu veri yapısıyla, bir çıkarma işleminin tek zor kısmı, çıkartılan öğeleri konum numaralarına göre sıralamaktır. Bir ekstraksiyon k öğeleri alır Ç ( k O(n)nkörneğin, FOCS 2002'den Han ve Thorup'un tamsayı sıralama algoritmasını kullanarak beklenen rasgele zaman ve bir basma işlemi sabit zaman alıyor.O(kloglogk)

Bilmiyorum: ekstraktı sürede ele almak ve sürekli zamanda itmek mümkün mü? Bu konuda literatür var mı? Tamsayılı sıralama kadar zor mu?O(k)

Motivasyon: Bu, aynı zamanda grafik çiziminde uygulamalara sahip olan Coffman-Graham zamanlama algoritmasında öğeleri sıralamak için gereken temel adımdır. Coffman-Graham'in zor kısmı bir sözlükbilimsel topolojik düzendir. Bu, her bir farklı borç için, kalan başlıklar tarafından oluşturulan alt çizelgede söz konusu olan bir köşe dizisinin tutulmasıyla yapılabilir. Ardından, ilk tepe noktasını sıfıra aykırı köşeler dizisinden tekrar tekrar kaldırın ve topolojik düzene ekleyin; v'nin komşularını daha önce ait oldukları derecelerden çıkarın ve bir sonraki daha küçük derece için dizinin üzerine itin. Yani bir O ( k )vvO(k) Bu veri yapısındaki özüt işlemlerinin süresi, Coffman-Graham algoritmasının doğrusal bir zaman uygulamasına yol açacaktır.

İlk başta sorduğumdan beri 1976'da Sethi'nin Coffman-Graham algoritmasının doğrusal zamanda uygulanmasına izin veren bir yazı buldum ve onu Coffman-Graham algoritması hakkındaki Wikipedia makaleme ekledim , bu yüzden orijinal motivasyon daha az anlamlıydı. Yine de cevabın ne olduğunu hala merak ediyorum.


Eklemeler yalnızca dizinin sonunda gerçekleşirse, hem çift bağlantılı bir liste hem de öğe konumlarının karma tablosunu yönetebilirsiniz. Ekleme: itfa edilmiş O (1) (sadece son öğeyi göstericiyi tut). K maddelerinin çıkarılması: amortize edilmiş O (k) (S'nin her elemanı için işaretçi alın ve hash tablosundan çıkarın, listeden bir öğe alın ve çıkarın ve çıkarma sonucuna ekleyin).
Marzio De Biasi

3
Zaman alan listeden öğelerin çıkarılması değil, onları argümanın sıralanmamış sırasına göre, doğru sıra sırasına göre düzenliyor.
David Eppstein

Yanıtlar:


1

S[n]nnDnnnDnDn[n]O(1)

S[n]SSO(1)

Bu nedenle, mesaj, tam sayıların yalnızca üst sınırına bağlı bazı "serbest" yan bilgiler tamsayılı sıralamayı kolaylaştıramazsa, çıkartmanın tam sayı sıralaması kadar zor olduğudur.

Bu, tuhaf model olmadan iki sorun arasında bir ilişki olduğu anlamına mı geliyor? Bu rastgele tavsiye nosyonu bilinen bir şey mi? Bu bir MA protokolü gibidir, ancak Merlin'in mesajının girişe bağlı olmasına izin verilmez ve Arthur'un çalışma süresini önemseriz.


[n]DnΩ(n)DnΩ(n)k[n]O(n+k)O(k)
Dave,

Ω(n)DnkO(k)Dn

İşte bu cevabı tamamen inandırıcı bulmama sebebim. Sıralamak istediğiniz yalnızca bir set S tamsayıya sahipseniz, her şey doğrusal zamandır (sadece O (n + k) 'da sıralama sayımı yapın). Ancak, bu veri yapısını birçok küçük türden bir diziyi simüle etmek için kullanmaya çalışıyorsanız (böylelikle sayma sıralaması yeterince iyi değildir), o zaman bu küçük türlerin yalnızca ilki tamamen kısıtlanır: ondan sonra, bazı [n] öğesinin öğelerinden, sıraladığınız her dizinin öncekilerden ayrılması gerekir. Bu yüzden sıralama işinde bir azalma yapmak zor görünüyor.
David Eppstein

O(k)O(n+k)

Ω(n)DnO(k)
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.