Top Banner
ALGORITHMS THIRD YEAR BANHA UNIVERSITY FACULTY OF COMPUTERS AND INFORMATIC Lecture six Dr. Hamdy M. Mousa
27

ALGORITHMS THIRD YEAR

Jan 09, 2016

Download

Documents

Grady

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
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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.