Data Structures and Search Algorithms
Download
Report
Transcript Data Structures and Search Algorithms
Data Structures, Search and Sort
Algorithms
Kar-Hai Chu
[email protected]
Data structures
Storage
Insertion, deletion
Searching
Sorting
Big O
Stacks
LIFO
Push, pop
O(1) operations
Linked lists v. Arrays
Linked lists:
– Resizable
– Insertion/deletion
Arrays:
– Faster index
– O(1) lookup
– Preset size
Hash tables
Keys and values
O(1) lookup
Hash function
– Good v fast
Clustering
Databases
Selection sort :-(
O(n2)
Algorithm:
– Find the minimum value
– Swap with 1st position value
– Repeat with 2nd position down
Insertion sort :-)
O(n2)
O(1) space
Great with small number of elements
(becomes relevant later)
Algorithm:
– Move element from unsorted to sorted list
Bubble sort :-(
O(n2)
Algorithm:
– Iterate through each n, and sort with n+1
element
Maybe go n-1 steps every iteration?
Great for big numbers, bad for small
Totally useless?
Merge sort :-)
O(nlogn)
Requires O(n) extra space
Parallelizable
Algorithm:
– Break list into 2 sublists
– Sort sublist
– Merge
Quick sort :-)
Average O(nlogn), worst O(n2)
O(n) extra space (can optimized for O(logn))
Algorithm:
– pick a pivot
– put all x < pivot in less, all x > pivot in more
– Concat and recurse through less, pivot, and more
Advantages also based on caching, registry
(single pivot comparison)
Variations: use fat pivot
Linear search :-(
O(n)
Examines every item
Binary search :-)
Requires a sorted list
O(log n)
Divide and conquer
Trees
Almost like linked lists!
Traverse: Pre-order v. Post-order v. Inorder
Node, edge, sibling/parent/child, leaf
Binary trees
0, 1, or 2 children per node
Binary Search Tree: a binary tree where
node.left_child < node.value and
node.right_child >= node.value
Balanced binary
trees
Minimizes the level of nodes
Compared with “bad” binary tree?
Advantages:
– Lookup, insertion, removal: O(log n)
Disadvantages:
– Overhead to maintain balance
Heaps (binary)
Complete: all leafs are at n or n-1,
toward the left
Node.value >= child.value
In binary min/max heap
– Insert = O(logn) .. add to bottom, bubble-up
– deleteMax = O(logn) .. Move last to root
and bubble-down
Heapsort
O(nlogn)
Algorithm:
– Build a heap
– deleteMax (or Min) repeatedly
O(1) overhead
Why bother?
Tries (say trees)
– Position determines the key
– Great for lots of short words
– Prefix matching
But..
– Long strings..
– Complex algorithms
Chess!
Minimax:
B: B1
B: B2
B: B3
A: A1
+3
-2
+2
A: A2
-1
0
+4
A: A3
-4
-3
+1
Alpha-beta pruning - pick a bag!
– ordering
Useful
http://www.cs.pitt.edu/~kirk/cs1501/anim
ations/Sort3.html