Jordi Planes - UdL...

32
Algorithms Jordi Planes Escola Polit` ecnica Superior Universitat de Lleida 2016

Transcript of Jordi Planes - UdL...

Algorithms

Jordi Planes

Escola Politecnica SuperiorUniversitat de Lleida

2016

Vote in Sakai.

Syllabus

What’s been done

I Formal specification

I Cost

I Transformation recursion → iteration

Syllabus

What we’ll do today

I Formal specification

I Cost

I Transformation recursion → iteration

Recursion

“RecursiveTree” by Brentsmith101

Recursion

Recursion (Wikipedia)

Recursion is the process of repeating items in a self-similar way.

Example (Fibonacci)

fibonacci(x) = x · fibonacci(x − 1)

Recursion

Recursion (Wikipedia)

Recursion is the process of repeating items in a self-similar way.

Example (Fibonacci)

fibonacci(x) = x · fibonacci(x − 1)

Recursion (John D. Cook)

Be sure of three things:

1. The problem gets smaller each time.

2. You include a solution for the base case.

3. Each case is handled correctly.

General scheme

funct ion r e c u r s i v e ( x ) i sbase c a s e → return t r i v i a l ( x )r e c u r s i v e c a s e →

y = r e c u r s i v e ( r e d u c e ( x ) )return compute ( x , y )

Example: factorial

funct ion f a c t o r i a l ( x ) i sx = 0 → return 1x > 0 →

y ← f a c t o r i a l ( x−1 )return x ∗ y

Example: product

Design the product by additions

funct ion p r o d u c t ( x , y ) i sx = 0 → return 0x > 0 →

p ← p r o d u c t ( x−1, y )return y + p

Example: product

funct ion p r o d u c t ( x , y ) i sx = 0 → return 0x > 0 →

p ← p r o d u c t ( x−1, y )return y + p

Exercises

I Digit counter for an integer

I Addition of all the elements in a list

I Check if a list is sorted

I Power by products

I Division by substrations

I Integer Division

I Maximum in a list

I Lineal search

Transformations

Transformations

I Any recursive computation has each equivalent iterativecomputation, and viceversa

I The easiest transformation: tail recursion

I General Scheme:

Recursive → Tail recursive → Iterative

Transformations

I Any recursive computation has each equivalent iterativecomputation, and viceversa

I The easiest transformation: tail recursion

I General Scheme:

Recursive → Tail recursive → Iterative

Transformations

I Any recursive computation has each equivalent iterativecomputation, and viceversa

I The easiest transformation: tail recursion

I General Scheme:

Recursive → Tail recursive → Iterative

Transformations

Tail callA tail call is a subroutine call performed as the final action of aprocedure.

funct ion c a l l e r ( x ) i sy = some o p e r a t i o n sreturn c a l l e e ( y )

Tail recursionA tail recursion is a tail call which calls the caller.

funct ion c a l l e r ( x ) i sy = some o p e r a t i o n sreturn c a l l e r ( y )

Transformations

Tail callA tail call is a subroutine call performed as the final action of aprocedure.

funct ion c a l l e r ( x ) i sy = some o p e r a t i o n sreturn c a l l e e ( y )

Tail recursionA tail recursion is a tail call which calls the caller.

funct ion c a l l e r ( x ) i sy = some o p e r a t i o n sreturn c a l l e r ( y )

General scheme

funct ion r e c u r s i v e ( x ) i sbase c a s e → return t r i v i a l ( x )r e c u r s i v e c a s e →

y = r e c u r s i v e ( r e d u c e ( x ) )return compute ( x , y )

funct ion r e c u r s i v e ( x , a ) i sbase c a s e → ar e c u r s i v e c a s e →

a = compute ( x , a )return r e c u r s i v e ( r e d u c e ( x ) , a )

r e c u r s i v e ( x , t r i v i a l ( x ) )

General scheme

funct ion r e c u r s i v e ( x ) i sbase c a s e → return t r i v i a l ( x )r e c u r s i v e c a s e →

y = r e c u r s i v e ( r e d u c e ( x ) )return compute ( x , y )

funct ion r e c u r s i v e ( x , a ) i sbase c a s e → ar e c u r s i v e c a s e →

a = compute ( x , a )return r e c u r s i v e ( r e d u c e ( x ) , a )

r e c u r s i v e ( x , t r i v i a l ( x ) )

Example: factorial

funct ion f a c t o r i a l ( x ) i sx = 0 → return 1x > 0 →

y ← f a c t o r i a l ( x−1 )return x ∗ y

funct ion f a c t o r i a l ( x , a ) i sx = 0 → return ax > 0 →

a ← x ∗ areturn f a c t o r i a l ( x−1, a )

f a c t o r i a l ( x , 1 )

Example: factorial

funct ion f a c t o r i a l ( x ) i sx = 0 → return 1x > 0 →

y ← f a c t o r i a l ( x−1 )return x ∗ y

funct ion f a c t o r i a l ( x , a ) i sx = 0 → return ax > 0 →

a ← x ∗ areturn f a c t o r i a l ( x−1, a )

f a c t o r i a l ( x , 1 )

Exercises

I Digit counter for an integer

I Addition of all the elements in a list

I Check if a list is sorted

I Power by products

I Division by substrations

I Integer Division

I Maximum in a list

I Lineal search

General scheme

funct ion r e c u r s i v e ( x , a ) i sbase c a s e → ar e c u r s i v e c a s e →

return r e c u r s i v e ( r e d u c e ( x ) , compute ( x , a ) )

r e c u r s i v e ( x , t r i v i a l ( x ) ) i s

funct ion r e c u r s i v e ( x ) i sa ← t r i v i a l ( x )whi le not base c a s e ( x ) do

a ← compute ( x , a )x ← r e d u c e ( x )

return a

General scheme

funct ion r e c u r s i v e ( x , a ) i sbase c a s e → ar e c u r s i v e c a s e →

return r e c u r s i v e ( r e d u c e ( x ) , compute ( x , a ) )

r e c u r s i v e ( x , t r i v i a l ( x ) ) i s

funct ion r e c u r s i v e ( x ) i sa ← t r i v i a l ( x )whi le not base c a s e ( x ) do

a ← compute ( x , a )x ← r e d u c e ( x )

return a

Example: factorial

funct ion f a c t o r i a l ( x , a ) i sx = 0 → return ax > 0 →

a ← x ∗ areturn f a c t o r i a l ( x−1, a )

f a c t o r i a l ( x , 1 )

funct ion f a c t o r i a l ( x ) i sa ← 1whi le not x = 0 do

a ← a ∗ xx ← x − 1

return a

Example: factorial

funct ion f a c t o r i a l ( x , a ) i sx = 0 → return ax > 0 →

a ← x ∗ areturn f a c t o r i a l ( x−1, a )

f a c t o r i a l ( x , 1 )

funct ion f a c t o r i a l ( x ) i sa ← 1whi le not x = 0 do

a ← a ∗ xx ← x − 1

return a

Exercises

I Digit counter for an integer

I Addition of all the elements in a list

I Check if a list is sorted

I Power by products

I Division by substrations

I Integer Division

I Maximum in a list

I Lineal search

Compute the costs

Compute the costs for the previous exercises.