Wählen Sie zwei Zahlen aus , die sich unter Verwendung der sublinearen Abfragezeit zu


9

Hier ist ein Problem mit dem nächsten Nachbarn.

Wenn die reellen Werte (sehr großes n !) Plus das reelle Ziel p sind , finden Sie ein i und ein j, deren SUMME p am nächsten kommt . Wir erlauben angemessene Vorbearbeitung / Indizierung von einem 1 , ... , eine n (bis O ( n log n ) ), aber zum Zeitpunkt der Abfrage (gegeben p ), sollte das Ergebnis sehr schnell zurückgeführt werden (zB O ( log n ) Zeit).a1,,annpaiajpa1,,anO(nlogn)pO(logn)

(Einfacheres Beispiel: Wenn wir nur das EINZIGE , das p am nächsten kommt , würden wir eine 1 , , ein n offline, O ( n log n ) sortieren und dann zur Abfragezeit eine binäre Suche durchführen, O ( log n ). ).aipa1,,anO(nlogn)O(logn)

Lösungen, die nicht funktionieren:

1) Sortieren Sie offline, beginnen Sie dann zur Abfragezeit an beiden Enden und bewegen Sie zwei Zeiger nach innen ( http://bit.ly/1eKHHDy ). Nicht gut, wegen O ( n ) Abfragezeit.a1,,anO(n)

2) Sortieren Sie offline, nehmen Sie dann zur Abfragezeit jedes a i und führen Sie eine binäre Suche nach einem "Kumpel" durch, der dazu beiträgt, dass sich etwas in der Nähe von p summiert . Nicht gut, da die Abfragezeit O ( n log n ) ist.a1,,anaipO(nlogn)

3) Sortieren Sie alle Paare offline und führen Sie dann eine binäre Suche durch. Nicht gut, da O ( n 2 ) vorverarbeitet wurde.(a1,,an)O(n2)

Vielen Dank!

a1,,anpk


O(n)O(lgn)

nn

Ich habe keinen Grund zu der Annahme, dass das Abfragen schnell gehen kann, aber viele nützliche Ergebnisse für die nächsten Nachbarn (kd-Bäume, ortsabhängiges Hashing usw.) scheinen mir kontraintuitiv gut zu sein. Eine ungefähre Lösung mit lokalitätsempfindlichem Hashing wäre für den praktischen Gebrauch in Ordnung.
Kevin

Antworten:


17

Dies ist mit ziemlicher Sicherheit unmöglich.

P(n)Q(n)nP(n)+nQ(n)akai+ajakak

O(n2)Ω(n2)Ω(n2/polylogn)

Unter der Annahme, dass die Vermutung richtig ist, erfordert Ihr Problem entweder eine (nahezu) quadratische Vorverarbeitungszeit oder eine (nahezu) lineare Abfragezeit.


2

Wenn Sie während der Vorverarbeitung unbegrenzten Speicherplatz und unbegrenzte Zeit verwenden können, entspricht die folgende Lösung Ihren Anforderungen:

  • {ai+aj:1ijn}O(n2)O(n2)

  • ai,ajai+ajpO(lgn)

Wenn diese Lösung nicht akzeptabel ist, müssen Sie Ihre Anforderungen genauer durchdenken und die Frage entsprechend bearbeiten.


Hallo und danke! Ihre Lösung ist jedoch dieselbe wie meine Lösung Nr. 3, die aufgrund der Vorverarbeitungszeit von O (n ^ 2) problematisch ist. In meinem Fall ist n sehr groß (z. B. 1 m) und ich muss O (n ^ 2) -Operationen vermeiden.
Kevin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.