Витрати на виконання бл. пошук найближчого сусіда в пропущеному квадраті


10

ПРИМІТКА . Питання було перетворено в моїх відповідях: якщо припустити, що ми можемо знайти найнижчих предків рідних братів за O(1) час, чи може АНН справді виконуватися в O(logn) ?


Квадрат є ефективними просторовими показниками. У мене є головоломка з реалізацією пошуку найближчого сусіда в стислій структурі квадрата, як описано в [2]. (Не вдаючись до деталей, пошук ведеться зверху вниз уздовж так званих рівновіддалених квадратів, що закінчується в хвостовому вузлі рівновіддаленого шляху. На доданому зображенні це може бути будь-який із вузлів на південному сході, заповнений крапками.)

Щоб їх алгоритм працював, необхідно підтримувати для кожного вузла - квадрат з щонайменше двома не порожніми квадрантами - покажчиками на кожен найнижчий (найближчий в ієрархії) вузол предка в кожному з чотирьох напрямків (північ, захід, південь , схід). Вони позначені зеленими стрілками для предка на захід (вузли стрілки в центрі площі предка).

У статті стверджується, що ці покажчики можуть бути оновлені в O (1) під час вставки та видалення точок. Однак, дивлячись на вставку зеленої точки, здається, мені потрібно оновити будь-яку довільну кількість покажчиків, в даному випадку - шість з них.

Я сподіваюся на хитрість робити це оновлення вказівника постійно. Може, є така форма опосередкованості, яку можна експлуатувати?

перед вставкою точки (ліворуч) та після (правої) точки квадрату

Редагувати:

Відповідний розділ із статті 6.3, де написано: "якщо шлях має вигини, то окрім найнижчих предків q , ми також повинні враховувати для кожного з двох d напрямів найнижчий предка q, що йде в цьому напрямку [...] Пошук цих квадратів з q можна зробити за O ( 1 ) час на квадрат, якщо ми пов'язуємо додаткові 2 d покажчики до кожного квадрата в Q 0log(c/ε)q2dqqO(1)2dQ0вказуючи на своїх найближчих предків для кожного напрямку. Ці вказівники також можуть бути оновлені в час під час вставки або видалення точки. "O(1)

[2]: Еппштейн, Д. і Гудрих, МТ і Сонце, Дж. Дж., «Пропуск квадрату: проста динамічна структура даних для багатовимірних даних», в матеріалах двадцять першого річного симпозіуму з обчислювальної геометрії, стор. 296—305 , 2005.


2
Минув час, тому я точно не пам’ятаю, але, перечитуючи газету сьогодні вранці (як архівна, так і журнальна версії), я не міг знайти місця, де сказано, що ми тримаємо покажчики, про які ти кажеш, що нам потрібно. Я думав, що ми зберігаємо лише вказівки батьків і дітей та перехресні вказівки. Тож, можливо, ви могли б точніше вказати на текст у статті, який говорить про те, що ви говорите.
Девід Еппштейн

2
Привіт, Девід, дякую, що подивився. Пошук ANN - це останній розділ (6). Проблема вказана на рис. 7 (b), що приблизно є тим, що я зрозумів на наведеній вище ілюстрації, якщо q десь внизу зліва. Я відредагував питання, щоб включити конкретну частину тексту з розділу 6.3. У мене є деякі ідеї щодо того, як я міг би розслабитися з визначенням еквістабільності, можливо, але я не впевнений, що можу довести, що будь-яке альтернативне підрахунок не порушує цільову ефективність ...
0__

2
Гаразд, це схоже на проблему. Я обговорюю це з Гудрихом (ми втратили зв’язок із Суном, який зробив тут більшість деталей). Наше теперішнє відчуття полягає в тому, що насправді нам не потрібні ці додаткові вказівники (вони не потрібні їм приблизно в діапазоні, чому приблизно сусіди повинні бути різними, і алгоритм запитів повинен мати можливість запам'ятати предків, які він бачив на Вниз, а не за допомогою покажчиків, щоб їх переглянути), але ми повернемося до вас, коли будемо трохи більш впевнені в деталях тут.
Девід Еппштейн

2
Чудово, дуже дякую З міркувань кількості та розміщення персонажів я додам відповідь, яка накреслює мою «інтуїтивну ідею», можливо, це є відправною точкою.
0__

Відповіді:


11

Як і Девід, я не знаю, чому Джонатан висловив це зауваження про двозначні покажчики. Вони не потрібні. Як згадував Девід вище, головна властивість полягає в тому, що коли ми робимо розташування точок до листа v у Q_0, достатньо запам’ятати вузли братів (та їх поля) у квадраті пропуску. Коли ми обробляємо коробку з P, ми робимо крапку для листового поля, найближчого до нашої точки запиту, вставляючи поля братів і сестер, коли ми спускаємось вниз. Здається, це було б майже так само, як і ваша відповідь. Крім того, ця процедура дуже схожа, наприклад, на те, як орієнтоване місце розташування робиться в наступній роботі: Ар'я, Суніл і Маунт, Девід М. і Нетаньяху, Натан С. і Сільверман, Рут і Ву, Анжела Ю., "Оптимальний алгоритм для приблизного пошуку найближчих сусідів за фіксованими розмірами", JACM, 1998. Дійсно,


Це гарна новина! Я просто не був впевнений, чи додавання братів і сестер під час кроку вниз змінить межу загальної гіршої вартості чи ні, але я вважаю, що ні. Я заглянув у статтю Arya та ін., Але мені
здалося, що

5
Оце Так! Ласкаво просимо на cstheory.SE!
Hsien-Chih Chang 16 之

5

Можна пропустити квадрати пропуску як реалізацію пропускного списку структури даних, що зберігає точки відповідно до їх z-порядку. Це (мабуть), принаймні, концептуально простіше ...

Дивіться розділ 2 тут: http://goo.gl/pLiEO .

І так, якщо припустити, що ви можете виконувати деякі основні операції z-порядку в постійний час, ви можете точно зробити ANN в логарифмічний час. Вищезгадана глава також показує, що немає жодного способу уникнути химерних операцій, якщо хочеться стислих квадри. Зауважте, що операція LCA не потрібна ...


3
Так, і детерміновані варіанти дуже схожі на 2-3 дерева для того ж z-порядку.
Девід Еппштейн

Дякую за посилання, я вже бачив твій документ раніше. У будь-якому випадку, я не міг емпірично перевірити пов'язане із заданим алгоритмом. У мене є відчуття, що посилання на лемму 7, яка використовується для обмеження кількості раундів у теоремі 13, може бути недійсною, оскільки вона передбачає постійний радіус , тоді як радіус пошуку в ANN поступово змінюється, і так само набір критичних квадратів. ? r
0__

Визначений радіус зменшується в процесі пошуку. Я досить оптимістичний, що аргумент правильний.
Саріель Хар-Пелед

1

Я також інтуїтивно відчуваю, що можна було б жити без цих покажчиків, і оскільки мені потрібно наполегливо зберегти всі вузли до жорсткого диска, будь-яке зменшення покажчиків велике.

Моя ідея приблизно така: окрім найкращої точки кандидата (лист) , ми також відстежуємо найгіршу відстань у кожному раунді, r m a x . Найгіршою відстані d i s t ( v , q ) буде максимальна відстань усіх кутів вузла q до точки запиту v , незалежно від того, знаходиться v всередині квадрата чи зовні.lbestrmaxdist(v,q)qvv

Круглий такий: Якщо порожній, поверніть l b e s t , якщо такий був. В іншому випадку delete-min дає поточний p 0 в Q 0 . Ініціалізуйте r m a x to l b e s t (або встановіть його на ∞, якщо ще не було помічено найкращого кандидата). По-перше, випробуйте кожну не порожню дитину p 0 у Q 0 . Якщо ця дитина q - лист, оновіть l b e s t іPlbestp0Q0rmaxlbestp0Q0qlbest при необхідності. Якщо q - вузол, обчисліть d i s t ( q , v ) і d i s t ( q , v ) , останній - найкраща відстань: або нуль, якщо v лежить всередині q , або найкоротша відстань з усіх кути від q до v .rmaxqdist(q,v)dist(q,v)vqqv

Якщо , забудьте q , інакше збережіть його. Якщо число вузлів зберігається в 2 , натисніть на ті вузли , P . Кінець раунду.dist(q,v)>rmaxq2P

В іншому випадку продовжуйте аналогічно початковому пошуку: Знайдіть , відповідний вузол p 0 в максимально можливому Q j , і починайте звідти: Знову, замість того, щоб просити сходити рівновіддалену дитину, протестуйте всіх дітей відповідно до попередня процедура, тобто пропустіть ті, краща відстань яких перевищує r m a x . Якщо після цього тесту дитина залишилася, спустіться до нього і повторіть. Якщо жодної дитини не залишилося, перейдіть до Q j - 1 і повторіть. Якщо випробування проводили в Q 0 , раунд закінчується.qp0QjrmaxQj1Q0

На даний момент я не знаю, чи гарантує це пошук найближчого сусіда у кожному можливому випадку, і чи не так добре, як оригінальний алгоритм. Також якщо ініціалізація є достатньою чи ні. І який має бути пріоритет у Р - все-таки найкраща відстань?rmaxP


EDIT (квітень 2013)

Зараз я провів більше експериментів із уточненням вищевказаного алгоритму, який використовує визначення 'еквіпотентних' вузлів замість вузлів зрівноваження, виходячи з властивості, що спуск до такого вузла не змінює область, охоплену поточною формою запиту міри .rmax

O(n)

введіть тут опис зображення


0

O(ϵ1d(logn+logϵ1))

ϵ=1v

Q0

O(n)d=2ϵ=1O(logn)

Тому, якщо я не пропускаю щось вирішальне, алгоритм не може досягти заявленої швидкості. Будь-які коментарі чи ідеї?

обхід

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.