Spatial & Temporal Queries on a Planar Graph

Amazon Spatial and temporal queries on a planar graph are a family of long standing problems in graph and theory.
Basically on a planar network, which can be likened to a road network or world-wide Internet network, we want to find, for example, the closest neighbor of a node.
Our team needs to do a survey on different approaches to solve these problems and try to generalize the approaches. The papers include the following:

  • [SKS02] C.Shahabi and M.R.K.M. Sharifzadeh. A road network embedding technique for k-nearest neighbor search in moving object databases. In ACM-GIS 2002, McLean, VA.
  • [PZMT03] D.Papadias, J.Zhang, N.Mamoulis, and Y.Tao. Query Processing in Spatial Network Databases. In VLDB 2003, Berlin, Germany.
  • [JKPT03] C. S. Jensen and J. Kolarvr and T. B. Pedersen and I. Timko. Nearest Neighbor Queries in Road Networks. In ACMGIS 2003, New Orleans, Louisiana, USA.
  • [KS04] M. Kolahdouzan and C. Shahabi. Voronoi-based K Nearest Neighbor Search for Spatial Network Databases. In VLDB 2004, Toronto, Canada.
  • [OBSC00] A. Okabe and B. Boots and K. Sugihara and S. N. Chiu. Spatial Tessellations, Concepts and Applications of Voronoi Diagrams. John Wiley and Sons Ltd., 2nd edition, 2000.
  • [GKR04] S. Gupta and S. Kopparty and C. Ravishankar. 'Roads, Codes, and Spatiotemporal Queries', In PODS 2004, Paris, France.
This is actually a class assignment, but I extended it by coming up with a data structure that allows faster search time than the brute force way in the implementation of Roads, Codes, and Spatiotemporal Queries. The paper doesn't discuss how to efficiently search the codes to get the nearest neighbor of a query code.

Anyway, it all comes down to given a set of binary codes of the same length, given another binary codes of the same length find the one that has the smallest hamming distance to it. For example if your structure has:

10110
00000
11111
11110
01111

And your query is '01110', then you should give '01111' as the result since it is closest to '01110' hammingly. Obviously you can do this by storing the codes in a linear structure and simply going through them linearly for the answer (commonly known as the brute force way), but a better, faster approach should exist. It is what I call a 'Hamming tree' since to my knowledge nobody has beat me to it yet. You build a tree in which each pair of nodes that shares a tree edge has a Hamming distance of 1. There is more to it than that, but I wouldn't want to stifle you with all the details. Of course you are always welcome to ask me if you have questions.

The following is a table showing the performance of my Hamming tree against the brute force (Each code has 20 bits. Running time results are expressed in seconds):

Number of codes 10,000 50,000 100,000
Brute Force
k=1
k=20
k=50

.0299
.0599
.07

.1
.1899
.2599

.0599
.3199
.4099
Hamming Tree
k=1
k=20
k=50

0
.0599
.25

0
.0099
.0799

0
.0099
.0799

As you can see when the number of nodes is very high, Hamming Tree does a lot better than brute force. However, from a practical point of view the code size grows as O(square root of n), where n is the number of nodes.
Therefore a code usually has a lot more than 20 bits, in which case building a Hamming tree takes too long.
Anyway, it is a starting point for more serious research in this area because my hunch just tells me that a better way than brute force almost always exists!
Post your comment below.
Anything is okay.
I am serious.