+ All Categories
Home > Documents > ALGORITHMS THIRD YEAR

ALGORITHMS THIRD YEAR

Date post: 09-Jan-2016
Category:
Upload: grady
View: 35 times
Download: 0 times
Share this document with a friend
Description:
ALGORITHMS THIRD YEAR. BANHA UNIVERSITY FACULTY OF COMPUTERS AND INFORMATIC. Lecture six. Dr. Hamdy M. Mousa. Binary search trees. Search trees. Search trees are data structures that support many dynamic-set operations, Data structures that support many dynamic-set operations. - PowerPoint PPT Presentation
27
ALGORITHMS THIRD YEAR BANHA UNIVERSITY FACULTY OF COMPUTERS AND INFORMATIC Lecture six Dr. Hamdy M. Mousa
Transcript
Page 1: ALGORITHMS THIRD YEAR

ALGORITHMS

THIRD YEAR

BANHA UNIVERSITYFACULTY OF COMPUTERS AND INFORMATIC

Lecture six

Dr. Hamdy M. Mousa

Page 2: ALGORITHMS THIRD YEAR

Binary search trees

Page 3: ALGORITHMS THIRD YEAR

• Search trees are data structures that support many dynamic-set operations,

• Data structures that support many dynamic-set operations.• Including SEARCH, MINIMUM, MAXIMUM,

PREDECESSOR, SUCCESSOR, INSERT, and DELETE.• Can be used as both a dictionary and as a priority queue.• Basic operations take time proportional to the height of the

tree.• For complete binary tree with n nodes: worst case (lg n).• For linear chain of n nodes: worst case (n).• We will cover binary search trees, tree walks, and

operations on binary search trees.

Search trees

Page 4: ALGORITHMS THIRD YEAR

Binary search treesBinary search trees are an important data structure for

dynamic sets.• Accomplish many dynamic-set operations in O(h) time,

where h = height of tree.• we represent a binary tree by a linked data structure in

which each node is an object.• root[T ] points to the root of tree T .• Each node contains the fields• key (and possibly other satellite data).• left: points to left child.• right: points to right child.• p: points to parent. p[root[T ]] = NIL.• Stored keys must satisfy the binary-search-tree property.

– If y is in left subtree of x, then key[y] ≤ key[x].– If y is in right subtree of x, then key[y] ≥ key[x].

Page 5: ALGORITHMS THIRD YEAR

Draw sample tree

• [This is Figure 12.1(a) from the text, using A, B, D, F, H, K in place of 2, 3, 5,5, 7, 8, with alphabetic comparisons. It’s OK to have duplicate keys, though there are none in this example. Show that the binary-search-tree property holds.]

• The binary-search-tree property allows us to print out all the keys in a binary search tree in sorted order by a simple recursive algorithm, called an inorder tree walk.

• Elements are printed in monotonically increasing order.

Page 6: ALGORITHMS THIRD YEAR

How INORDER-TREE-WALK works

• Check to make sure that x is not NIL.• Recursively, print the keys of the nodes in x’s left subtree.• Print x’s key.• Recursively, print the keys of the nodes in x’s right subtree

• Use the following procedure to print all the elements in a binary search tree T ,

INORDER-TREE-WALK(x)if x ≠ NIL

then INORDER-TREE-WALK(left[x])print key[x]INORDER-TREE-WALK(right[x])

Page 7: ALGORITHMS THIRD YEAR
Page 8: ALGORITHMS THIRD YEAR

If x is the root of an n-node subtree, then the call INORDER-TREE-WALK(x) takes (n) time.Proof Let T (n) is the time taken by INORDER-TREE-WALK when it is called on the root of an n-node subtree. INORDER-TREE-WALK takes a small, constant amount of time on an empty subtree (for the test x = NIL), and so

T (0) = cfor some positive constant c.

For n > 0, suppose that INORDER-TREE-WALK is called on a node x whose left subtree has k nodes and whose right subtree has n − k − 1 nodes.The time to perform INORDER-TREE-WALK(x) is

T (n) = T (k)+ T (n −k −1)+d

Theorem

Page 9: ALGORITHMS THIRD YEAR

Substitution methodWe use the substitution method to show that T (n)

= (n) by proving thatFor n = 0

T (n) = (c + d)n + c (c + d) . 0 + c = c = T (0).

For n > 0,T (n) = T (k) + T (n − k − 1) + d

= ((c + d)k + c) + ((c + d)(n − k − 1) + c) + d

= (c + d)n + c − (c + d) + c + d= (c + d)n + c ,

which completes the proof.

Page 10: ALGORITHMS THIRD YEAR

• A common operation performed on a binary search tree is searching for a key stored in the tree.

• Besides the SEARCH operation, binary search trees can support such queries as MINIMUM, MAXIMUM, SUCCESSOR, and PREDECESSOR.

• In this section, we shall examine these operations and show that each can be supported in time O(h) on a binary search tree of height h.

Query ing a binary search tree

Page 11: ALGORITHMS THIRD YEAR

• Given a pointer to the root of the tree and a key k, • TREE-SEARCH returns a pointer to a node with key k

if one exists; otherwise, it returns NIL.• The procedure begins its search at the root and

traces a path downward in the tree,

TREE-SEARCH(x, k)if x = NIL or k = key[x]

then return xif k < key[x]

then return TREE-SEARCH(left[x], k)else return TREE-SEARCH(right[x], k)

Initial call is TREE-SEARCH(root[T ], k).

Searching

Page 12: ALGORITHMS THIRD YEAR

• Queries on a binary search tree. • To search for the key 13 in the tree, • we follow the path 15 → 6 → 7 → 13 from the root.

Searching

Page 13: ALGORITHMS THIRD YEAR

• The nodes encountered during the recursion form a path downward from the root of the tree,

• the running time of TREE-SEARCH is O(h), where h is the height of the tree.

• The same procedure can be written iteratively by “unrolling” the recursion into a while loop.

• On most computers, this version is more efficient.

ITERATIVE-TREE-SEARCH(x, k) while x NIL and k key[x]

do if k < key[x]then x ← left[x]

else x ← right[x] return x

TREE-SEARCH

Page 14: ALGORITHMS THIRD YEAR

The binary-search-tree property guarantees that:– the minimum key of a binary search tree is

located at the leftmost node, and– the maximum key of a binary search tree is

located at the rightmost node.

Traverse the appropriate pointers (left or right) until NIL is reached.

Minimum and maximum

Page 15: ALGORITHMS THIRD YEAR

TREE-MINIMUM(x)while left[x] NIL

do x ← left[x]return x

TREE-MAXIMUM(x)while right[x] NIL

do x ← right[x]return x

• Time: Both procedures visit nodes that form a downward path from the root to a leaf.

• Both procedures run in O(h) time, where h is the height of the tree.

Minimum and maximum

Page 16: ALGORITHMS THIRD YEAR

• Assuming that all keys are distinct, the successor of a node x is the node y such that key[y] is the smallest key > key[x]. (We can find x’s successor based entirely on the tree structure. No key comparisons are necessary.) If x has the largest key in the binary search tree, then we say that x’s successor is NIL.

There are two cases:1. If node x has a non-empty right subtree, then x’s

successor is the minimum in x’s right subtree.2. If node x has an empty right subtree, notice that:

– As long as we move to the left up the tree (move up through right children), we’re visiting smaller keys.

– x’s successor y is the node that x is the predecessor of (x is the maximum in y’s left subtree).

Successor and predecessor

Page 17: ALGORITHMS THIRD YEAR

TREE-SUCCESSOR(x) if right[x] NIL

then return TREE-MINIMUM(right[x])y ← p[x]while y NIL and x = right[y]

do x ← y y ← p[y]

return y

• TREE-PREDECESSOR is symmetric to TREE-SUCCESSOR.• Time: For both the TREE-SUCCESSOR and TREE-

PREDECESSOR procedures, in both cases, we visit nodes on a path down the tree or up the tree.

• Thus, running time is O(h), where h is the height of the tree.

Successor and predecessor

Page 18: ALGORITHMS THIRD YEAR

• Find the successor of the node with key value 15. (Answer: Key value 17)• Find the successor of the node with key value 6. (Answer: Key value 7)• Find the successor of the node with key value 4. (Answer: Key value 6)• Find the predecessor of the node with key value 6. (Answer: Key value 4)

Example:

Page 19: ALGORITHMS THIRD YEAR

• Insertion and deletion allows the dynamic set represented by a binary search tree to change.

• The binary-search-tree property must hold after the change. Insertion is more straightforward than deletion.

Insertion and deletion

Page 20: ALGORITHMS THIRD YEAR

• To insert a new value v into a binary search tree T , we use the procedure TREEINSERT.

• The procedure is passed a node z for which key[z] = v, left[z] = NIL, and right[z] = NIL.

• It modifies T and some of the fields of z in such a way that z is inserted into an appropriate position in the tree.

Insertion

Page 21: ALGORITHMS THIRD YEAR

TREE-INSERT(T, z)y ← NILx ← root[T ]while x = NIL

do y ← x if key[z] < key[x] then x ← left[x]

else x ← right[x]p[z] ← yif y = NIL then root[T ] ← z Tree T was empty

else if key[z] < key[y] then left[y] ← z else right[y] ← z

TREE-INSERT procedure

Page 22: ALGORITHMS THIRD YEAR

• Inserting an item with key 13 into a binary search tree. Lightly shaded nodes indicate the path from the root down to the position where the item is inserted.

• The dashed line indicates the link in the tree that is added to insert the item.

Example

Page 23: ALGORITHMS THIRD YEAR

TREE-DELETE is broken into three cases.Case 1: z has no children.

– Delete z by making the parent of z point to NIL, instead of to z.

Case 2: z has one child.– Delete z by making the parent of z point to z’s child,

instead of to z.

Case 3: z has two children.– z’s successor y has either no children or one child. (y is

the minimum node-with no left child-in z’s right subtree.)– Delete y from the tree (via Case 1 or 2).– Replace z’s key and satellite data with y’s.

Deletion

Page 24: ALGORITHMS THIRD YEAR
Page 25: ALGORITHMS THIRD YEAR

z has no children

If z has no children, we just remove it.

Page 26: ALGORITHMS THIRD YEAR

z has only one child

If z has only one child, we splice out z.

Page 27: ALGORITHMS THIRD YEAR

z has two children

If z has two children, we splice out its successor y, which has at most one child, and then replace z’s key and satellite data with y’s key and satellite data.


Recommended