algorithm design paradigms
play

Algorithm Design Paradigms Quick sort, merge sort are great - PDF document

11/25/2016 Algorithm Design Techniques Greedy Shortest path, minimum spanning tree, Divide and Conquer Divide the problem into smaller subproblems, CSE373: Data Structures and Algorithms solve them, and combine into the


  1. 11/25/2016 Algorithm Design Techniques • Greedy – Shortest path, minimum spanning tree, … • Divide and Conquer – Divide the problem into smaller subproblems, CSE373: Data Structures and Algorithms solve them, and combine into the overall solution – Often done recursively Algorithm Design Paradigms – Quick sort, merge sort are great examples • Dynamic Programming – Consider a large set of possible solutions, storing solutions Steve Tanimoto to subproblems to avoid repeated computation – Fibonnaci with "memoizing", string alignment, all-pairs Autumn 2016 minimum-cost paths • Backtracking This lecture material represents the work of multiple instructors at the University of Washington. Thank you to all who have contributed! – A clever form of exhaustive search Autumn 2016 CSE 373: Data Structures & Algorithms 2 Algorithm Design Techniques Algorithm Design Techniques • Greedy • Greedy – Shortest path, minimum spanning tree, … – Shortest path, minimum spanning tree, … • Divide and Conquer • Divide and Conquer – Divide the problem into smaller subproblems, – Divide the problem into smaller subproblems, solve them, and combine into the overall solution solve them, and combine into the overall solution – Often done recursively – Often done recursively – Quick sort, merge sort are great examples – Quick sort, merge sort are great examples • Dynamic Programming – Consider a large set of possible solutions, storing solutions to subproblems to avoid repeated computation – Fibonnaci with "memoizing", string alignment, all-pairs minimum-cost paths • Backtracking • Backtracking – A clever form of exhaustive search – A clever form of exhaustive search Autumn 2016 CSE 373: Data Structures & Algorithms 3 Autumn 2016 CSE 373: Data Structures & Algorithms 4 Dynamic Programming: Idea Fibonacci Sequence: Recursive • Divide a bigger problem into many smaller subproblems • The fibonacci sequence is a very famous number sequence • 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... • If the number of subproblems grows exponentially, a recursive • The next number is found by adding up the two numbers before it. solution may have an exponential running time  • Recursive solution: fib(int n) { • Dynamic programming to the rescue!  if (n == 1 || n == 2) { return 1 } • Often an individual subproblem may occur many times! return fib(n – 2) + fib(n – 1) – Store the results of subproblems in a table and re-use them } instead of recomputing them – Technique called memoization • Exponential running time! – A lot of repeated computation Autumn 2016 CSE 373: Data Structures & Algorithms 5 Autumn 2016 CSE 373: Data Structures & Algorithms 6 1

  2. 11/25/2016 Repeated computation Fibonacci Sequence: memoized f(7) fib(int n): results = Map() # Empty mapping container. f(5) f(6) results.put(1, 1) results.put(2, 1) f(4) f(5) f(3) return fibHelper(n, results) fibHelper(int n, Map results): f(1) f(2) f(2) f(3) if (!results.contains(n)): f(4) f(4) results.put(n, fibHelper(n-2)+fibHelper(n-1)) f(1) f(2) return results.get(n) f(2) f(3) f(2) f(3) f(3) f(1) f(2) f(1) f(2) f(1) f(2) Now each call of fib(x) only gets computed once for each x! Autumn 2016 CSE 373: Data Structures & Algorithms 7 Autumn 2016 CSE 373: Data Structures & Algorithms 8 Another Application of Dynamic Programming: Construct a Scoring Matrix The String Alignment Problem • Given 2 strings, find a best alignment of them. s = THEESE SEAMS TOO BEE STRENG t = THIS SEEMS TO BE A STRING • aligned to a character: 1 if matches, -1 if different. • aligned to a gap: -1 for gap (on either top or bottom). • score = sum of the individual alignment scores. courtesy of https://en.wikipedia.org/wiki/Needleman%E2%80%93Wunsch_algorithm Autumn 2016 9 CSE 373: Data Structures & Algorithms Autumn 2016 CSE 373: Data Structures & Algorithms 10 Building the Matrix (using D.P.) Backtracing to Get the Solution (D.P.) • Initialize the matrix by giving the top row and left column, as shown. • Start at the lower-right corner of the matrix. • Loop through the remaining cells, always working in a "corner" • Follow the arrows (the markers that indicate where each cell's where the entries to the left and above are already defined. value came from). • Compute the new value as the max of three possible cases: • Reverse the resulting path to get an indication of the best alignment (and/or the longest common subsequence of the two – match character on the top to the gap: take the score from strings). the left and above and add gap cost (-1) – match character on the bottom (left in the matrix) to the gap: Time requirement:  ( m  n ), where m and n are the lengths of take the score from above and add gap cost (-1) • the input strings. – match character on the top to character on the bottom (left in the matrix): take the score from above-left (diagonally • This is much better than a brute force algorithm that computes adjacent), and add the character match score (1 if all possible alignments and then finds the one with the highest characters are the same, -1 if they are different). score. That would take time in  (2 min(m,n) ), which is at least exponential in the length of the shorter string. • At each cell, indicate where the value came from (point to one of the three cells, depending on how the max turned out.) Autumn 2016 CSE 373: Data Structures & Algorithms 11 Autumn 2016 CSE 373: Data Structures & Algorithms 12 2

  3. 11/25/2016 Sample Applications of String Alignment Comments • Dynamic programming relies on working “from the bottom up” • Error correction in search queries. and saving the results of solving simpler problems • DNA sequence analysis (compare patient's DNA segment to a – These solutions to simpler problems are then used to well-studied gene variation. compute the solution to more complex problems • 3D (depth) image from a stereo pair of images. (Each row of • Dynamic programming solutions can often be quite complex pixels from a left-eye image must be aligned with a row of pixels and tricky from a right-eye image before depth disparity values can be • Dynamic programming is used for optimization problems, computed.) especially ones that would otherwise take exponential time • Computer analysis of musical themes and variations. – Only problems that satisfy the principle of optimality are • Speech recognition at the phoneme-to-word level. suitable for dynamic programming solutions – i.e. the subsolutions of an optimal solution of the problem are themselves optimal solutions for their subproblems • Since exponential time is unacceptable for all but the smallest problems, dynamic programming is sometimes essential Autumn 2016 CSE 373: Data Structures & Algorithms 13 Autumn 2016 14 CSE 373: Data Structures & Algorithms Algorithm Design Techniques Backtracking: Idea • Backtracking is a technique used to solve problems with a large • Greedy search space, by systematically trying and eliminating possibilities. – Shortest path, minimum spanning tree, … • A standard example of backtracking would be going through a maze. • Divide and Conquer – At some point, you might have two options of which direction to go: – Divide the problem into smaller subproblems, solve them, and combine into the overall solution Portion A – Often done recursively Junction – Quick sort, merge sort are great examples Portion B • Dynamic Programming – Consider a large set of possible solutions, storing solutions to subproblems to avoid repeated computation – Fibonnaci with "memoizing", string alignment, all-pairs minimum-cost paths Autumn 2016 CSE 373: Data Structures & Algorithms 15 Autumn 2016 CSE 373: Data Structures & Algorithms 16 Backtracking Backtracking One strategy would be to try going • Clearly, at a single junction you could through Portion A of the maze. have even more than 2 choices. Portion B If you get stuck before you find your way out, then you "backtrack" to the • The backtracking strategy says to try junction. each choice, one after the other, Portion A – if you ever get stuck, "backtrack" to the junction and try the next At this point in time you know that choice. Portion A will NOT lead you out of the C maze, B so you then start searching in • If you try all choices and never found A Portion B a way out, then there IS no solution to the maze. Autumn 2016 CSE 373: Data Structures & Algorithms 17 Autumn 2016 CSE 373: Data Structures & Algorithms 18 3

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend