23.11.2014 Views

Data Structures and Algorithms in Java[1].pdf - Fulvio Frisone

Data Structures and Algorithms in Java[1].pdf - Fulvio Frisone

Data Structures and Algorithms in Java[1].pdf - Fulvio Frisone

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

describe this structure, however, let us discuss how <strong>in</strong>sertions <strong>and</strong> removals are<br />

h<strong>and</strong>led <strong>in</strong> (a,b) trees.<br />

The <strong>in</strong>sertion algorithm for an (a, b) tree is similar to that for a (2,4) tree. An<br />

overflow occurs when an entry is <strong>in</strong>serted <strong>in</strong>to a b-node v, which becomes an<br />

illegal (b + 1)-node. (Recall that a node <strong>in</strong> a multi-way tree is a d-node if it has d<br />

children.) To remedy an overflow, we split node v by mov<strong>in</strong>g the median entry of<br />

v <strong>in</strong>to the parent of v <strong>and</strong> replac<strong>in</strong>g v with a (b + l)/2 -node v ′ <strong>and</strong> a (b +<br />

1)/2 node v ′. We can now see the reason for requir<strong>in</strong>g a ≤ (b + 1)/2 <strong>in</strong> the<br />

def<strong>in</strong>ition of an (a,b) tree. Note that as a consequence of the split, we need to<br />

build the secondary structures D(v ′) <strong>and</strong> D(v ′′).<br />

Remov<strong>in</strong>g an entry from an (a, b) tree is similar to what was done for (2,4) trees.<br />

An underflow occurs when a key is removed from an a-node v, dist<strong>in</strong>ct from the<br />

root, which causes v to become an illegal (a − 1)-node. To remedy an underflow,<br />

we perform a transfer with a sibl<strong>in</strong>g of v that is not an a-node or we perform a<br />

fusion of v with a sibl<strong>in</strong>g that is an a-node. The new node w result<strong>in</strong>g from the<br />

fusion is a (2a − 1)-node, which is another reason for requir<strong>in</strong>g a≤(b + 1)/2.<br />

Table 14.1 shows the performance of a dictionary realized with an (a, b) tree.<br />

Table 14.1: Time bounds for an n-entry dictionary<br />

realized by an (a,b) tree T. We assume the secondary<br />

structure of the nodes of T support search <strong>in</strong> f(b) time,<br />

<strong>and</strong> split <strong>and</strong> fusion operations <strong>in</strong> g(b) time, for some<br />

functions f(b) <strong>and</strong> g(b), which can be made to be O(1)<br />

when we are only count<strong>in</strong>g disk transfers.<br />

14.3.2 B-Trees<br />

A version of the (a, b) tree data structure, which is the best known method for<br />

ma<strong>in</strong>ta<strong>in</strong><strong>in</strong>g a dictionary <strong>in</strong> external memory, is called the "B-tree." (See Figure<br />

14.6.) A B-tree of order d is an (a, b) tree with a = d/2 <strong>and</strong> b = d. S<strong>in</strong>ce we<br />

903

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

Saved successfully!

Ooh no, something went wrong!