230 likes | 316 Views
Finding Min & Max. Given a collection Output Find the minimum. 7. 12. 5. 22. 3. 32. Find Min. Function find_min ( Arr Array, N Num ) m in_val Arr [0] For ( i = 1; i < N; i ++) If ( min_val > Arr [ i ]) Then min_val = Arr [ i ]; Endif Endfor End find_min ;. 7.
E N D
Finding Min & Max • Given a collection • Output • Find the minimum 7 12 5 22 3 32
Find Min Function find_min(Arr Array, N Num) min_val Arr[0] For (i = 1; i < N; i++) If ( min_val > Arr[i]) Then min_val = Arr[i]; Endif Endfor End find_min; 7 12 5 22 3 32 7
Find Min Function find_min(Arr Array, N Num) min_val Arr[0] For (i = 1; i < N; i++) If ( min_val > Arr[i]) Then min_val = Arr[i]; Endif Endfor End find_min; 7 12 5 22 3 32 7
Find Min Function find_min(Arr Array, N Num) min_val Arr[0] For (i = 1; i < N; i++) If ( min_val > Arr[i]) Then min_val = Arr[i]; Endif Endfor End find_min; 7 12 5 22 3 32 7
Find Min Function find_min(Arr Array, N Num) min_val Arr[0] For (i = 1; i < N; i++) If ( min_val > Arr[i]) Then min_val = Arr[i]; Endif Endfor End find_min; 7 12 5 22 3 32 5
Find Min Function find_min(Arr Array, N Num) min_val Arr[0] For (i = 1; i < N; i++) If ( min_val > Arr[i]) Then min_val = Arr[i]; Endif Endfor End find_min; 7 12 5 22 3 32 5
Find Min Function find_min(Arr Array, N Num) min_val Arr[0] For (i = 1; i < N; i++) If ( min_val > Arr[i]) Then min_val = Arr[i]; Endif Endfor End find_min; 7 12 5 22 3 32 5
Find Min Function find_min(Arr Array, N Num) min_val Arr[0] For (i = 1; i < N; i++) If ( min_val > Arr[i]) Then min_val = Arr[i]; Endif Endfor End find_min; 7 12 5 22 3 32 3
Find Min Function find_min(Arr Array, N Num) min_val Arr[0] For (i = 1; i < N; i++) If ( min_val > Arr[i]) Then min_val = Arr[i]; Endif Endfor End find_min; 7 12 5 22 3 32 3
Find Min: Algorithm Analysis Function find_min(Arr Array, N Num) min_val Arr[0] For (i = 1; i < N; i++) If ( min_val > Arr[i]) Then min_val = Arr[i]; Endif Endfor End find_min; Loop executes N-1 times (N-1 comparisons)
What About • Find the maximum • Same as find minimum • Needs N-1 comparisons • Find the minimum and maximum • Find the minimum N-1 comparisons • Find the maximum N-1 comparisons • Total 2(N-1) comparisons Can we do better ??
Find Min & Max: Naïve Way Function find_min(Arr Array, N Num) min_val Arr[0] max_val Arr[0] For (i = 1; i < N; i++) If ( min_val > Arr[i]) Then min_val = Arr[i]; Endif If ( max_val < Arr[i]) Then max_val = Arr[i]; Endif Endfor End find_min; Loop N-1 times 2 comparisons
Find Min & Max: Better Way • Step 1: Compare pairs together • Move the smaller value to SmallList • Move the larger value to LargeList 7 12 5 22 3 32 7 5 3 12 22 32 LargeList SmallList
Find Min & Max: Better Way • Step 1: Compare pairs together • Move the smaller value to SmallList • Move the larger value to LargeList 7 12 5 22 3 32 So far N/2 comparisons 7 5 3 12 22 32 LargeList SmallList
Find Min & Max: Better Way • Step 2: Get Min and Max • Get min from SmallList (using naïve way) (N/2 -1) comparisons • Get max from LargeList (using naïve way) (N/2 -1) comparisons • Total = 3 (N/2) - 2 comparisons 7 5 3 12 22 32 LargeList SmallList Max = 32 Min = 3
Find Min & Max: Better Way • Step 2: Get Min and Max • Get min from SmallList (using naïve way) (n/2 -1) comparisons • Get max from LargeList (using naïve way) (n/2 -1) comparisons • Total:~= 3 (N/2) comparisons Wait !!!! There is a hidden extra cost What about Memory Usage? 7 5 3 12 22 32 LargeList SmallList Max = 32 Min = 3
Analysis of the Two Algorithms • Naïve Way • (Time = CPU = Number of comparisons) 2(N-1) • (Memory = Storage) 2 extra spaces • Other way • (Time = CPU = Number of comparisons) 3(N/2) -2 • (Memory = Storage) N extra spaces
Ok…We can do better • Make the SmallList and LargeList only one item • When you add to either lists compare with the existing value and replace if needed • Now Storage 2 extra spaces only 7 12 5 22 3 32 SmallList LargeList
Ok…We can do better • Make the SmallList and LargeList only one item • When you add to either lists compare with the existing value and replace if needed • Now Storage 2 extra spaces only 7 12 5 22 3 32 7 12 SmallList LargeList
Ok…We can do better • Make the SmallList and LargeList only one item • When you add to either lists compare with the existing value and replace if needed • Now Storage 2 extra spaces only 7 12 5 22 3 32 5 22 SmallList LargeList
Ok…We can do better • Make the SmallList and LargeList only one item • When you add to either lists compare with the existing value and replace if needed • Now Storage 2 extra spaces only 7 12 5 22 3 32 3 32 SmallList LargeList
Analysis of the Two Algorithms • Naïve Way • (Time = CPU = Number of comparisons) 2(N-1) • (Memory = Storage) 2 extra spaces • Other way • (Time = CPU = Number of comparisons) 3(N/2)-2 • (Memory = Storage) 2 extra spaces