Algorithms 2

Download Report

Transcript Algorithms 2

CS101 Introduction to Computing

Lecture 17

Algorithms II

1

Focus of the last lecture was on Algorithms Became familiar with the concept of algorithms: – What they are? (SEQUENCE OF STEPS) – What is their use ?

– What are their types?

– What are the techniques used for representing them?

• Pseudo code • Flowcharts • Actual code 2

Today … • We will continue our discussion on algorithms that we started during the 16 th lecture • In particular, we will look at the building blocks that are used in all algorithms • We will also discuss the pseudo code and flowcharts for particular problems • In addition, we will outline the pros and cons of those two techniques 3

Algorithm Building Blocks All problems can be solved by employing any one of the following building blocks or their combinations 1. Sequences 2. Conditionals 3. Loops 4

Start or stop Process Review of Flowchart Elements Input or output Decision Flow line Connector Off-page connector 5

This review was essential because we we will be using these building blocks quite often today.

OK. Now on with the three building blocks of algorithms. First ..

6

Sequences A sequence of instructions that are executed in the precise order they are written in:

statement block 1 statement block 2 statement block 3 statement block 1 statement block 2 statement block 3

7

Conditionals Select between alternate courses of action depending upon the evaluation of a condition If ( condition = true )

statement block 1

Else

statement block 2

End if True condition False

statement block 1 statement block 2

8

Loops Loop through a set of statements as long as a condition is true Loop while ( condition = true )

statement block

End Loop

statement block

True condition False 9

We will now present the algorithm for a problem whose solution is familiar to us We will first go through the problem statement and then present the algorithm in three different formats : 1. Pseudo code 2. Flowchart 3. Actual code 10

Problem Statement Convert a decimal number into binary 11

Convert 75 to Binary 2 2 2 2 2 2 2 75 37 18 9 4 2 1 0 remainder 1 1 0 1 0 0 1

1001011

12

We did write down the pseudo code for this problem last time Lets do it again, and in a slightly more formal way 13

Solution in Pseudo Code 1. Let the decimal number be an integer

x, x

> 0 2. Let the binary equivalent be an empty string

y

3. Repeat while

x

> 0 { Determine the quotient & remainder of

x

÷ 2

y

= CONCATENATE ( remainder,

y

)

x

= quotient } 4. Print

y

5. Stop 14

Q

: Is this the only possible algorithm for converting a decimal number into a binary representation?

If not, then is this the best?

In terms of speed?

In terms of memory requirement?

In terms of ease of implementation?

You must ask these questions after writing any algorithm!

15

Tips on Writing Good Pseudo Code • Use indention for improved clarity • Do not put “code” in pseudo code – make your pseudo code language independent • Don’t write pseudo code for yourself in an unambiguous – write it fashion so that anyone with a reasonable knowledge can understand and implement it • Be consistent • Prefer formulas descriptions over English language 16

Start Get

x

Flowchart of Decimal to Binary Conversion

x

>0 ?

Yes Find quotient & remainder of

x

÷ 2 No Print

y

Stop

y

= CONC(remainder,

x

)

x

= quotient

x

is the decimal number

y

1. Does the flowchart depict the “correct” algorithm?

2. What do we mean by “correct”, or better yet, what do we check for “correctness”?

3. One way is to check the algorithm for a variety of inputs 4. Does it perform satisfactorily for: • • •

x

= 0 ?

negative numbers?

numbers with fractional parts ?

18

Decimal to Binary Conversion in JavaScript ” + y ); NOTE: Don’t worry if you don’t understand this code for now; 19 you will - later!

Another Example: Sorting Sort the following objects w.r.t. their heights 20

Expected Result 21

Strategy There are many strategies for solving this problem. We demonstrate a simple one : Repeat the following steps while the list is un-sorted: Start with the first object in the list Swap it with the one next to it if they are in the wrong order Repeat the same with the next to the first object Keep on repeating until you reach the last object in the list 22

Back to the Objects to be Sorted 23

Q:

Is the list sorted?

A:

No 24

Sorting: Step A1 25

Sorting: Step A1 Swap? Yes 26

Sorting: Step A2 27

Sorting: Step A2 Swap? Yes 28

Sorting: Step A3 29

Sorting: Step A3 Swap? No 30

Sorting: After Step A7 31

Q:

Is the list sorted?

A:

No 32

Sorting: Step B1 33

Sorting: Step B1 Swap? Yes 34

Sorting: Step B2 35

Sorting: Step B2 Swap? No 36

Sorting: After Step B7 37

Q:

Is the list sorted?

A:

No 38

Sorting: Step C1 39

Sorting: Step C1 Swap? No 40

Sorting: After Step C7 41

Q:

Is the list sorted?

A:

Yes 42

43

Let’s now look at this same process of sorting being applied to a bigger list ---FLASH MOVIE FOR BUBBLE SORT GOES HERE-- 44

Start Get

list

Flowchart for the Sorting Process

list N

is an array containing the heights is the total number of objects in the list Yes

n

>

N

?

No

list

sorted?

Yes Stop No

n

= 0

n

=

n

+1 No

list

[

n

] >

list

[

n

+ 1 ] ?

Yes

list

[

n

SWAP ], 45

list

[

n

+1 ]

Start Get

list

Yes

n

>

N

?

No

list

sorted?

Yes Stop No

n

= 0

n

=

n

+1 No

list

[

n

] >

list

[

n

+ 1 ] ?

Yes

list

[

n

SWAP ], 46

list

[

n

+1 ]

Dim swapFlag As Boolean, list ( 8 ) As Integer readList( list () ) ‘this needs to be defined swapFlag = True Do While swapFlag = True For n = 1 To 8 If list ( n ) > list ( n + list(n 1 ) = + 1) Then temp = list ( n ) list ( n ) = list ( n + temp 1 ) Loop For Next swapFlag = True End If

VisualBasic Code for the Sorting Function

n = 1 To 8 Debug.Print

Next list ( n )

NOTE: Don’t worry if you 47 don’t understand this code

Q

: Is this the only possible algorithm for sorting a list?

A

: Certainly not! In fact this one (called the “ Bubble sort ”) is probably the worst (reasonable) algorithm for sorting a list – it is just too slow You will learn a lot more about sorting in your future courses 48

Pros and Cons of Flowcharts (1) • I personally don’t find flowcharts very useful • The process of writing an algorithm in the form of a flowchart is just too cumbersome • And then converting this graphical form into code is not straight forward • However, there is another kind of flowcharts – called Structured Flowcharts – that may be better suited for software developers 49

Pros and Cons of Flowcharts (2) • The good thing about flowcharts is that their symbols are quite intuitive and almost universally understood • Their graphical nature makes the process of explaining an algorithm to one’s peers quite straightforward 50

Pros and Cons of Pseudo Code (1) • Quite suitable for SW development as it is closer in form to real code • One can write the pseudo code, then use it as a starting point or outline for writing real code • Many developers write the pseudo code first and then incrementally comment each line out while converting that line into real code 51

Pros and Cons of Pseudo Code (2) • Pseudo code can be constructed quite quickly as compared with a flowchart • Unlike flowcharts, no standard rules writing pseudo code exist for 52

With that we have reached the end of the materials that we wanted to cover today.

However, I still need to tell you about your assignment #6 53

Assignment # 6 There are many algorithms for sorting a list; Bubble sort – the sorting algorithm discussed today in - is just one example.

For assignment #6, submit the pseudo code and the flowchart for a sorting algorithm other than the “Bubble sort”.

For this purpose, you can either search on the Web for an algorithm or come up with a scheme on your own.

Consult the CS101 syllabus for the submission instructions & deadline 54

In Today’s Lecture, We … • We continued our discussion on algorithms that we had started during the 16 th lecture • In particular, we looked at the building blocks that are used in all algorithms • We also discussed the pseudo code and flowcharts for particular problems • In addition, we outlined the pros and cons those two techniques 55 of

Focus of the Next Lecture: Programming Languages • To understand the role of programming languages in computing • To understand the differences among low- & high-level , interpreted & compiled , and structured & object-oriented programming languages 56