350 likes | 499 Vues
Data Structure II. So Pak Yeung 26-2-2011. Outline. Review Array Sorted Array Linked List Binary Search Tree Heap Hash Table. Review. Operation Find an element Find the min/max element Insert an element Remove an element Time complexity? O(1)? O(lg N)? O(N)?. Array.
E N D
Data Structure II So Pak Yeung 26-2-2011
Outline • Review • Array • Sorted Array • Linked List • Binary Search Tree • Heap • Hash Table
Review • Operation • Find an element • Find the min/max element • Insert an element • Remove an element • Time complexity? • O(1)? • O(lg N)? • O(N)?
Array • Find an element • O(N) • Find the smallest element • O(N) • Insert an element • O(1) • Remove an element • O(1)
Sorted Array • Find an element • O(lg N) • Find the smallest element • O(1) • Insert an element • O(N) • Remove an element • O(N)
Linked List • Find an element • O(N) • Find the smallest element • O(N) • Insert an element • O(1) • Remove an element • O(1)
Binary Search Tree • Binary Tree • At most 2 children for each node • For each Node i, • Node j <= Node i, for all Node j in left subtree of Node i • Node j > Node i, for all Node j in right subtree of Node i
Binary Search Tree 8 2 21 5 13 34
Binary Search Tree • Find 13 8 2 21 5 13 34
Binary Search Tree • Find 3 8 2 21 5 13 34 ???
Binary Search Tree • Insert 1 8 2 21 1 5 13 34
Binary Search Tree • Insert 3 8 2 21 1 5 13 34 3
Binary Search Tree • Find an element • Seems O(lg N)? • Find min/max • Seems O(lg N)? • Insert an element • Seems O(lg N)?
Binary Search Tree • Worst Case: O(N)!!! 2 5 8 13 21 34
Binary Search Tree • Remove a leaf node • Just Do it! • Remove a node with single child • Replace the node by its child • Remove a node with 2 children • Replace the node by the max node of left subtree / min node of right subtree • Lazy Deletion • Mark the node as deleted instead of deleting it
Binary Search Tree • Again, seems O(lg N), worst Case: O(N)!!! 2 5 8 13 21 34
Heap • Priority Queue • Binary Tree • For each node, it is no greater/less than all nodes of its subtree • Operation • Extract min/max • Insert
Heap 1 2 13 8 5 21 34
Heap • Extract min/max • Get the value from the root (O(1) to find min) • Replace the root by the last node • Shift down • Time complexity • O(lg N)
Heap • Get 1 1 2 13 8 5 21 34
Heap 34 2 13 8 5 21
Heap 2 34 13 8 5 21
Heap 2 5 13 8 34 21
Heap • Insert an element • Add the node at the end • Shift up • Time complexity • O(lg N)
Heap • Add 1 2 5 13 8 34 21 1
Heap 2 5 1 8 34 21 13
Heap 1 5 2 8 34 21 13
Heap • Build heap • Insert each node • O(N lg N) • There exists a faster way!! • Only need to perform shift down process from the bottom • O(N)
Heap • Find an element • Not support • O(N), if implement by array • Remove an element • Consider that subtree • O(lg N)
Hash Table • Using limited memory, storing data of unlimited range • Convert data to integers that are in a limited range by a hash function
Hash Table • Mark 5 number • Each number is between [1,10000000] • Not a good idea to use an array of size of 10000000 • A[n%5]=n
Hash Table • Insert an element • O(1) • Find an element • Using the same Hash function! • O(1) • Delete an element • Lazy Deletion • O(1)
Hash Table • Collision? • E.g. 56 and 111 • Open Hashing • Close Hashing
Hash Table Opening Hashing 0 1 56 111 2 127 3 4
Hash Table • Close hashing • Insert 1 • If the cell is occupied, find the next empty cell