Data Structure II So Pak Yeung
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
Binary Search Tree Find 13
Binary Search Tree Find 3 ???
Binary Search Tree Insert 1 1
Binary Search Tree Insert 3 1 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)!!!
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)!!!
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
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
Heap
Heap
Heap
Heap Insert an element Add the node at the end Shift up Time complexity O(lg N)
Heap Add 1 1
Heap
Heap
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, ] Not a good idea to use an array of size of 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
Hash Table Close hashing Insert 1 If the cell is occupied, find the next empty cell