Algorithms and Data Structures for External Memory
Algorithms and Data Structures for External Memory
Algorithms and Data Structures for External Memory
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
112 Spatial <strong>Data</strong> <strong>Structures</strong> <strong>and</strong> Range Search<br />
provide an elegant <strong>and</strong> optimal static data structure <strong>for</strong> three-sided<br />
range search, which can be used in the EM priority search tree described<br />
above to implement the child caches of size O(B 2 ). The static structure<br />
is a persistent B-tree optimized <strong>for</strong> batched construction. When used<br />
<strong>for</strong> O(B 2 ) points, it occupies O(B) blocks, can be built in O(B) I/Os,<br />
<strong>and</strong> supports three-sided queries in O � ⌈Z ′ /B⌉ � I/Os per query, where<br />
Z ′ is the number of points reported. The static structure is so simple<br />
that it may be useful in practice on its own.<br />
Both the three-sided structure developed by Arge et al. [50] <strong>and</strong><br />
the structure <strong>for</strong> two-sided diagonal queries discussed in Section 12.3<br />
satisfy Criteria 1–3 of Chapter 12. So in a sense, the three-sided<br />
query structure subsumes the diagonal two-sided structure, since<br />
three-sided queries are more general. However, diagonal two-sided<br />
structure may prove to be faster in practice, because in each of its<br />
corner substructures, the data accessed during a query are always in<br />
contiguous blocks, whereas the static substructures used in three-sided<br />
search do not guarantee block contiguity.<br />
On a historical note, earlier work on two-sided <strong>and</strong> three-sided<br />
queries was done by Ramaswamy <strong>and</strong> Subramanian [289] using the<br />
notion of path caching; their structure met Criterion 1 but had higher<br />
storage overheads <strong>and</strong> amortized <strong>and</strong>/or nonoptimal update bounds.<br />
Subramanian <strong>and</strong> Ramaswamy [323] subsequently developed the prange<br />
tree data structure <strong>for</strong> three-sided queries, with optimal linear<br />
disk space <strong>and</strong> nearly optimal query <strong>and</strong> amortized update bounds.<br />
12.5 General Orthogonal 2-D Range Search<br />
The dynamic data structure <strong>for</strong> three-sided range searching can be generalized<br />
using the filtering technique of Chazelle [98] to h<strong>and</strong>le general<br />
four-sided queries with optimal I/O query bound O(log B N + z) <strong>and</strong><br />
optimal disk space usage O � n(logn)/log(log B N +1) � [50]. The update<br />
bound becomes O � (log B N)(logn)/log(log B N +1) � , which may not be<br />
optimal.<br />
The outer level of the structure is a balanced (log B N + 1)-way 1-D<br />
search tree with Θ(n) leaves, oriented, say, along the x-dimension. It<br />
there<strong>for</strong>e has about (logn)/log(log B N + 1) levels. At each level of the