Module #5 - Algorithms
University of Florida
Dept. of Computer & Information Science & Engineering
COT 3100
Applications of Discrete Structures
Dr. Michael P. Frank
Slides for a Course Based on the Text
Discrete Mathematics & Its Applications
(5th Edition)
by Kenneth H. Rosen
08/28/25 (c)2001-2003, Michael P. Frank 1
Module #5 - Algorithms
Module #5:
Algorithms
Rosen 5th ed., §2.1
~31 slides, ~1 lecture
Abu al-Khowarizmi
(ca. 780-850)
08/28/25 (c)2001-2003, Michael P. Frank 2
Module #5 - Algorithms
Chapter 2: More Fundamentals
• §2.1: Algorithms • §2.5: Integers &
– Formal procedures Algorithms
• §2.2: Orders of Growth – Alternate bases, algorithms
for basic arithmetic
• §2.3: Complexity of
• §2.6: Number theory
algorithms
– Analysis using order-of-
applications
growth notation. – Public-Key Cryptography
• §2.4: The Integers & • §2.7: Matrices
Division – Some basic linear algebra.
– Some basic number theory.
08/28/25 (c)2001-2003, Michael P. Frank 3
Module #5 - Algorithms
§2.1: Algorithms
• The foundation of computer programming.
• Most generally, an algorithm just means a definite
procedure for performing some sort of task.
• A computer program is simply a description of an
algorithm, in a language precise enough for a
computer to understand, requiring only operations
that the computer already knows how to do.
• We say that a program implements (or “is an
implementation of”) its algorithm.
08/28/25 (c)2001-2003, Michael P. Frank 4
Module #5 - Algorithms
Algorithms You Already Know
• Grade-school arithmetic algorithms:
– How to add any two natural numbers written in
decimal on paper, using carries.
– Similar: Subtraction using borrowing.
– Multiplication & long division.
• Your favorite cooking recipe.
• How to register for classes at UF.
08/28/25 (c)2001-2003, Michael P. Frank 5
Module #5 - Algorithms
Programming Languages
• Some common programming languages:
– Newer: Java, C, C++, C#, Visual Basic,
JavaScript, Perl, Tcl, Pascal, many others…
– Older: Fortran, Cobol, Lisp, Basic
– Assembly languages, for low-level coding.
• In this class we will use an informal,
Pascal-like “pseudo-code” language.
• You should know at least 1 real language!
08/28/25 (c)2001-2003, Michael P. Frank 6
Module #5 - Algorithms
Algorithm Example (English)
• Task: Given a sequence {ai}=a1,…,an,
aiN, say what its largest element is.
• One algorithm for doing this, in English:
– Set the value of a temporary variable v (largest
element seen so far) to a1’s value.
– Look at the next element ai in the sequence.
– If ai>v, then re-assign v to the number ai.
– Repeat then previous 2 steps until there are no
more elements in the sequence, & return v.
08/28/25 (c)2001-2003, Michael P. Frank 7
Module #5 - Algorithms
Executing an Algorithm
• When you start up a piece of software, we
say the program or its algorithm are being
run or executed by the computer.
• Given a description of an algorithm, you
can also execute it by hand, by working
through all of its steps with pencil & paper.
• Before ~1940, “computer” meant a person
whose job was to execute algorithms!
08/28/25 (c)2001-2003, Michael P. Frank 8
Module #5 - Algorithms
Executing the Max algorithm
• Let {ai}=7,12,3,15,8. Find its maximum…
• Set v = a1 = 7.
• Look at next element: a2 = 12.
• Is a2>v? Yes, so change v to 12.
• Look at next element: a2 = 3.
• Is 3>12? No, leave v alone….
• Is 15>12? Yes, v=15…
08/28/25 (c)2001-2003, Michael P. Frank 9
Module #5 - Algorithms
Algorithm Characteristics
Some important general features of algorithms:
• Input. Information or data that comes in.
• Output. Information or data that goes out.
• Definiteness. Algorithm is precisely defined.
• Correctness. Outputs correctly relate to inputs.
• Finiteness. Won’t take forever to describe or run.
• Effectiveness. Individual steps are all do-able.
• Generality. Works for many possible inputs.
• Efficiency. Takes little time & memory to run.
08/28/25 (c)2001-2003, Michael P. Frank 10
Module #5 - Algorithms
Our Pseudocode Language: §A2
procedure for variable := initial
name(argument: type) value to final value
variable := expression statement
informal statement while condition
begin statements end statement
{comment} procname(arguments)
if condition then Not defined in book:
statement [else return expression
statement]
08/28/25 (c)2001-2003, Michael P. Frank 11
Module #5 - Algorithms
procedure procname(arg: type)
• Declares that the following text defines a
procedure named procname that takes
inputs (arguments) named arg which are
data objects of the type type.
– Example:
procedure maximum(L: list of integers)
[statements defining maximum…]
08/28/25 (c)2001-2003, Michael P. Frank 12
Module #5 - Algorithms
variable := expression
• An assignment statement evaluates the
expression expression, then reassigns the
variable variable to the value that results.
– Example assignment statement:
v := 3x+7 (If x is 2, changes v to 13.)
• In pseudocode (but not real code), the
expression might be informally stated:
– x := the largest integer in the list L
08/28/25 (c)2001-2003, Michael P. Frank 13
Module #5 - Algorithms
Informal statement
• Sometimes we may write a statement as an
informal English imperative, if the meaning
is still clear and precise: e.g.,“swap x and y”
• Keep in mind that real programming
languages never allow this.
• When we ask for an algorithm to do so-and-
so, writing “Do so-and-so” isn’t enough!
– Break down algorithm into detailed steps.
08/28/25 (c)2001-2003, Michael P. Frank 14
Module #5 - Algorithms
begin statements end
• Groups a sequence of • Allows the sequence to
statements together: be used just like a
begin single statement.
statement 1 • Might be used:
statement 2 – After a procedure
… declaration.
statement n – In an if statement after
end then or else.
– In the body of a for or
Curly braces {} are used instead
while loop.
in many languages.
08/28/25 (c)2001-2003, Michael P. Frank 15
Module #5 - Algorithms
{comment}
• Not executed (does nothing).
• Natural-language text explaining some
aspect of the procedure to human readers.
• Also called a remark in some real
programming languages, e.g. BASIC.
• Example, might appear in a max program:
– {Note that v is the largest integer seen so far.}
08/28/25 (c)2001-2003, Michael P. Frank 16
Module #5 - Algorithms
if condition then statement
• Evaluate the propositional expression
condition.
– If the resulting truth value is True, then execute
the statement statement;
– otherwise, just skip on ahead to the next
statement after the if statement.
• Variant: if cond then stmt1 else stmt2
– Like before, but iff truth value is False,
executes stmt2.
08/28/25 (c)2001-2003, Michael P. Frank 17
Module #5 - Algorithms
while condition statement
• Evaluate the propositional (Boolean)
expression condition.
• If the resulting value is True, then execute
statement.
• Continue repeating the above two actions
over and over until finally the condition
evaluates to False; then proceed to the next
statement.
08/28/25 (c)2001-2003, Michael P. Frank 18
Module #5 - Algorithms
while condition statement
• Also equivalent to infinite nested ifs, like so:
if condition
begin
statement
if condition
begin
statement
…(continue infinite nested if’s)
end
end
08/28/25 (c)2001-2003, Michael P. Frank 19
Module #5 - Algorithms
for var := initial to final stmt
• Initial is an integer expression.
• Final is another integer expression.
• Semantics: Repeatedly execute stmt, first with
variable var := initial, then with var := initial+1,
then with var := initial+2, etc., then finally with
var := final.
• Question: What happens if stmt changes the value
of var, or the value that initial or final evaluates
to?
08/28/25 (c)2001-2003, Michael P. Frank 20
Module #5 - Algorithms
for var := initial to final stmt
• For can be exactly defined in terms of
while, like so:
begin
var := initial
while var final
begin
stmt
var := var + 1
end
end
08/28/25 (c)2001-2003, Michael P. Frank 21
Module #5 - Algorithms
procedure(argument)
• A procedure call statement invokes the
named procedure, giving it as its input the
value of the argument expression.
• Various real programming languages refer
to procedures as functions (since the
procedure call notation works similarly to
function application f(x)), or as subroutines,
subprograms, or methods.
08/28/25 (c)2001-2003, Michael P. Frank 22
Module #5 - Algorithms
Max procedure in pseudocode
procedure max(a1, a2, …, an: integers)
v := a1 {largest element so far}
for i := 2 to n {go thru rest of elems}
if ai > v then v := ai {found bigger?}
{at this point v’s value is the same as
the largest integer in the list}
return v
08/28/25 (c)2001-2003, Michael P. Frank 23
Module #5 - Algorithms
Inventing an Algorithm
• Requires a lot of creativity and intuition
– Like writing proofs.
• Unfortunately, we can’t give you an
algorithm for inventing algorithms.
– Just look at lots of examples…
– And practice (preferably, on a computer)
– And look at more examples…
– And practice some more… etc., etc.
08/28/25 (c)2001-2003, Michael P. Frank 24
Module #5 - Algorithms
Algorithm-Inventing Example
• Suppose we ask you to write an algorithm
to compute the predicate:
IsPrime:N→{T,F}
– Computes whether a given natural number is a
prime number.
• First, start with a correct predicate-logic
definition of the desired function:
n: IsPrime(n) ¬1<d<n: d|n
Means d divides n
evenly (without remainder)
08/28/25 (c)2001-2003, Michael P. Frank 25
Module #5 - Algorithms
IsPrime example, cont.
• Notice that the negated exponential can be
rewritten as a universal: Means d does not
divide n evenly
¬1<d<n: d|n 1<d<n: d | n (the remainder is ≠0)
2≤ d ≤ n−1: d | n
• This universal can then be translated directly into
a corresponding for loop:
for d := 2 to n−1 { Try all potential divisors >1 & <n }
if d|n then return F { n has divisor d; not prime }
return T { no divisors were found; n must be prime}
08/28/25 (c)2001-2003, Michael P. Frank 26
Module #5 - Algorithms
Optimizing IsPrime
• The IsPrime algorithm can be further optimized:
for d := 2 to n1/2 Note smaller range of search.
if d|n then return F
return T
• This works because of this theorem: If n has any
(integer) divisors, it must have one less than n1/2.
Proof: Suppose n’s smallest divisor >1 is a, and let
b :≡ n/a. Then n = ab, but if a > n1/2 then b > n1/2 (since a
is n’s smallest divisor) and so n = ab > (n1/2)2 = n, an
absurdity. Further optimizations are possible:
- E.g., only try divisors that
are primes less than n1/2.
08/28/25 (c)2001-2003, Michael P. Frank 27
Module #5 - Algorithms
Another example task
• Problem of searching an ordered list.
– Given a list L of n elements that are sorted into
a definite order (e.g., numeric, alphabetical),
– And given a particular element x,
– Determine whether x appears in the list,
– and if so, return its index (position) in the list.
• Problem occurs often in many contexts.
• Let’s find an efficient algorithm!
08/28/25 (c)2001-2003, Michael P. Frank 28
Module #5 - Algorithms
Search alg. #1: Linear Search
procedure linear search
(x: integer, a1, a2, …, an: distinct integers)
i := 1 {start at beginning of list}
while (i n x ai) {not done, not found}
i := i + 1 {go to the next position}
if i n then location := i {it was found}
else location := 0 {it wasn’t found}
return location {index or 0 if not found}
08/28/25 (c)2001-2003, Michael P. Frank 29
Module #5 - Algorithms
Search alg. #2: Binary Search
• Basic idea: On each step, look at the middle
element of the remaining list to eliminate
half of it, and quickly zero in on the desired
element.
<x <x <x >x
08/28/25 (c)2001-2003, Michael P. Frank 30
Module #5 - Algorithms
Search alg. #2: Binary Search
procedure binary search
(x:integer, a1, a2, …, an: distinct integers)
i := 1 {left endpoint of search interval}
j := n {right endpoint of search interval}
while i<j begin {while interval has >1 item}
m := (i+j)/2 {midpoint}
if x>am then i := m+1 else j := m
end
if x = ai then location := i else location := 0
return location
08/28/25 (c)2001-2003, Michael P. Frank 31
Module #5 - Algorithms
Practice exercises
• 2.1.3: Devise an algorithm that finds the
sum of all the integers in a list. [2 min]
• procedure sum(a1, a2, …, an: integers)
s := 0 {sum of elems so far}
for i := 1 to n {go thru all elems}
s := s + ai {add current item}
{at this point s is the sum of all items}
return s
08/28/25 (c)2001-2003, Michael P. Frank 32
Module #5 - Algorithms
Sorting Algorithms
• Sorting is a common operation in many
applications.
– E.g. spreadsheets and databases
• It is also widely used as a subroutine in
other data-processing algorithms.
• Two sorting algorithms shown in textbook:
– Bubble sort However, these are not
very efficient, and you should
– Insertion sort not use them on large data sets!
We’ll see some more efficient algorithms later in the course.
08/28/25 (c)2001-2003, Michael P. Frank 33
Module #5 - Algorithms
Bubble Sort
• Smallest elements “float” up to the top of
the list, like bubbles in a container of liquid.
30 30 1 1 1 1
31 1 30 30 2 2
1 31 31 2 30 3
32 32 2 31 3 30
33 2 32 3 31 31
2 33 3 32 32 32
34 3 33 33 33 33
3 34 34 34 34 34
08/28/25 (c)2001-2003, Michael P. Frank 34
Module #5 - Algorithms
Insertion Sort Algorithm
• English description of algorithm:
– For each item in the input list,
• “Insert” it into the correct place in the sorted output
list generated so far. Like so:
– Use linear or binary search to find the location where the
new item should be inserted.
– Then, shift the items from that position onwards down by
one position.
– Put the new item in the hole remaining.
08/28/25 (c)2001-2003, Michael P. Frank 35
Module #5 - Algorithms
Review §2.1: Algorithms
• Characteristics of algorithms.
• Pseudocode.
• Examples: Max algorithm, primality-testing, linear
search & binary search algorithms. Sorting.
• Intuitively we see that binary search is much faster
than linear search, but how do we analyze the
efficiency of algorithms formally?
• Use methods of algorithmic complexity, which
utilize the order-of-growth concepts from §1.8.
08/28/25 (c)2001-2003, Michael P. Frank 36