Kilitsiz, sürekli güncelleme zamanı eşzamanlı ağaç veri yapıları?


20

Son zamanlarda literatürden biraz okudum ve oldukça ilginç veri yapıları buldum.

Güncelleme sürelerini en kötü durum güncelleme süresine [1-7] düşürmek için çeşitli farklı yöntemler araştırdım .O(1)

Son zamanlarda verimli eşzamanlı erişimi desteklemek için kilitsiz veri yapılarını araştırmaya başladım.

veri yapılarının uygulanmasında bu en kötü durum güncelleme zamanı tekniklerinden herhangi biri kullanıldı mı?O(1)

Soruyorum çünkü; bana göre, bu "teorik geliştirmenin" bariz pratik uzantısı gibi görünüyorlar.


  1. Tarjan, Robert Endre. “O (1) Dönüşlerde Dengeli Bir Arama Ağacının Güncellenmesi.” Bilgi İşleme Mektupları 16, no. 5 (1983): 253-257.

  2. Driscoll, JR, N Sarnak, DD Sleator ve RE Tarjan. “Veri Yapılarını Kalıcı Hale Getirmek.” Sekizinci Yıllık ACM Bilgi İşlem Teorisi Sempozyumu, Bildiriler Kitabı, 109-121. STOC '86. New York, NY, ABD: ACM, 1986.

  3. Levcopoulos, C. ve Mark H. Overmars. “O (1) En Kötü Durum Güncelleme Süresine sahip Dengeli Arama Ağacı.” Acta Inf. 26, hayır. 3 (Kasım 1988): 269-277.

  4. Fleischer, Rudolf. O (1) En Kötü Durum Güncelleme Süresine Sahip Basit Dengeli Arama Ağacı

  5. Dietz, Paul F ve Rajeev Raman. “Sabit Güncelleme Zamanlı Parmak Arama Ağacı.” Bilgi İşleme Mektupları 52, no. 3 (1994): 147-154.

  6. Lagogiannis, George, Christos Makris, Yannis Panagis, Spyros Sioutas ve Kostas Tsichlas. “En Kötü Sabit Güncelleme Süresine Sahip Yeni Dinamik Dengeli Arama Ağaçları.” J. Autom. Lang. Tarak. 8, hayır. 4 (Temmuz 2003): 607-632.

  7. Brodal, Gerth Stølting, George Lagogiannis, Christos Makris, Athanasios Tsakalidis ve Kostas Tsichlas. “İşaretçi Makinesinde Optimal Parmak Arama Ağaçları.” J. Comput. Sist. Sci. 67, hayır. 2 (Eylül 2003): 381–418.


2
Lütfen makalelerinize, sorununuzu araştırmak isteyen kişilere bir nezaket olarak bağlantı eklemeyi düşünün.
Raphael

3
Tamam, ilgili makalelere bağlantılar eklendi.
AT

1
Yakında faydalı bir yanıt alamazsanız , cstheory'de yeniden yayınlamayı öneririm .
JeffE

1
Önerin için teşekkürler. Yanıt verdim: Kilitsiz , sürekli güncelleme zamanı eşzamanlı ağaç veri yapıları?
AT

Daha önce pratik kilitsiz veri yapıları kütüphanesini kullandım. Kilitsiz ağaç veri yapılarını destekliyorlar. Belki aradığın şey var.
Reza

Yanıtlar:


4

kendi başına yardımcı olmaz. Kilitsiz bir veri yapısında, veri yapınız değiştiğinde tek bir atomik örnek olması gerekir. Tümtemsil değişmezlerininbu atomik andan hemen önce ve hemen sonra yürürlükte olmaları gerekir.O(1)

Bu, veri yapısında bir değişiklik yapıyorsanız, önemli özellik, özel bir veri yapısında tüm modları yapabilmeniz ve daha sonra tek bir atomik talimatta değişikliklerde değiştirebilmenizdir.

Veri yapıları olduğunda Kilit-özgürlük genellikle en kolay değişmez ( tamamen işlevsel ). Sadece veri yapısının geçerli sürümüne genel bir işaretçi tutun. Okuyucuların hiçbir şeyi kilitlemesi gerekmez. Veri yapısındaki değişiklikler, global işaretçiyi değişmez bir veri yapısına diğerine değiştirerek gerçekleştirilir.

Örneğin: tamamen işlevsel bir ağaç dengeli ağacınız varsa:

  1. Geçerli global işaretçiyi ağacın köküne kaydedin.
  2. Bir düğüm ekleyen veya silen yeni bir ağaç oluşturun. (Bu, şu anda ağaçta bulunan düğüm sayısındaki zaman ve mekanda logaritmiktir ve değişiklik noktasından köke kadar yeni düğümler oluşturmayı ve sadece veri yapısının önceki sürümünün eski kısımlarında yeni olan her şeyi işaret etmeyi içerir. )
  3. Atomik olarak global işaretçiyi kök ile karşılaştırın ve değiştirin. (Eski kök işaretçiyi kaydettiğiniz zaman ile şimdi arasında başka bir değişiklik olursa bunun başarısız olabileceğini unutmayın. Bu durumda, 1. adıma dönüp tekrar deneyin. Buna "iyimser eşzamanlılık kontrolü" denir.)

En önemli bölüm, temsil değişmezlerini sürdürme ihtiyacı hakkında yukarıda söylediğim şeydir. Genellikle ağacın ortasında atomik bir değişiklik yapan bir algoritmaya sahip olmak yeterli değildir. Niye ya? Örneğin: ağacın ön siparişi çaprazlama işlemini gerçekleştiren bir okuyucu iş parçacığınız olabilir. Şu anda okudukları düğümün atası olan bir düğümü değiştirirseniz, zorladıklarını düşündükleri önkoşulları geçersiz kılacaksınız. Okuyucunun veri yapısıyla tam olarak değişikliğinizi yapmadan önceki veya tam olarak değişikliğinizi yaptıktan sonra çalışabilmesi gerekir. Arada bir şey yok.

O(lÖg(N-))O(N-)


Bence aktif bekleme tekniklerine, örneğin karşılaştırma ve takas gibi, genellikle "kilitsiz" denir, bu yüzden değişebilir ortamda bile bazı çıkış yolları vardır.
Raphael

Aktif bekleme terimini bilmiyorum (ve Google yardım etmiyor). (Kogan ve Petrank'in çalışması hakkında konuşuyorsanız, bu, kilitsiz algoritmaların nasıl beklemesiz hale getirileceğini gösterir.) Genel olarak kilit özgürlüğü için mutabilite ile nasıl başa çıkabileceğiniz hakkında bir düzenleme ekledim.
Gezici Mantık

"Aktif bekleyiş" derken böyle bir şey demek while ( !P ) { noOp(); } doWork();nerede noOpbir olabilir sleepveya benzer.
Raphael

In Düzenleme parçası, sen değişken veri yapıları kilit serbest yapmak için tekniğini bahsetti. Belirtildiği gibi, tüm veri yapısını kopyalarız, kopyaya modlar yaparız ve daha sonra CAS ilkelini kullanırız. Ancak, Copyadım atomik nasıl yapılır ? Başka bir zor sorun gibi görünüyor atomic snapshot.
hengxin

@hengxin: CAS ilkel bir "yayınlama" operatörü olarak düşünün. Veri yapısı yayınlanmadan önce yalnızca değişiklikleri yapan iş parçacığının buna erişimi vardır. Veri yapısı yayınlandıktan sonra değişmezdir. Kopyalama adımının atomik olması gerekmez, çünkü bir iş parçacığının kopyalayabileceği tek şey değiştirilemeyen yayınlanmış bir versiyonudur. İki iş parçacığı aynı anda mutasyona uğramaya çalışırsa, ikisi de aynı değişmez veri yapısını kopyalar, yerel kopyalarını değiştirir ve sonra CAS işlemlerinden biri başarılı olur ve diğeri başarısız olur. Başarısız olanın yeniden kopyalanması ve güncellenmesi gerekir.
Gezici Mantı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.