440 likes | 470 Views
This chapter explores representing algorithms, discussing examples of algorithmic problem solving in C++. Learn about sequential, conditional, and iterative operations using practical figures and natural language.
E N D
Chapter 2: Algorithm Discovery and Design Invitation to Computer Science, C++ Version, Third Edition Slides added or modified by Shannon Steinfadt, Spring 2005
Objectives In this chapter, you will learn about: • Representing algorithms • Examples of algorithmic problem solving Invitation to Computer Science, C++ Version, Third Edition
Introduction • This chapter discusses algorithms and algorithmic problem solving using three problems: • Searching lists • Finding maxima and minima • Matching patterns Invitation to Computer Science, C++ Version, Third Edition
Figure 1.2: Algorithm for Adding Two m-digit Numbers Given: m ≥ 1 and two positive numbers each containing m digits, am-1 am-2 … a0 and bm-1 bm-2 … b0 Wanted: cm cm-1 cm-2 … c0, where cm cm-1 cm-2 … c0 = (am-1 am-2 … a0)+ (bm-1 bm-2 … b0) Invitation to Computer Science, C++ Version, Third Edition
Figure 1.2:Alg. for Adding Two m-digit Numbers (con’t) Step 1 Set the value of carry to 0. Step 2 Set the value of i to 0. Step 3 While the value of i is less than or equal to m-1, repeat the instructions in steps 4 through 6 Step 4 Add the two digits ai and bi to the current value of carry to get ci. Step 5 If ci ≥ 10, then reset ci to (ci - 10) and reset the value of carry to 1; otherwise, set the new value of carry to 0. Step 6 Add 1 to i, effectively moving one column to the left. Step 7 Set cm to the value of carry. Step 8 Print out the final answer, cm cm-1 cm-2 … c0. Step 9 Stop. Invitation to Computer Science, C++ Version, Third Edition
Representing Algorithms • Natural language • Language spoken and written in everyday life • Examples: English, Spanish, Arabic, etc. • Problems with using natural language for algorithms • Verbose • Imprecise • Relies on context and experiences to give precise meaning to a word or phrase Invitation to Computer Science, C++ Version, Third Edition
Figure 2.1 The Addition Algorithm of Figure 1.2 Expressed in Natural Language Invitation to Computer Science, C++ Version, Third Edition
Representing Algorithms • High-level programming language • Examples: C++, Java • Problem with using a high-level programming language for algorithms • During the initial phases of design, we are forced to deal with detailed language issues Invitation to Computer Science, C++ Version, Third Edition
Figure 2.2 The Beginning of the Addition Algorithm of Figure 1.2 Expressed in a High-Level Programming Language Invitation to Computer Science, C++ Version, Third Edition
Pseudocode • English language constructs modeled to look like statements available in most programming languages • Steps presented in a structured manner (numbered, indented, etc.) • No fixed syntax for most operations is required Invitation to Computer Science, C++ Version, Third Edition
Pseudocode (continued) • Less ambiguous and more readable than natural language • Emphasis is on process, not notation • Well-understood forms allow logical reasoning about algorithm behavior • Can be easily translated into a programming language Invitation to Computer Science, C++ Version, Third Edition
Types of Algorithmic Operations • Sequential • Conditional • Iterative Invitation to Computer Science, C++ Version, Third Edition
Sequential Operations 3 types of sequential operations: Computation, Input, and Output • Computation operations • Example • Set the value of “variable” to “arithmetic expression” • Variable • Named storage location that can hold a data value Invitation to Computer Science, C++ Version, Third Edition
Sequential Operations (continued) • Input operations • To receive data values from the outside world • Example • Get a value for r, the radius of the circle • Output operations • To send results to the outside world for display • Example • Print the value of Area Invitation to Computer Science, C++ Version, Third Edition
Figure 2.3 Algorithm for Computing Average Miles per Gallon Invitation to Computer Science, C++ Version, Third Edition
Conditional and Iterative Operations • Sequential algorithm • Also called straight-line algorithm • Executes its instructions in a straight line from top to bottom and then stops • Control operations • Conditional operations • Iterative operations Invitation to Computer Science, C++ Version, Third Edition
Conditional and Iterative Operations (continued) • Conditional operations • Ask questions and choose alternative actions based on the answers • Example • if x is greater than 25 then print x else print x times 100 Invitation to Computer Science, C++ Version, Third Edition
Conditional and Iterative Operations (continued) • Iterative operations • Perform “looping” behavior; repeating actions until a continuation condition becomes false • Loop • The repetition of a block of instructions Invitation to Computer Science, C++ Version, Third Edition
Conditional and Iterative Operations (continued) • Examples • while j > 0 do set s to s + aj set j to j - 1 • repeat print ak set k to k + 1 until k > n Invitation to Computer Science, C++ Version, Third Edition
Figure 2.4 Second Version of the Average Miles per Gallon Algorithm Invitation to Computer Science, C++ Version, Third Edition
Conditional and Iterative Operations (continued) • Components of a loop • Continuation condition • Loop body • Infinite loop • The continuation condition never becomes false • An error Invitation to Computer Science, C++ Version, Third Edition
Figure 2.5 Third Version of the Average Miles per Gallon Algorithm Invitation to Computer Science, C++ Version, Third Edition
Conditional and Iterative Operations • Pre-test loop • Continuation condition tested at the beginning of each pass through the loop • It is possible for the loop body to never be executed • While loop Invitation to Computer Science, C++ Version, Third Edition
Conditional and Iterative Operations (continued) • Post-test loop • Continuation condition tested at the end of loop body • Loop body must be executed at least once • Do/While loop Invitation to Computer Science, C++ Version, Third Edition
Figure 2.6 Summary of Pseudocode Language Instructions Invitation to Computer Science, C++ Version, Third Edition
Example 1: Looking, Looking, Looking • Examples of algorithmic problem solving • Sequential search: find a particular value in an unordered collection • Find maximum: find the largest value in a collection of data • Pattern matching: determine if and where a particular pattern occurs in a piece of text Invitation to Computer Science, C++ Version, Third Edition
Example 1: Looking, Looking, Looking (cont’d) • Task • Find a particular person’s name from an unordered list of telephone subscribers • Data: Pairs of information (Name, phone number) Name Telephone Number N1 N2 . . . N10,00 T1 T2 . . . T10,00 Invitation to Computer Science, C++ Version, Third Edition
Example 1: Looking, Looking, Looking (continued) • Algorithm outline • Start with the first entry and check its name, then repeat the process for all entries • Algorithm discovery • Finding a solution to a given problem Invitation to Computer Science, C++ Version, Third Edition
Example 1: Looking, Looking, Looking (continued) • Naïve sequential search algorithm • For each entry, write a separate section of the algorithm that checks for a match • Problems • Only works for collections of exactly one size • Duplicates the same operations over and over Invitation to Computer Science, C++ Version, Third Edition
Example 1: Looking, Looking, Looking (continued) • Correct sequential search algorithm • Uses iteration to simplify the task • Refers to a value in the list using an index (or pointer) • Handles special cases (like a name not found in the collection) • Uses the variable Found to exit the iteration as soon as a match is found Invitation to Computer Science, C++ Version, Third Edition
Figure 2.9 The Sequential Search Algorithm Invitation to Computer Science, C++ Version, Third Edition
Example 1: Looking, Looking, Looking (continued) • The selection of an algorithm to solve a problem is greatly influenced by the way the data for that problem are organized Invitation to Computer Science, C++ Version, Third Edition
Example 2: Big, Bigger, Biggest • Task • Find the largest value from a list of values • Formal definition of the problem • Given a value n ≥ 1 and a list containing exactly n unique numbers called A1, A2, A3, … , An, find and print out the largest value in the list and the position in the list where that largest value occurred. Invitation to Computer Science, C++ Version, Third Edition
Example 2: Big, Bigger, Biggest (continued) • Algorithm outline • Keep track of the largest value seen so far (initialized to be the first in the list) • Compare each value to the largest seen so far, and keep the larger as the new largest Invitation to Computer Science, C++ Version, Third Edition
Example 2: Big, Bigger, Biggest (continued) • Once an algorithm has been developed, it may itself be used in the construction of other, more complex algorithms • Library • A collection of useful algorithms • An important tool in algorithm design and development Invitation to Computer Science, C++ Version, Third Edition
Example 2: Big, Bigger, Biggest (continued) • Find Largest algorithm • Uses iteration and indices like previous example • Updates location and largest so far when needed in the loop Invitation to Computer Science, C++ Version, Third Edition
Figure 2.10 Algorithm to Find the Largest Value in a List Invitation to Computer Science, C++ Version, Third Edition
Example 3: Meeting Your Match • Task • Find if and where a pattern string occurs within a longer piece of text • Algorithm outline • Try each possible location of pattern string in turn • At each location, compare pattern characters against string characters Invitation to Computer Science, C++ Version, Third Edition
Example 3: Meeting Your Match (continued) • Abstraction • Separating high-level view from low-level details • Key concept in computer science • Makes difficult problems intellectually manageable • Allows piece-by-piece development of algorithms Invitation to Computer Science, C++ Version, Third Edition
Example 3: Meeting Your Match (continued) • Top-down design • When solving a complex problem: • Create high-level operations in first draft of an algorithm • After drafting the outline of the algorithm, return to the high-level operations and elaborate each one • Repeat until all operations are primitives Invitation to Computer Science, C++ Version, Third Edition
Example 3: Meeting Your Match (continued) • Pattern-matching algorithm • Contains a loop within a loop • External loop iterates through possible locations of matches to pattern • Internal loop iterates through corresponding characters of pattern and string to evaluate match Invitation to Computer Science, C++ Version, Third Edition
Figure 2.12 Final Draft of the Pattern-Matching Algorithm Invitation to Computer Science, C++ Version, Third Edition
Summary • Algorithm design is a first step in developing an algorithm • Must also: • Ensure the algorithm is correct • Ensure the algorithm is sufficiently efficient • Pseudocode is used to design and represent algorithms Invitation to Computer Science, C++ Version, Third Edition
Summary • Pseudocode is readable, unambiguous, and analyzable • Algorithm design is a creative process; uses multiple drafts and top-down design to develop the best solution • Abstraction is a key tool for good design Invitation to Computer Science, C++ Version, Third Edition