Notes on algorithms, and examples

Transcription

Notes on algorithms, and examples
CSI30 Discrete Math I
March 23-25, 2015
Algorithms
'Algorithm' stems from the name of a Latin translation of a book written by Abū
‘Abdallāh Muḥammad ibn Mūsā al-Khwārizmī (c. 780 – c. 850), a Persian
mathematician, astronomer and geographer. Al-Khwarizmi wrote a book titled On the
Calculation with Hindu Numerals in about 825 AD, and was principally responsible for
spreading the Indian system of numeration throughout the Middle East and Europe. It
was translated into Latin as Algoritmi de numero Indorum (in English, "Al-Khwarizmi on
the Hindu Art of Reckoning"). The term "Algoritmi" in the title of the book led to the term
"algorithm". (From Wikipedia)
An algorithm is a finite set of precise instruction for solving a specific problem. It should
have these properties:
Input: An algorithm takes some value or set of values from a specific set.
Output: Based on the input values, an algorithm produces output values from some
specific set. The output values give the solution to the problem.
Definiteness: The steps of an algorithm must be defined precisely.
Correctness: The algorithm should produce the correct solution to the problem.
Finiteness: Given any valid input, the algorithm should produce the desired output
after a finite number of steps.
Effectiveness: It must be possible to perform each step of the algorithm exactly and in
a finite amount of time.
Generality: The algorithm should apply to all problems of the type, not just for a
particular set of input values.
Some important algorithms:
Finding the maximum element in a finite sequence
procedure maximum( a1, a2, a3, …, an: integers)
max:= a1
#Remember the largest seen so far.
for i := 2 to n
if max < ai then max := ai
#If the current item is larger than the largest
#seen so far, update the value of max.
return max, the largest element
Searching algorithms: Find the location of an element x, the target, in a list of elements,
or report that it is not present.
Linear search or sequential search
procedure linear search(x: integer, a1, a2, a3, …, an: distinct integers )
i := 1
while (i ≤ n and x ≠ ai)
#while there are still items to examine, and the current
#item is not x
i := I + 1
#go to the next index
if i ≤ n then location := I
#the while loop ends if either all items are examined
else location := 0
# or the item is found. Determine which one.
return location, the subscript of the term that equals x, or is 0 if x is not found.
Binary search
procedure binary search(x: integer, a1, a2, a3, …, an: integers in increasing order )
i := 1 ( i is left endpoint of the search interval)
j: = n ( j is the right endpoint of search interval)
while i < j
#the interval being examined has more than one
#element.
begin
mid := floor((i + j)/2)
#find the middle of the interval
if x > amid then i = mid +1 #if x would be to the right of the middle, move the left
else j := mid
#endpoint in, else move the right endpoint in.
end
if x = ai then location := I
else location := 0
#either the element where the searched stopped is
#x, or it isn’t
return location, the subscript of the term that equals x, or is 0 if x is not found.
Sorting algorithms
Bubble sort successively compares adjacent elements, interchanging them if they are
in the wrong order.
Procedure bubblesort( a1, a2, a3, …, an: real numbers with n ≥2)
for i:=1 to n-1
for j := 1 to n-i
#Push the ith largest element to its position at the end
if aj > aj+1 then interchange aj and aj+1
return (a1, a2, a3, …, an) now in increasing order
Insertion sort creates a sorted initial sequence of the list, and inserts each element into
that sorted sequence in the correct position.
Procedure insertionsort( a1, a2, a3, …, an: real numbers with n ≥2)
for j:=2 to n
#j is the position of element being inserted
begin
i:=1
while aj > ai
#Find the correct position i for element aj
i:=i+1
m:= aj
#Remember the element in position j
for k := 0 to j-i-1
#Move the elements back
aj-k := aj-k-1
ai := m
#Put the element that was in position j in the
#correct position
return (a1, a2, a3, …, an) now in increasing order
Some elements of the pseudocode:
Assignment statement:
variable :=expression
The value of expression is assigned to the variable.
Conditional constructions:
if condition then statement
If the proposition condition is true, then statement is carried out.
if condition then statement1
else statement2
If the proposition condition is true, then statement1 is carried out. If condition is
false, then statement2 is carried out.
Loop constructions
for variable:= initial value to final value
statement
for variable:= initial value to final value
begin
block of statements
end
while condition
statement
while condition
begin
block of statements
end