1 / 81

COP 3503 FALL 2012 Shayan Javed Lecture 15

COP 3503 FALL 2012 Shayan Javed Lecture 15. Programming Fundamentals using Java. Algorithms Searching. So far. Focused on Object-Oriented concepts in Java Going to look at some basic computer science concepts: algorithms and more data structures. Algorithm.

Télécharger la présentation

COP 3503 FALL 2012 Shayan Javed Lecture 15

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. COP 3503 FALL 2012ShayanJavedLecture 15 Programming Fundamentals using Java

  2. Algorithms Searching

  3. So far... • Focused on Object-Oriented concepts in Java • Going to look at some basic computer science concepts: algorithms and more data structures.

  4. Algorithm An algorithm is an effective procedure for solving a problem expressed as a finite sequence of instructions. “effective procedure” = program

  5. Pseudocode • A compact and informal description of algorithms using the structural conventions of a programming language and meant for human reading.

  6. Pseudocode • A compact and informal description of algorithms using the structural conventions of a programming language and meant for human reading. • A text-based design tool that helps programmers to develop algorithms.

  7. Pseudocode • A compact and informal description of algorithms using the structural conventions of a programming language and meant for human reading. • A text-based design tool that helps programmers to develop algorithms. • Basically, write out the algorithm in steps which humans can understand • and can be converted to a programming language

  8. Searching • Ability to search data is extremely crucial.

  9. Searching • Ability to search data is extremely crucial. • Searching the whole internet is always a problem. (Google/Bing/...Altavista).

  10. Searching • Ability to search data is extremely crucial. • Searching the whole internet is always a problem. (Google/Bing/...Altavista). • Too complex of course.

  11. Searching • The problem: • Search an array A.

  12. Searching • The problem: • Search an array A. • N – Number of elements in the array

  13. Searching • The problem: • Search an array A. • N – Number of elements in the array • k – the value to be searched

  14. Searching • The problem: • Search an array A. • N – Number of elements in the array • k – the value to be searched • Does k appear in A?

  15. Searching • The problem: • Search an array A. • N – Number of elements in the array • k – the value to be searched • Does k appear in A? • Output: Return index of k in A

  16. Searching • The problem: • Search an array A. • N – Number of elements in the array • k – the value to be searched • Does k appear in A? • Output: Return index of k in A • Return -1 if k does not appear in A

  17. Linear Search • How would you search this array of integers? • (For ex., we want to search for 87)

  18. Linear Search • How would you search this array of integers? • (For ex., we want to search for 87) • Pseudocode: for i = 0 till N: if A[i] == k return i return -1

  19. Linear Search intlinearSearch (int[] A, int key, int start, int end) { for (inti = start; i < end; i++) { if (key == A[i]) { returni; // found - return index } } // key not found return -1; }

  20. Linear Search intlinearSearch (int[] A, int key, int start, int end) { for (inti = start; i < end; i++) { if (key == A[i]) { returni; // found - return index } } // key not found return -1; } int index = linearSearch(A, 87, 0, A.length);

  21. Linear Search • Advantages: • Straightforward algorithm.

  22. Linear Search • Advantages: • Straightforward algorithm. • Array can be in any order.

  23. Linear Search • Advantages: • Straightforward algorithm. • Array can be in any order. • Disadvantages: • Slow and inefficient (if array is very large)

  24. Linear Search • Advantages: • Straightforward algorithm. • Array can be in any order. • Disadvantages: • Slow and inefficient (if array is very large) • N/2 elements on average (4 comparisons for 45)

  25. Linear Search • Advantages: • Straightforward algorithm. • Array can be in any order. • Disadvantages: • Slow and inefficient (if array is very large) • N/2 elements on average (4 comparisons for 45) • Have to go through N elements in worst-case

  26. Algorithm Efficiency • How do we judge if an algorithm is good enough?

  27. Algorithm Efficiency • How do we judge if an algorithm is good enough? • Need a way to describe algorithm efficiency.

  28. Algorithm Efficiency • How do we judge if an algorithm is good enough? • Need a way to describe algorithm efficiency. • We use the Big O notation

  29. Big O notation • Estimates the execution time in relation to the input size.

  30. Big O notation • Estimates the execution time in relation to the input size. • Upper bound on the growth rate of the function. (In terms of the worst-case)

  31. Big O notation • Estimates the execution time in relation to the input size. • Upper bound on the growth rate of the function. (In terms of the worst-case) • Written as O(x), where x = in terms of the input size.

  32. Big O notation • If execution time is not related to input size, algorithm takes constant time: O(1).

  33. Big O notation • If execution time is not related to input size, algorithm takes constant time: O(1). • Ex.: Looking up value in an array – A[3]

  34. Big O notation • If execution time is not related to input size, algorithm takes constant time: O(1). • Ex.: Looking up value in an array – A[3] • Big O for Linear Search?

  35. Big O notation • If execution time is not related to input size, algorithm takes constant time: O(1). • Ex.: Looking up value in an array – A[3] • Big O for Linear Search? • O(N) = have to search through at least N values of the Array A

  36. Big O notation • If execution time is not related to input size, algorithm takes constant time: O(1). • Ex.: Looking up value in an array – A[3] • Big O for Linear Search? • O(N) = have to search through at least N values of the Array A • Execution time proportional to the size of the array.

  37. Big O notation • Another example problem: • Find max value in an array A of size N.

  38. Big O notation • Another example problem: • Find max value in an array A of size N. int max = A[0]; for i = 1 till i = N if (A[i] > max) max = A[i]

  39. Big O notation • Another example problem: • Find max value in an array A of size N. int max = A[0]; for i = 1 till i = N if (A[i] > max) max = A[i] How many comparisons? N – 1 comparisons Efficiency:O(n-1) O(n) [Ignore non-dominating part]

  40. Big O notation • Another example problem: • Find max value in an array A of size N. int max = A[0]; for i = 1 till i = N if (A[i] > max) max = A[i] How many comparisons? N – 1 comparisons Efficiency:O(n-1) O(n) [Ignore non-dominating part]

  41. Big O notation • Another example problem: • Find max value in an array A of size N. int max = A[0]; for i = 1 till i = N if (A[i] > max) max = A[i] How many comparisons? N – 1 comparisons Efficiency:O(N-1) O(n) [Ignore non-dominating part]

  42. Big O notation • Another example problem: • Find max value in an array A of size N. int max = A[0]; for i = 1 till i = N if (A[i] > max) max = A[i] How many comparisons? N – 1 comparisons Efficiency:O(N-1) O(N) [Ignore non-dominating part]

  43. Back to Search... • Linear Search is the simplest way to search an array.

  44. Back to Search... • Linear Search is the simplest way to search an array. • Other data structures will make it easier to search for data.

  45. Back to Search... • Linear Search is the simplest way to search an array. • Other data structures will make it easier to search for data. • But what if data is sorted?

  46. Search • Array A of size 6: (search for k = 87) • A sorted:

  47. Search • A sorted: k = 87 • How can you search this more efficiently?

  48. Search • A sorted: k = 87 • How can you search this more efficiently? • Let’s start by looking at the middle index: I = N/2 = 3

  49. Search • A sorted: k = 87 • How can you search this more efficiently? • Let’s start by looking at the middle index: I = N/2 = 3

  50. Search • A sorted: k = 87, I = 3 • is 87 == A[I] ? • No.

More Related