17.01.2013 Views

Algorithms and Data Structures for External Memory

Algorithms and Data Structures for External Memory

Algorithms and Data Structures for External Memory

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!