knowt logo

Lecture Note 05.1

Introduction to Computing

(CS111)

Junar A. Landicho

junarlandicho@ustp.edu.ph

Motivation is what gets you started. Habit is what keeps you going.”

Jim Ryun

Topic 5:

Algorithms

IT 416

Information Systems Development and Management

Learning Outcomes

By the end of this topic, students will be able to:

Apply a creative development process when creating computational artifacts.

Develop an algorithm for implementation in a program. Express an algorithm in a language.

Evaluate algorithms analytically and empirically for efficiency, correctness, and clarity.

CS 111 – Introduction to Computing

Overview

1. The Concept of an Algorithm 2. Algorithm Representation 3. Algorithm Discovery

4. Iterative Structures

5. Recursive Structures

6. Efficiency and Correctness

CS 111 – Introduction to Computing

The Concept of an Algorithm

Python

Java

PHP

CS 111 – Introduction to Computing

The Concept of an Algorithm

Algorithms from previous topics

▪ Converting from one base to another

▪ Correcting errors in data

▪ Compression

Many researchers believe that every

activity of the human mind is the

result of an algorithm

CS 111 – Introduction to Computing

Formal Definition of Algorithm

An algorithm is an ordered set of

unambiguous, executable steps

that defines a terminating process

The steps of an algorithm can be

sequenced in different ways

▪ Linear (1, 2, 3, …)

▪ Parallel (multiple processors)

▪ Cause and Effect (circuits)

CS 111 – Introduction to Computing

Formal Definition of Algorithm

A Terminating Process

▪ Culminates with a result

▪ Can include systems that run

continuously (Hospital systems, Long

Division Algorithm)

A Non-terminating Process

▪ Does not produce an answer

CS 111 – Introduction to Computing

The Abstract Nature of Algorithms

There is a difference between an

algorithm and its representation.

▪ Analogy: difference between a story and a

book

A Program is a representation of an

algorithm.

A Process is the activity of executing an

algorithm.

CS 111 – Introduction to Computing

Algorithm Representation Java

PHP

Python

CS 111 – Introduction to Computing

Algorithm Representation

Is done formally with well-defined Primitives

▪ A collection of primitives constitutes a programming language.

Is done informally with Pseudocode

▪ Pseudocode is between natural language and a programming

language.

CS 111 – Introduction to Computing

Primitives

Folding a bird from a square piece of paper

CS 111 – Introduction to Computing

Primitives

Origami primitives

CS 111 – Introduction to Computing

Designing a Pseudocode Language

Choose a common programming

language

Loosen some of the syntax rules

Allow for some natural language

Use consistent, concise notation

We will use a Python-like

Pseudocode

CS 111 – Introduction to Computing

Pseudocode Primitives

Assignment

name = expression

Example

RemainingFunds = CheckingBalance +

SavingsBalance

CS 111 – Introduction to Computing

Pseudocode Primitives

Conditional selection

if (condition):

activity

Example

if (sales have decreased):

lower the price by 5%

CS 111 – Introduction to Computing

Pseudocode Primitives Conditional selection

if (condition):

activity

else:

activity

Example

if (year is leap year):

daily total = total / 366

else:

daily total = total / 365

CS 111 – Introduction to Computing

Pseudocode Primitives

Repeated execution

while (condition):

body

Example

while (tickets remain to be sold):

sell a ticket

CS 111 – Introduction to Computing

Pseudocode Primitives

Indentation shows nested conditions

if (not raining):

if (temperature == hot):

go swimming

else:

play golf

else:

watch television

CS 111 – Introduction to Computing

Pseudocode Primitives

Define a function

def name():

Example

def ProcessLoan():

Executing a function

if (. . .):

ProcessLoan()

else:

RejectApplication()

CS 111 – Introduction to Computing

Pseudocode Primitives

The procedure Greetings in pseudocode

def Greetings():

Count = 3

while (Count > 0):

print('Hello')

Count = Count - 1

CS 111 – Introduction to Computing

Pseudocode Primitives

Using parameters

def Sort(List):

.

.

Executing Sort on different lists

Sort(the membership list)

Sort(the wedding guest list)

CS 111 – Introduction to Computing

Algorithm Discovery Java

PHP

Python

CS 111 – Introduction to Computing

Algorithm Discovery

The first step in developing a program More of an art than a skill

A challenging task

CS 111 – Introduction to Computing

Polya’s Problem Solving Steps

1. Understand the problem.

2. Devise a plan for solving the problem.

3. Carry out the plan.

4. Evaluate the solution for accuracy and its

potential as a tool for solving other

problems.

CS 111 – Introduction to Computing

Polya’s Steps in the Context of Program Development

1. Understand the problem.

2. Get an idea of how an algorithmic function

might solve the problem.

3. Formulate the algorithm and represent it

as a program.

4. Evaluate the solution for accuracy and its

potential as a tool for solving other

problems.

CS 111 – Introduction to Computing

Getting a Foot in the Door

Try working the problem backwards Solve an easier related problem

▪ Relax some of the problem constraints

▪ Solve pieces of the problem first (bottom up methodology)

Stepwise refinement: Divide the problem into smaller problems (top-down

methodology)

CS 111 – Introduction to Computing

Ages of Children Problem

Person A is charged with the task of

determining the ages of B’s three children.

▪ B tells A that the product of the children’s ages is

36.

▪ A replies that another clue is required.

▪ B tells A the sum of the children’s ages.

▪ A replies that another clue is needed.

▪ B tells A that the oldest child plays the piano.

▪ A tells B the ages of the three children.

How old are the three children?

CS 111 – Introduction to Computing

Ages of Children Problem

CS 111 – Introduction to Computing

Iterative Structures Java

PHP

Python

CS 111 – Introduction to Computing

Iterative Structures

A collection of instructions repeated in a looping manner

Examples include:

▪ Sequential Search Algorithm

▪ Insertion Sort Algorithm

CS 111 – Introduction to Computing

The Sequential Search Algorithm in Pseudocode

def Search (List, TargetValue):

if (List is empty):

Declare search a failure

else:

Select the first entry in List to be TestEntry while (TargetValue > TestEntry and entries remain): Select the next entry in List as TestEntry

if (TargetValue == TestEntry):

Declare search a success

else:

Declare search a failure

CS 111 – Introduction to Computing

Components of Repetitive ControlCS 111 – Introduction to Computing

Iterative Structures

Pretest loop:

while (condition):

body

Posttest loop:

repeat:

body

until(condition)

CS 111 – Introduction to Computing

Iterative Structures

While Loop Repeat Loop

CS 111 – Introduction to Computing

Sorting the list Fred, Alex, Diana, Byron, and Carol alphabetically

CS 111 – Introduction to Computing

The Insertion Sort Algorithm expressed in Pseudocode

def Sort(List):

N = 2

while (N <= length of List):

Pivot = Nth entry in List

Remove Nth entry leaving a hole in List

while (there is an Entry above the

hole and Entry > Pivot):

Move Entry down into the hole leaving

a hole in the list above the Entry

Move Pivot into the hole

N = N + 1

CS 111 – Introduction to Computing

Recursive Structures Java

PHP

Python

CS 111 – Introduction to Computing

Recursive Structures

Repeating the set of instructions as

a subtask of itself.

Multiple activations of the procedure

are formed, all but one of which are

waiting for other activations to

complete.

Example: The Binary Search

Algorithm

CS 111 – Introduction to Computing

Applying our strategy to search a list for the entry John

CS 111 – Introduction to Computing

A First Draft of the Binary Search Technique

if (List is empty):

Report that the search failed

else:

TestEntry = middle entry in the List

if (TargetValue == TestEntry):

Report that the search succeeded

if (TargetValue < TestEntry):

Search the portion of List preceding TestEntry for TargetValue, and report the result of that search if (TargetValue > TestEntry):

Search the portion of List following TestEntry for TargetValue, and report the result of that search

CS 111 – Introduction to Computing

The Binary Search Algorithm in Pseudocode

def Search(List, TargetValue):

if (List is empty):

Report that the search failed

else:

TestEntry = middle entry in the List

if (TargetValue == TestEntry):

Report that the search succeeded

if (TargetValue < TestEntry):

Sublist = portion of List preceding TestEntry

Search(Sublist, TargetValue)

if (TargetValue < TestEntry):

Sublist = portion of List following TestEntry

Search(Sublist, TargetValue)

CS 111 – Introduction to Computing

Recursively Searching

CS 111 – Introduction to Computing

Second Recursive Search CS 111 – Introduction to Computing

Second Recursive Search, Second Snapshot

CS 111 – Introduction to Computing

Recursive Control

Requires initialization, modification,

and a test for termination (base

case)

Provides the illusion of multiple

copies of the function, created

dynamically in a telescoping

manner

Only one copy is actually running at

a given time, the others are waiting

CS 111 – Introduction to Computing

Efficiency and Correctness

Python

Java

PHP

CS 111 – Introduction to Computing

Efficiency and Correctness

Requires initialization, modification,

and a test for termination (base

case)

Provides the illusion of multiple

copies of the function, created

dynamically in a telescoping

manner

Only one copy is actually running at

a given time, the others are waiting

CS 111 – Introduction to Computing

Efficiency

Measured as number of instructions executed

Uses big theta notation:

Example: Insertion sort is in Θ(n2)

Incorporates best, worst, and average case analysis

CS 111 – Introduction to Computing

Applying the Insertion Sort in a Worst Case Situation

CS 111 – Introduction to Computing

Graph of the Worst-case Analysis of the Insertion Sort Algorithm

CS 111 – Introduction to Computing

Software Verification

Proof of correctness (with formal

logic)

▪ Assertions (Preconditions and Loop

invariants)

Testing is more commonly used to

verify software

Testing only proves that the

program is correct for the test cases

used

CS 111 – Introduction to Computing

Chain Separating Problem

A traveler has a gold chain of seven links.

He must stay at an isolated hotel for seven nights.

The rent each night consists of one link from the chain.

What is the fewest number of links that must be cut so that the traveler can pay the hotel one link of the chain each

morning without paying for lodging in advance?

CS 111 – Introduction to Computing

Separating the Chain using only Three Cuts

CS 111 – Introduction to Computing

Solving the problem with only One Cut

CS 111 – Introduction to Computing

The Assertions Associated with a typical While Structure

CS 111 – Introduction to Computing

Flowchart Symbols

CS 111 – Introduction to Computing

CS 111 – Introduction to Computing

</End>

SB

Lecture Note 05.1

Introduction to Computing

(CS111)

Junar A. Landicho

junarlandicho@ustp.edu.ph

Motivation is what gets you started. Habit is what keeps you going.”

Jim Ryun

Topic 5:

Algorithms

IT 416

Information Systems Development and Management

Learning Outcomes

By the end of this topic, students will be able to:

Apply a creative development process when creating computational artifacts.

Develop an algorithm for implementation in a program. Express an algorithm in a language.

Evaluate algorithms analytically and empirically for efficiency, correctness, and clarity.

CS 111 – Introduction to Computing

Overview

1. The Concept of an Algorithm 2. Algorithm Representation 3. Algorithm Discovery

4. Iterative Structures

5. Recursive Structures

6. Efficiency and Correctness

CS 111 – Introduction to Computing

The Concept of an Algorithm

Python

Java

PHP

CS 111 – Introduction to Computing

The Concept of an Algorithm

Algorithms from previous topics

▪ Converting from one base to another

▪ Correcting errors in data

▪ Compression

Many researchers believe that every

activity of the human mind is the

result of an algorithm

CS 111 – Introduction to Computing

Formal Definition of Algorithm

An algorithm is an ordered set of

unambiguous, executable steps

that defines a terminating process

The steps of an algorithm can be

sequenced in different ways

▪ Linear (1, 2, 3, …)

▪ Parallel (multiple processors)

▪ Cause and Effect (circuits)

CS 111 – Introduction to Computing

Formal Definition of Algorithm

A Terminating Process

▪ Culminates with a result

▪ Can include systems that run

continuously (Hospital systems, Long

Division Algorithm)

A Non-terminating Process

▪ Does not produce an answer

CS 111 – Introduction to Computing

The Abstract Nature of Algorithms

There is a difference between an

algorithm and its representation.

▪ Analogy: difference between a story and a

book

A Program is a representation of an

algorithm.

A Process is the activity of executing an

algorithm.

CS 111 – Introduction to Computing

Algorithm Representation Java

PHP

Python

CS 111 – Introduction to Computing

Algorithm Representation

Is done formally with well-defined Primitives

▪ A collection of primitives constitutes a programming language.

Is done informally with Pseudocode

▪ Pseudocode is between natural language and a programming

language.

CS 111 – Introduction to Computing

Primitives

Folding a bird from a square piece of paper

CS 111 – Introduction to Computing

Primitives

Origami primitives

CS 111 – Introduction to Computing

Designing a Pseudocode Language

Choose a common programming

language

Loosen some of the syntax rules

Allow for some natural language

Use consistent, concise notation

We will use a Python-like

Pseudocode

CS 111 – Introduction to Computing

Pseudocode Primitives

Assignment

name = expression

Example

RemainingFunds = CheckingBalance +

SavingsBalance

CS 111 – Introduction to Computing

Pseudocode Primitives

Conditional selection

if (condition):

activity

Example

if (sales have decreased):

lower the price by 5%

CS 111 – Introduction to Computing

Pseudocode Primitives Conditional selection

if (condition):

activity

else:

activity

Example

if (year is leap year):

daily total = total / 366

else:

daily total = total / 365

CS 111 – Introduction to Computing

Pseudocode Primitives

Repeated execution

while (condition):

body

Example

while (tickets remain to be sold):

sell a ticket

CS 111 – Introduction to Computing

Pseudocode Primitives

Indentation shows nested conditions

if (not raining):

if (temperature == hot):

go swimming

else:

play golf

else:

watch television

CS 111 – Introduction to Computing

Pseudocode Primitives

Define a function

def name():

Example

def ProcessLoan():

Executing a function

if (. . .):

ProcessLoan()

else:

RejectApplication()

CS 111 – Introduction to Computing

Pseudocode Primitives

The procedure Greetings in pseudocode

def Greetings():

Count = 3

while (Count > 0):

print('Hello')

Count = Count - 1

CS 111 – Introduction to Computing

Pseudocode Primitives

Using parameters

def Sort(List):

.

.

Executing Sort on different lists

Sort(the membership list)

Sort(the wedding guest list)

CS 111 – Introduction to Computing

Algorithm Discovery Java

PHP

Python

CS 111 – Introduction to Computing

Algorithm Discovery

The first step in developing a program More of an art than a skill

A challenging task

CS 111 – Introduction to Computing

Polya’s Problem Solving Steps

1. Understand the problem.

2. Devise a plan for solving the problem.

3. Carry out the plan.

4. Evaluate the solution for accuracy and its

potential as a tool for solving other

problems.

CS 111 – Introduction to Computing

Polya’s Steps in the Context of Program Development

1. Understand the problem.

2. Get an idea of how an algorithmic function

might solve the problem.

3. Formulate the algorithm and represent it

as a program.

4. Evaluate the solution for accuracy and its

potential as a tool for solving other

problems.

CS 111 – Introduction to Computing

Getting a Foot in the Door

Try working the problem backwards Solve an easier related problem

▪ Relax some of the problem constraints

▪ Solve pieces of the problem first (bottom up methodology)

Stepwise refinement: Divide the problem into smaller problems (top-down

methodology)

CS 111 – Introduction to Computing

Ages of Children Problem

Person A is charged with the task of

determining the ages of B’s three children.

▪ B tells A that the product of the children’s ages is

36.

▪ A replies that another clue is required.

▪ B tells A the sum of the children’s ages.

▪ A replies that another clue is needed.

▪ B tells A that the oldest child plays the piano.

▪ A tells B the ages of the three children.

How old are the three children?

CS 111 – Introduction to Computing

Ages of Children Problem

CS 111 – Introduction to Computing

Iterative Structures Java

PHP

Python

CS 111 – Introduction to Computing

Iterative Structures

A collection of instructions repeated in a looping manner

Examples include:

▪ Sequential Search Algorithm

▪ Insertion Sort Algorithm

CS 111 – Introduction to Computing

The Sequential Search Algorithm in Pseudocode

def Search (List, TargetValue):

if (List is empty):

Declare search a failure

else:

Select the first entry in List to be TestEntry while (TargetValue > TestEntry and entries remain): Select the next entry in List as TestEntry

if (TargetValue == TestEntry):

Declare search a success

else:

Declare search a failure

CS 111 – Introduction to Computing

Components of Repetitive ControlCS 111 – Introduction to Computing

Iterative Structures

Pretest loop:

while (condition):

body

Posttest loop:

repeat:

body

until(condition)

CS 111 – Introduction to Computing

Iterative Structures

While Loop Repeat Loop

CS 111 – Introduction to Computing

Sorting the list Fred, Alex, Diana, Byron, and Carol alphabetically

CS 111 – Introduction to Computing

The Insertion Sort Algorithm expressed in Pseudocode

def Sort(List):

N = 2

while (N <= length of List):

Pivot = Nth entry in List

Remove Nth entry leaving a hole in List

while (there is an Entry above the

hole and Entry > Pivot):

Move Entry down into the hole leaving

a hole in the list above the Entry

Move Pivot into the hole

N = N + 1

CS 111 – Introduction to Computing

Recursive Structures Java

PHP

Python

CS 111 – Introduction to Computing

Recursive Structures

Repeating the set of instructions as

a subtask of itself.

Multiple activations of the procedure

are formed, all but one of which are

waiting for other activations to

complete.

Example: The Binary Search

Algorithm

CS 111 – Introduction to Computing

Applying our strategy to search a list for the entry John

CS 111 – Introduction to Computing

A First Draft of the Binary Search Technique

if (List is empty):

Report that the search failed

else:

TestEntry = middle entry in the List

if (TargetValue == TestEntry):

Report that the search succeeded

if (TargetValue < TestEntry):

Search the portion of List preceding TestEntry for TargetValue, and report the result of that search if (TargetValue > TestEntry):

Search the portion of List following TestEntry for TargetValue, and report the result of that search

CS 111 – Introduction to Computing

The Binary Search Algorithm in Pseudocode

def Search(List, TargetValue):

if (List is empty):

Report that the search failed

else:

TestEntry = middle entry in the List

if (TargetValue == TestEntry):

Report that the search succeeded

if (TargetValue < TestEntry):

Sublist = portion of List preceding TestEntry

Search(Sublist, TargetValue)

if (TargetValue < TestEntry):

Sublist = portion of List following TestEntry

Search(Sublist, TargetValue)

CS 111 – Introduction to Computing

Recursively Searching

CS 111 – Introduction to Computing

Second Recursive Search CS 111 – Introduction to Computing

Second Recursive Search, Second Snapshot

CS 111 – Introduction to Computing

Recursive Control

Requires initialization, modification,

and a test for termination (base

case)

Provides the illusion of multiple

copies of the function, created

dynamically in a telescoping

manner

Only one copy is actually running at

a given time, the others are waiting

CS 111 – Introduction to Computing

Efficiency and Correctness

Python

Java

PHP

CS 111 – Introduction to Computing

Efficiency and Correctness

Requires initialization, modification,

and a test for termination (base

case)

Provides the illusion of multiple

copies of the function, created

dynamically in a telescoping

manner

Only one copy is actually running at

a given time, the others are waiting

CS 111 – Introduction to Computing

Efficiency

Measured as number of instructions executed

Uses big theta notation:

Example: Insertion sort is in Θ(n2)

Incorporates best, worst, and average case analysis

CS 111 – Introduction to Computing

Applying the Insertion Sort in a Worst Case Situation

CS 111 – Introduction to Computing

Graph of the Worst-case Analysis of the Insertion Sort Algorithm

CS 111 – Introduction to Computing

Software Verification

Proof of correctness (with formal

logic)

▪ Assertions (Preconditions and Loop

invariants)

Testing is more commonly used to

verify software

Testing only proves that the

program is correct for the test cases

used

CS 111 – Introduction to Computing

Chain Separating Problem

A traveler has a gold chain of seven links.

He must stay at an isolated hotel for seven nights.

The rent each night consists of one link from the chain.

What is the fewest number of links that must be cut so that the traveler can pay the hotel one link of the chain each

morning without paying for lodging in advance?

CS 111 – Introduction to Computing

Separating the Chain using only Three Cuts

CS 111 – Introduction to Computing

Solving the problem with only One Cut

CS 111 – Introduction to Computing

The Assertions Associated with a typical While Structure

CS 111 – Introduction to Computing

Flowchart Symbols

CS 111 – Introduction to Computing

CS 111 – Introduction to Computing

</End>

robot