180 likes | 189 Views
Learn about Big-Oh, Little-Oh, Theta notations, Selection Sort algorithm, and Binary Search in this tutorial. Explore O, Ω, Θ complexities with helpful examples. Improve sorting algorithms for better performance.
E N D
COMP 171Data Structures and Algorithms Tutorial 2 Analysis of algorithms
Ο-notation • Big-Oh • f(n) =Ο(g(n)) • Ο(g(n)) = {f(n) : there exist positive constants c and n0 such that 0≦f(n)≦cg(n) for all n≧n0} • Upper bound • Worst-case running time
ο-notation • Little-Oh • f(n) =ο(g(n)) • ο(g(n)) = {f(n) : for any positive constants c and n0 such that 0≦f(n)<cg(n) for all n≧n0} • Non-tight upper bound
Ω-notation • Big-Omega • f(n) =Ω(g(n)) • Ω(g(n)) = {f(n) : there exist positive constants c and n0 such that 0 ≦cg(n)≦f(n) for all n≧n0} • Lower bound • Best-case running time
ω-notation • Little-Omega • f(n) = ω(g(n)) • ω(g(n)) = {f(n) : for any positive constants c and n0 such that 0 ≦cg(n)<f(n) for all n≧n0} • Non-tight lower bound
Θ-notation • Theta • f(n) =Θ(g(n)) • Θ(g(n)) = {f(n) : there exist positive constants c1, c2 and n0 such that 0≦c1g(n)≦f(n)≦c2g(n) for all n≧n0} • Tight bound
Transitivity • f(n)=Θ(g(n)), g(n)=Θ(h(n)) →f(n)=Θ(h(n)) • f(n)=Ο(g(n)), g(n)=Ο(h(n)) →f(n)=Ο(h(n)) • f(n)=Ω(g(n)), g(n)=Ω(h(n)) →f(n)=Ω(h(n)) • f(n)=ο(g(n)), g(n)=ο(h(n)) →f(n)=ο(h(n)) • f(n)=ω(g(n)), g(n)=ω(h(n)) →f(n)=ω(h(n))
Reflexivity, Symmetry & Transpose Symmetry • f(n)=Θ(f(n)) • f(n)=Ο(f(n)) • f(n)=Ω(f(n)) • f(n)=Θ(g(n)) if and only if g(n)=Θ(f(n)) • f(n)=Ο(g(n)) if and only if g(n)=Ω(f(n)) • f(n)=ο(g(n)) if and only if g(n)=ω(f(n))
Selection Sort • Input: Array A of Size n • Output: A sorted array A • Algorithm: Find the smallest element of A and exchanging it with the element in A[1]. Then find the second smallest element of A and exchange it with A[2]. Continue for the first n-1 elements in A.
e.g. {5, 2, 4, 7, 3} • Input: {5, 2, 4, 7, 3} • 1st iteration: {2, 5, 4, 7, 3} • 2nd iteration: {2, 3, 4, 7, 5} • 3rd iteration: {2, 3, 4, 7, 5} • 4th iteration: {2, 3, 4, 5, 7} • Output: {2, 3, 4, 5, 7}
Sorted Part Unsorted Part • 1: Find the smallest(m) in the unsorted part • 2: Swap with h • 3: Put m into the sorted part • 4: Back to 1 until unsorted part is size 1 h m m h m
for i ← range 1 min = value min_pos = value for j ← range 2 find min end for j swap(value, value) end for i
for i ← 1 to n-1 min = infinity min_pos = 0 for j ← i to n if A[j] < min then min = A[j] min_pos = j end if end for j swap(A[i], A[min_pos]) end for i
for i ← 1 to n-1 min = infinity min_pos = 0 for j ← i to n if A[j] < min then min = A[j] min_pos = j end if end for j swap(A[i], A[min_pos]) end for i O(1) O(1) O(n) O(n) O(1)
Ο(n2) • Ω(n2)? • Θ(n2)? • In class exercise: • Improve the algorithm so it can achieve: • Ο(n2) • Ω(n) • Given a sorted input sequence, which sorting algorithm(s) can achieve Ω(n)?
Binary Search ….. ….. ….. ….. ….. …..
If tree height is k • The number of elements is 2k+1-1=n • The number of comparison is at most k+1 • k+1 = log22k+1 =log2 (n+1 ) • Ο(㏒ n)