Yaklaşık gerçekleştirme maliyetleri. bir atlama dörtgeni içinde en yakın komşu arama


10

NOT : Soru cevaplarımda yeniden ifade edildi: Artık en düşük kardeş atalarını zamanda bulabildiğimizi varsayarsak , YSA gerçekten mi?O(1)O(logn)


Quadtrees verimli mekansal endekslerdir. [2] 'de açıklandığı gibi sıkıştırılmış bir dörtlü yapıda en yakın komşu aramanın uygulanması ile bir bulmaca var. (Ayrıntılara girmeden, arama, eşitlikçi bir yolun kuyruk düğümünde biten eşitlikli kareler boyunca yukarıdan aşağıya doğru gidiyor. Ekli görüntüde, güneydoğudaki noktalarla dolu düğümlerden herhangi biri olabilir.)

Algoritmalarının çalışması için, her bir düğüm için - en az iki boş çeyrek daire olmayan bir kare - dört yönün (kuzey, batı, güney) her bir en düşük (hiyerarşide en yakın) atası düğümü için işaretçiler korunmalıdır. , doğu). Bunlar düğümlerin batıya doğru ataları için yeşil oklarla gösterilir (ok, ata meydanının merkezindeki noktaları gösterir).

Makale, bu işaretçilerin nokta ekleme ve silme işlemleri sırasında O (1) olarak güncellenebileceğini iddia etmektedir. Ancak yeşil noktanın eklenmesine baktığımda, herhangi bir rasgele işaretçi, bu durumda altı tanesini güncellemem gerekiyor gibi görünüyor.

Bu işaretçi güncellemesini sabit zamanda yapmak için bir hile umuyorum. Belki de sömürülebilecek bir tür dolaylılık vardır?

eklemeden önce (solda) ve sonra (sağda) dörtlü

DÜZENLE:

Makaledeki ilgili bölüm 6.3'tür ve burada "eğilirse, o zaman en düşük atalarına ek olarak , yönlerin her biri için en düşük atası ait o yöne doğru gider [...] Bulma bu kareler yapılabilir kare başına kez biz ek ilişkilendirmek ise her kareye işaretçileri her yön için en yakın ataları işaret Bu işaretçiler, bir noktanın eklenmesi veya silinmesi sırasında zamanında da güncellenebilir . "log(c/ε)q2dqqO(1)2dQ0O(1)

[2]: Eppstein, D. ve Goodrich, MT ve Sun, JZ, “Skip Quadtree: Çok Boyutlu Veriler için Basit Bir Dinamik Veri Yapısı,” yirmi birinci yıllık Hesaplamalı geometri sempozyumu, ss. 296—305 , 2005.


2
Bir süre oldu, bu yüzden tam olarak hatırlamıyorum, ancak bu sabah gazeteyi tekrar okurken (hem arxiv hem de dergi versiyonları) İhtiyacımız olduğunu söylediğin işaretçileri tuttuğumuzu nerede söylediğini bulamadım. Sadece ebeveyn-çocuk işaretçileri ve çapraz örnek işaretçileri tuttuğumuzu düşündüm. Belki de gazetede söylediklerini söyleyen metne daha kesin bir şekilde işaret edebilirsiniz.
David Eppstein

2
Merhaba David, bir göz attığın için teşekkürler. YSA araması son bölümdür (6). Sorun şek. 7 (b) eğer q, sol altta bir yerdeyse, yukarıdaki resimde grafik olarak çizdiğim şeydir. Soruyu bölüm 6.3'teki metnin belirli bir bölümünü içerecek şekilde düzenledim. Belki equistabbing tanımı ile nasıl rahatlayabileceğim hakkında bazı fikirlerim var, ama herhangi bir alternatif sayımın hedeflenen performansı ihlal etmediğini kanıtlayabileceğimden emin değilim ...
0__

2
Tamam, bu bir sorun gibi görünüyor. Bunu Goodrich ile tartışıyorum (ayrıntıların çoğunu burada yapan Sun'la temasımızı kaybettik). Şu anki hisimiz aslında bu ekstra işaretçilere ihtiyacımız olmaması gerektiğidir (yaklaşık aralıklar için onlara ihtiyacımız yok, yaklaşık komşular neden farklı olmalı ve sorgu algoritmasının üzerinde gördüğü ataları hatırlaması mümkün olmalıdır. onları aramak için işaretçiler kullanmak yerine aşağıya doğru), ancak burada ayrıntılardan biraz daha emin olduğumuzda size geri döneceğiz.
David Eppstein

2
Harika, çok teşekkür ederim. Karakter sayımı ve düzeni nedeniyle, 'sezgisel fikrimi' çizen bir cevap ekleyeceğim, belki de bu bir başlangıç ​​noktasıdır.
0__

Yanıtlar:


11

David gibi, Jonathan'ın neden 2 ^ d işaretçileri hakkında bu yorumu yaptığını bilmiyorum. Onlara gerek yok. David'in yukarıda belirttiği gibi, esas özellik, Q_0'daki v yaprağına bir nokta konumu yaptığımızda, atlama dörtlüsündeki kardeş düğümlerini (ve kutularını) hatırlamak için yeterli olmasıdır. P'den bir kutu işlediğimizde, sorgu noktamıza en yakın yaprak kutusu için aşağı doğru kardeş kutularını ekleyerek bir nokta konumu yaparız. Bunun cevabınızla aşağı yukarı aynı olacağı anlaşılıyor. Ayrıca, bu prosedür, örneğin, aşağıdaki makalede yaklaşık nokta konumunun nasıl yapıldığına çok benzer: Arya, Sunil ve Mount, David M. ve Netanyahu, Nathan S. ve Silverman, Ruth ve Wu, Angela Y., "Sabit boyutları araştıran en yakın komşu için en uygun algoritma", JACM, 1998.


Bu iyi haber! Aşağı doğru adım sırasında kardeşleri eklemenin genel en kötü durum maliyetinin sınırını değiştirip değiştirmeyeceğinden emin değildim, ama hayır. . Ben :) Arya ve arkadaşları tarafından kağıt içine baktı, ama senin Dörtlü ağaç kağıttan daha çok az erişilebilir bulmuştu
0__

5
Vaov! Cstheory.SE'ye hoş geldiniz!
Hsien-Chih Chang 張顯 之

5

Atlama dörtlüsü, noktaları z-sıralarına göre depolayan bir veri yapısının bir atlama listesi uygulaması olarak düşünebilir. En azından kavramsal olarak daha basit ...

Bkz. Bölüm 2: http://goo.gl/pLiEO .

Ve evet, bazı temel z emri işlemlerini sabit zamanda yapabileceğinizi varsayarsak, kesinlikle logaritmik zamanda YSA yapabilirsiniz. Yukarıda belirtilen bölüm, sıkıştırılmış dörtlüler istiyorsa tuhaf operasyonlardan kaçınmanın bir yolu olmadığını da göstermektedir. LCA işleminin gerekli olmadığını unutmayın ...


3
Evet ve deterministik varyantlar aynı z sırası için 2-3 ağaç gibidir.
David Eppstein

Bağlantı için teşekkürler, daha önce makalenizi gördüm. Her durumda, verilen algoritma ile bağını ampirik olarak doğrulayamadım. Teorem 13'teki mermi sayısını sınırlamak için kullanılan Lemma 7'ye yapılan başvurunun geçersiz olabileceğini, çünkü sabit bir yarıçap olduğunu varsaydığından , ANN'deki arama yarıçapının kademeli olarak değiştiğini ve kritik kareler kümesi. ? r
0__

Yarıçap belirli arama işlemi sırasında daralır. Argümanın doğru olduğu konusunda iyimserim.
Sariel Har-Peled

1

Ayrıca sezgisel olarak birisinin bu işaretçiler olmadan yaşayabileceğini hissediyorum ve tüm düğümleri bir noktada sabit diske devam ettirmem gerektiğinden, işaretçilerdeki herhangi bir azalma harika.

Fikrim kabaca şu şekildedir: En iyi aday nokta (yaprak) , her turdaki en kötü mesafeyi de takip ediyoruz, . En kötü mesafe , bir karenin içinde veya dışında olursa olsun, düğümünün tüm köşelerinin sorgu noktası olan uzaklıklarının maksimum sayısıdır.lbestrmaxdist(v,q)qvv

Bir tur şöyledir: boşsa, varsa değerini . Aksi takdirde silme-min akım verir içinde . değerini başlatın (veya henüz en iyi aday gözlenmemişse olarak ayarlayın). İlk olarak, her boş olmayan çocuk sınamak içinde . Bu çocuk ise bir yaprak olduğunu, güncellemek ve gerekirse. Eğer bir düğüm, hesaplamak olan ve iki sıfır, eğer:, sonuncusu en iyi mesafePlbestp0Q0rmaxlbestp0Q0qlbestrmaxqdist(q,v)dist(q,v)v içinde ya da ile arasındaki tüm köşelerin en kısa mesafesi içinde bulunur .qqv

Eğer , unutmak , aksi tutun. düğüm sayısı , bu düğümleri üzerine itin . Turun sonu.dist(q,v)>rmaxq2P

Aksi takdirde, orijinal aramaya benzer şekilde ilerleyin: , mümkün olan en yüksek karşılık gelen düğümü bulun ve oradan başlayın: Yine, bir çocuğun inmesini istemek yerine, tüm çocukları önceki prosedüre göre test edin , en iyi mesafesi değerini atlayın . Bu testten sonra bir çocuk kalırsa, ona inin ve tekrarlayın. Hiç çocuk kalmadıysa, adresine gidin ve tekrarlayın. Test gerçekleştirildiyse , tur tamamlanır.qp0QjrmaxQj1Q0

Şu anda, bunun mümkün olan her durumda en yakın komşuyu bulmayı garanti edip etmediğini veya orijinal algoritma kadar iyi performans gösterdiğini biliyorum. Ayrıca ın başlatılması yeterliyse ya da değilse. Ve öncelik ne olmalıdır - hala en iyi mesafe?rmaxP


EDIT (Nisan 2013)

Şimdi böyle bir düğüme inen geçerli sorgu kapsamı kapsamı alanı değiştirmez özelliği dayalı, dengeleme düğümleri yerine 'equipotent' düğümleri tanımını kullanan yukarıdaki algoritmanın bir açıklama ile daha fazla deney yaptık .rmax

Ne yazık ki, performans mermilerine dönüştüğü patolojik durumlar (aşağıdaki resme bakın; sorgu noktası alt merkezdir) oluşturulabilir .O(n)

resim açıklamasını buraya girin


0

Şimdi, en düşük kardeş atalarının kaba kuvvet arandığı (bir O (1) varyantı bulmaya çalışmadan önce), teorem 13: .O(ϵ1d(logn+logϵ1))

Önceki cevabımdaki "patolojik" örneği kullanıyorum. 2 boyutlu kök karenin kenar uzunluğu 512'dir, burada merkez koordinat (256, 256) 'dır. Koordinatlar tamsayı olarak verilir, bu da düz bir ileriye yol açar . Noktalar, kök kareye yatay olarak eşit aralıklarla yerleştirilir ve sorgu noktası (256, 511) konumundadır (512'nin zaten kök karenin dışında olduğuna dikkat edin).ϵ=1v

Aşağıdaki şekilde, tam ağaç gösterilir ve bu örnekteki nokta sayısı 16'dır. Mavi kare anahatlar, öncelik kuyruğuna itilen ilginç kareleri gösterir ve merkezlerindeki rakamlar, onlar itilir. Keşfedilen yaprak noktaları, hesaplandıkları yuvarlak sayı ile de etiketlenir. Üç şeffaf mavi daire 1., 2. ve 7. turdan sonra bilinen NN yarıçapını gösterir (en yakın komşu ilk olarak 7. turda görülür). Toplamda 12 mermi vardır (son 6 sıradan sadece pop kareler, ancak yeni kareler eklemeyin).Q0

Bu örneği giderek artan sayıda büyük kök kareler ve noktaların aralıklarının aynı kaldığı nokta sayısıyla çalıştırdım (32). Bu, çizimden halihazırda sezgisel olarak görünen şeyi doğruladı: Algoritmanın turlarına ihtiyacı varken, ve ile teorem 13 , yalnızca turlarının gerekli olacağını belirtir .O(n)d=2ϵ=1O(logn)

Bu yüzden çok önemli bir şeyi kaçırmadıkça, algoritma belirtilen hıza ulaşamaz. Herhangi bir yorumunuz veya fikriniz var mı?

geçişi

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.