Compressed Binary Bit Trees: A New Data Structure For Accelerating

Feb 4, 2009 - Molecules are often represented as bit string fingerprints in databases. These bit strings are used for similarity searching using the T...
1 downloads 0 Views 452KB Size
J. Chem. Inf. Model. 2009, 49, 257–262

257

Compressed Binary Bit Trees: A New Data Structure For Accelerating Database Searching Andrew Smellie* CambridgeSoft Corporation, 100 CambridgePark Drive, Cambridge, Massachusetts 02104 Received September 8, 2008

Molecules are often represented as bit string fingerprints in databases. These bit strings are used for similarity searching using the Tanimoto coefficient and rapid indexing. A new data structure is introduced, the compressed bit binary tree, that rapidly increases search and indexing times by up to a factor of 30. Results will be shown for databases of up to 1 M compounds with a variety of search parameters. 1. INTRODUCTION

Commonly, molecular structure is encoded in databases as a bit string or fingerprint. The bits in the fingerprint encode for the presence of certain functional groups or substructures in the molecule, as shown in Figure 1. Typically, fragments of molecules are identified and hashed to a short integer that is the index of a bit in the fingerprint to which the fragments map.1,2 Fingerprints tend to be short ( Tmin are deemed to be “similar” to Q. To perform a similarity search with the Tanimoto lookahead and the bit binary tree, the query is marched through the tree subject to the following traversal algorithm. Any node in the tree (for example, node P at depth d in Figure 5) defines a partial bit string. Any leaf node (at which a molecule is stored) which is reached via node P will have the first d bits in common in their bit strings. Defining: • B(n,d) ) partial bit string formed from the path traversed through the bit binary tree from the root node to node n at depth d • Q(d) ) partial bit string formed from the first d bits of the query • QL(d) ) the total number of ON bits in the query after position d in the bitstring Then we can define the terms RUC(n, d) ) B(n, d) ∪ Q(d) This is the running union count and computes the total number of ON bits between the first d bits of the query and the partial bit string from the tree at node n. RUC(n, d) ) B(n, d) ∩ Q(d) This is the running intersection count and computes the total number of ON bits in common between the first d bits of the query and the partial bit string from the tree at node n. As an example, the partial bit string from the tree traversal at node P is 0001 (three left traversals and one right traversal). The partial bit string from the query is 0011. Thus the running union count at P using query Q is |0001 ∪ 0011| ) 2, and the running intersection count is |0001 ∩ 0011| ) 1.

GVCOMPRESSED

BINARY BIT TREES

J. Chem. Inf. Model., Vol. 49, No. 2, 2009 261

Table 4. Inverted Screening with a Compressed Bit Binary Tree

set size

total number of tree nodes

number of tree nodes per molecule

mean number of inverted screen hits

mean brute force search time (ms)

mean bit tree search time (ms)

mean percent tree nodes visited

10000 100000 450477 967749

455,171 4,948,210 20,740,319 45,557,420

45.5 49.48 46.0 47.1

110.6 1151.72 5640.04 14573.32

7.12 79.36 340.6 699.7

0.66 7.0 29.65 73.57

5.36 4.32 4.51 5.22

Table 5. Similarity Search with a Compressed Bit Binary Tree set size 10000 100000 450477 967749 10000 100000 450477 967749 10000 100000 450477 967749 10000 100000 450477 967749

mean brute mean bit mean percent search mean number force search tree search tree nodes time (ms) time (ms) visited radiusa of hitsb 0.6 0.6 0.6 0.6 0.7 0.7 0.7 0.7 0.8 0.8 0.8 0.8 0.9 0.9 0.9 0.9

41.1 242.21 686.51 2040.56 18.86 91.56 234.04 610.98 9.47 37.66 92.5 192.92 3.86 11.9 28.3 53.65

10.1 101.89 434.58 898.61 10.0 101.73 434.29 896.96 9.55 101.63 434.62 892.07 9.54 101.71 434.75 892.52

4.5 48.58 168.08 363.97 3.0 31.06 104.31 227.16 1.67 16.33 52.8 115.74 0.47 4.13 11.79 27.95

21.95 18.8 15.70 15.84 13.75 10.99 8.8 9.01 7.0 4.96 3.77 3.95 1.84 0.96 0.64 0.71

a Using each test molecule as a query, all molecules in the set are retrieved within this Tanimoto distance of the query. b All values are averaged using the first 2000 molecules as queries against the entire set of molecules.

Recalling the definition of Tanimoto distance from eq 1, the distance between the query molecule and any target molecule is defined as the number of ON bits the molecules have in common divided by the total number of ON bits between the target and the molecule. As we traverse the bit binary tree guided by the query we can assess at any node whether molecules reached at the leaves of the tree by traversing through that node can possibly have a Tanimoto score that is greater than or equal than the user-defined value. At any node P, the maximum value the Tanimoto distance can possibly be between the query Q and any molecule that is reached by traversing the bit binary tree through node P is given by RIC(p, d) + QL(d) (2) RUC(p, d) + QL(d) The Tanimoto lookahead condition is now trivially stated T(P, Q) )

T(P, Q) < Tmin (3) The tree traversal can be terminated at node P if eq 3 is TRUE. Intuitively, the tree pruning will be more effective at high user-defined similarity thresholds. The performance of molecular similarity searching in the bit binary tree can be seen in Table 3, where molecular databases of different sizes are searched using the first 2000 molecules in each database as test queries. Searches were performed at different user-defined similarity thresholds of 0.6, 0.7, 0.8, and 0.9, respectively. Tree search times were compared against brute force search times (where the bitstrings of all molecules were held in memory and the

Tanimoto distance was measured between each molecule and the target query). At lower similarity thresholds, brute force searching was faster than tree searching. This is because more tree nodes are traversed for lower values of the user defined similarity threshold (eq 3). For a threshold of 0.6, between 12% and 15% of tree nodes were traversed for different database sizes. Tree searching begins to get faster than brute force searching at higher user similarity thresholds (>0.7). At high similarity thresholds (0.9) the tree search is significantly faster as only a small fraction of the tree nodes are being traversed (