Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science &...

54
CSIE, NTUT, TAIWAN 1 Applied Computing Lab Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology Taiwan
  • date post

    15-Jan-2016
  • Category

    Documents

  • view

    229
  • download

    0

Transcript of Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science &...

Page 1: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN1

Applied Computing Lab

Data Structures

Chuan-Ming LiuComputer Science & Information Engineering

National Taipei University of Technology

Taiwan

Page 2: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN2

Applied Computing Lab

Instructor

Chuan-Ming Liu (劉傳銘 )Office: 1530 Technology Building

Computer Science and Information EngineeringNational Taipei University of Technology

TAIWAN

Phone:  (02) 2771-2171 ext. 4251Email: [email protected] Office Hours: Mon: 11:10-12:00, 13:10-14:00 and

Thu:10:10 - 12:00, OR by appointment.

Page 3: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN3

Applied Computing Lab

Teaching Assisant

Bill In-Chi Su (蘇英啟 )

Office: 1226 Technology Building

Office Hours: Tue:10:00~12:00 and Wed: 10:00 ~ 12:00, OR by appointment

Email: [email protected] Phone: 02-2771-2171 ext. 4262

Page 4: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN4

Applied Computing Lab

Text Books

Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Frees, Fundamentals of Data Structures

in C, 2nd edition, Silicon Press, 2008.

Supplementary Texts • Michael T. Goodrich and Roberto Tamassia, Data Structures and Algorit

hms in JAVA, 4th edition, John Wiley & Sons, 2006. ISBN: 0-471-73884-0.

• Sartaj Sahni, Data Structures, Algorithms, and Applications in JAVA, 2nd edition, Silicon Press, 2005. ISBN: 0-929306-33-3.

• Frank M. Carranno and Walter Savitch, Data Structures and Abstractions with Java, Prentice Hall, 2003. ISBN: 0-13-017489-0.

Page 5: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN5

Applied Computing Lab

Course Outline• Introduction and Recursion • Analysis Tools • Arrays • Stacks and Queues • Linked Lists • Sorting • Hashing • Trees • Priority Queues • Search Trees • Graphs

Page 6: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN6

Applied Computing Lab

Course Work

• Assignments (50%): 6-8 homework sets

• Midterm (20%)

• Final exam (30%)

Page 7: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN7

Applied Computing Lab

Course Policy (1)

• No late homework is acceptable. • For a regrade please contact me for the question withi

n 10 days from the date when the quiz or exam was officially returned. No regrading after this period.

• Cheating directly affects the reputation of the Department and the University and lowers the morale of other students. Cheating in homework and exam will not be tolerated.  An automatic grade of 0 will be assigned to any student caught cheating. Presenting another person's work as your own constitutes cheating. Everything you turn in must be your own doing.

Page 8: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN8

Applied Computing Lab

Course Policy (2)

• The following activities are specifically forbidden on all graded course work: – Theft or possession of another student's solution or partial

solution in any form (electronic, handwritten, or printed).

– Giving a solution or partial solution to another student, even with the explicit understanding that it will not be copied.

– Working together to develop a single solution and then turning in copies of that solution (or modifications) under multiple names.

Page 9: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN9

Applied Computing Lab

First Thing to Do

• Please visit the course web site http://www.cc.ntut.edu.tw/~cmliu/DS/NTUT_DS_S09u-GIT/

• Send an email to me using the email address:[email protected]. I will make a mailing list for this course. All the announcements will be broadcast via this mailing list.

Page 10: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN10

Applied Computing Lab

Introduction

Chuan-Ming LiuComputer Science & Information Engineering

National Taipei University of TechnologyTaiwan

Page 11: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN11

Applied Computing Lab

Outline

• Data Structures and Algorithms

• Pseudo-code

• Recursion

Page 12: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN12

Applied Computing Lab

What is Data Structures

• A data structure * in computer science is a way of storing data in a computer so that it can be used efficiently. – An organization of mathematical and logical

concepts of data– Implementation using a programming language – A proper data structure can make the algorithm or

solution more efficient in terms of time and space

* Wikipedia: http://en.wikipedia.org/wiki/Data_structure

Page 13: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN13

Applied Computing Lab

Why We Learn Data Structures

• Knowing data structures well can make our programs or algorithms more efficient

• In this course, we will learn– Some basic data structures– How to tell if the data structures are good or bad– The ability to create some new and advanced data

structures

Page 14: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN14

Applied Computing Lab

What is an Algorithm (1)

An algorithm is a finite set of instructions that, if followed, accomplishes a particular task. All the algorithms must satisfy the following criteria:– Input– Output– Precision (Definiteness)– Effectiveness– Finiteness

Page 15: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN15

Applied Computing Lab

What is an Algorithm (2)

• Definiteness: each instruction is clear and unambiguous

• Effectiveness: each instruction is executable; in other words, feasibility

• Finiteness: the algorithm terminates after a finite number of steps.

Page 16: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN16

Applied Computing Lab

What is an Algorithm (3)

Input OutputDefiniteness

Effectiveness

Finiteness

Computational Procedures

Page 17: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN17

Applied Computing Lab

Procedures vs. Algorithms

• Termination or not

• One example for procedure is OS

• Program, a way to express an algorithm

Page 18: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN18

Applied Computing Lab

Expressing Algorithms

• Ways to express an algorithm

– Graphic (flow chart)

– Programming languages (C/C++)

– Pseudo-code representation

Page 19: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN19

Applied Computing Lab

Outline

• Data Structures and Algorithms

• Pseudo-code

• Recursion

Page 20: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN20

Applied Computing Lab

Example – Selection Sort

Suppose we must devise a program that sorts a collection of n1 elements.

Idea: Among the unsorted elements, select the smallest one and place it next in the sorted list.

for (int i=1; i<=n; i++) { examine a[i] to a[n] and supposethe smallest element is at a[j];interchange a[i] and a[j];

}

Page 21: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN21

Applied Computing Lab

Pseudo-code for Selection Sort

SelectionSort(A) /* Sort the array A[1:n] into nondecreasing order. */

for i 1 to length[A] do j i

for k (i+1) to length[A] do if A[k]<A[j]

then j k;t A[i]A[i] A[j]A[j] t

Page 22: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN22

Applied Computing Lab

Maximum of Three Numbers

This algorithm finds the largest of the numbers a, b, and c.

Input Parameters: a, b, cOutput Parameter: xmax(a,b,c,x) {x = a

if (b > x) // if b is larger than x, update x x = b if (c > x) // if c is larger than x, update x x = c}

Page 23: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN23

Applied Computing Lab

Pseudo-Code Conventions

• Indentation as block structure

• Loop and conditional constructs similar to those in PASCAL, such as while, for, repeat( do – while) , if-then-else

• // as the comment in a line

• Using = for the assignment operator

• Variables local to the given procedure

Page 24: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN24

Applied Computing Lab

Pseudo-Code Conventions

• Relational operators: ==, != , , .

• Logical operators: &&, ||, !.

• Array element accessed by A[i] and A[1..j] as the subarray of A

Page 25: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN25

Applied Computing Lab

Outline

• Data Structures and Algorithms

• Pseudo-code

• Recursion

Page 26: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN26

Applied Computing Lab

Recursion

• Recursion is the concept of defining a method that makes a call to itself

• A method calling itself is making a recursive call

• A method M is recursive if it calls itself (direct recursion) or another method that ultimately leads to a call back to M (indirect recursion)

Page 27: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN27

Applied Computing Lab

Repetition

• Repetition can be achieved by– Loops (iterative) : for loops and while loops– Recursion (recursive) : a function calls itself

• Factorial function– General definition: n! = 1· 2· 3· ··· · (n-1)· n– Recursive definition

elsenfn

nnf

)1(

0 if1)(

Page 28: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN28

Applied Computing Lab

Method for Factorial Function

• recursive factorial function public static int recursiveFactorial(int n) { if (n == 0) return 1; else return n * recursiveFactorial(n- 1);

}

Page 29: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN29

Applied Computing Lab

Content of a Recursive Method

• Base case(s)– Values of the input variables for which we perform no r

ecursive calls are called base cases (there should be at least one base case).

– Every possible chain of recursive calls must eventually reach a base case.

• Recursive calls– Calls to the current method.

– Each recursive call should be defined so that it makes progress towards a base case.

Page 30: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN30

Applied Computing Lab

Visualizing Recursion

• Recursion trace• A box for each recur

sive call• An arrow from each

caller to callee• An arrow from each

callee to caller showing return value

Example recursion trace:

recursiveFactorial(4)

recursiveFactorial(3)

recursiveFactorial(2)

recursiveFactorial(1)

recursiveFactorial(0)return 1

return 1*1

return 2*1

return 3*2

return 4*6

Page 31: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN31

Applied Computing Lab

About Recursion

• Advantages– Avoiding complex case analysis– Avoiding nested loops– Leading to a readable algorithm description– Efficiency

• Examples– File-system directories– Syntax in modern programming languages

Page 32: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN32

Applied Computing Lab

Linear Recursion

• The simplest form of recursion

• A method M is defined as linear recursion if it makes at most one recursive call

• Example: Summing the Elements of an Array– Given: An integer array A of size m and an integer

n, where m ≧n 1.≧– Problem: the sum of the first n integers in A.

Page 33: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN33

Applied Computing Lab

Summing the Elements of an Array

• Solutions:– using (for) loop– using recursion

Algorithm LinearSum(A, n):Input: integer array A, an integer n ≧ 1, such that A has at least n elementsOutput: The sum of the first n integers in A

if n = 1 then return A[0]else return LinearSum(A, n - 1) + A[n - 1]

Note: the index starts from 0.

Page 34: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN34

Applied Computing Lab

Recursive Method

• An important property of a recursive method – the method terminates

• An algorithm using linear recursion has the following form:– Test for base cases– Recur

Page 35: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN35

Applied Computing Lab

Analyzing Recursive Algorithms

• Recursion trace– Box for each instance of the method– Label the box with parameters– Arrows for calls and returns

LinearSum(A,5)

LinearSum(A,1)

LinearSum(A,2)

LinearSum (A,3)

LinearSum(A,4)

call

call

call

call return A[0] = 4

return 4 + A[1] = 4 + 3 = 7

return 7 + A[2] = 7 + 6 = 13

return 13 + A[3] = 13 + 2 = 15

call return 15 + A[4] = 15 + 5 = 20

Page 36: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN36

Applied Computing Lab

Example

• Reversing an Array by Recursion– Given: An array A of size n– Problem: Reverse the elements of A (the first

element becomes the last one, …)

• Solutions– Nested loop ?– Recursion

Page 37: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN37

Applied Computing Lab

Reversing an Array

Algorithm ReverseArray(A, i, j): Input: An array A and nonnegative integer indices i a

nd j Output: The reversal of the elements in A starting at i

ndex i and ending at j if i < j then

Swap A[i] and A[ j]ReverseArray(A, i + 1, j - 1)

return

Page 38: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN38

Applied Computing Lab

Facilitating Recursion

• In creating recursive methods, it is important to define the methods in ways that facilitate recursion.

• This sometimes requires we define additional parameters that are passed to the method.– For example, we defined the array reversal method

as ReverseArray(A, i, j), not ReverseArray(A).

Page 39: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN39

Applied Computing Lab

Example – Computing Powers

• The power function, p(x, n)=xn, can be defined recursively:

• Following the definition leads to an O(n) time recursive algorithm (for we make n recursive calls).

• We can do better than this, however.

else)1,(

0 if1),(

nxpx

nnxp

Page 40: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN40

Applied Computing Lab

Recursive Squaring• We can derive a more efficient linearly

recursive algorithm by using repeated squaring:

• For example,24= 2(4/2)2 = (24/2)2 = (22)2 = 42 = 1625= 21+(4/2)2 = 2(24/2)2 = 2(22)2 = 2(42) = 3226= 2(6/2)2 = (26/2)2 = (23)2 = 82 = 6427= 21+(6/2)2 = 2(26/2)2 = 2(23)2 = 2(82) = 128

even is 0 if

odd is 0 if

0 if

)2/,(

)2/)1(,(

1

),(2

2

n

n

n

nxp

nxpxnxp

Page 41: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN41

Applied Computing Lab

A Recursive Squaring Method

Algorithm Power(x, n): Input: A number x and integer n ≧ 0 Output: The value xn

if n = 0 thenreturn 1

if n is odd theny = Power(x, (n - 1)/ 2)return x · y ·y

else /* n is even */y = Power(x, n/ 2)return y · y

Page 42: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN42

Applied Computing LabAnalyzing the Recursive

Squaring Method

Algorithm Power(x, n): Input: A number x and integer n 0≧ Output: The value xn

if n = 0 thenreturn 1

if n is odd theny = Power(x, (n - 1)/ 2)return x · y · y

elsey = Power(x, n/ 2)return y · y

Each time we make a recursive call we halve the value of n; hence, we make log n recursive calls. That is, this method runs in O(log n) time.

It is important that we used a variable twice here rather than calling the method twice.

Page 43: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN43

Applied Computing Lab

Tail Recursion

• Tail recursion occurs when a linearly recursive method makes its recursive call as its last step.

• Such methods can be easily converted to non-recursive methods (which saves on some resources).

• The array reversal method is an example.

Page 44: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN44

Applied Computing Lab

Example – Using Iteration

Algorithm IterativeReverseArray(A, i, j ):

Input: An array A and nonnegative integer

indices i and j

Output: The reversal of the elements in A

starting at index i and ending at j

while i < j doSwap A[i ] and A[ j ]

i = i + 1

j = j - 1

return

Page 45: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN45

Applied Computing Lab

Binary Recursion

• Binary recursion occurs whenever there are two recursive calls for each non-base case.

• Example: BinaySum

Page 46: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN46

Applied Computing LabExample – Summing n

Elements in an Array

• Recall that this problem has been solved using linear recursion

• Using binary recursion instead of linear recursionAlgorithm BinarySum(A, i, n):

Input: An array A and integers i and n

Output: The sum of the n integers in A starting at index i

if n = 1 then

return A[i ]

return BinarySum(A,i,n/2)+BinarySum(A,i+n/2,n/2)

Page 47: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN47

Applied Computing Lab

Recursion Trace

• Note the floor and ceiling used in the method

3, 1

2, 2

0, 4

2, 11, 10, 1

0, 8

0, 2

7, 1

6, 2

4, 4

6, 15, 1

4, 2

4, 1

Page 48: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN48

Applied Computing Lab

Fibonacci Numbers

• Fibonacci numbers are defined recursively:

F0 = 0

F1 = 1

Fi = Fi-1 + Fi-2 for i > 1.

• Example: 0, 1, 1, 2, 3, 5, 8, …

Page 49: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN49

Applied Computing LabFibonacci Numbers – Binary

Recursion

Algorithm BinaryFib(k):Input: Nonnegative integer kOutput: The kth Fibonacci number Fk

if k ≦ 1 thenreturn k

elsereturn BinaryFib(k-1) + BinaryFib

(k-2)

Page 50: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN50

Applied Computing Lab

Analyzing the Binary Recursion

• Algorithm BinaryFib makes a number of calls that are exponential in k

• By observation, there are many redundant computations:

F0 = 0; F1 = 1; F2 = F1 + F0;

F3 = F2 + F1 =(F1 + F0)+ F1; …

• The above two results show the inefficiency of the method using binary recursion

Page 51: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN51

Applied Computing Lab

A Better Fibonacci Algorithm

• Using linear recursion instead – avoid the redundant computation:Algorithm LinearFibonacci(k):

Input: A nonnegative integer kOutput: Pair of Fibonacci numbers (Fk, Fk-1)if k = 1 then return (k, 0)else (i, j) = LinearFibonacci(k - 1) return (i +j, i)

• Runs in O(k) time.

Page 52: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN52

Applied Computing Lab

Multiple Recursion

• Motivating example: summation puzzles• pot + pan = bib

• dog + cat = pig

• boy + girl = baby

• Multiple recursion: makes potentially many recursive calls (not just one or two).

Page 53: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN53

Applied Computing Lab

Algorithm for Multiple Recursion

Algorithm PuzzleSolve(k,S,U): Input: An integer k, sequence S, and set U (the universe of elements to test) Output: An enumeration of all k-length extensions to S using elements in U

without repetitions for all e in U do

Remove e from U {e is now being used}Add e to the end of Sif k = 1 then

Test whether S is a configuration that solves the puzzleif S solves the puzzle then

return “Solution found: ” Selse

PuzzleSolve(k - 1, S,U)Add e back to U {e is now unused}Remove e from the end of S

Page 54: Applied Computing Lab CSIE, NTUT, TAIWAN 1 Data Structures Chuan-Ming Liu Computer Science & Information Engineering National Taipei University of Technology.

CSIE, NTUT, TAIWAN54

Applied Computing Lab

Visualizing PuzzleSolve()

PuzzleSolve (3,(),{a,b,c})

Initial call

PuzzleSolve (2,c,{a,b})PuzzleSolve (2,b,{a,c})PuzzleSolve (2,a,{b,c})

PuzzleSolve (1,ab ,{c})

PuzzleSolve (1,ac ,{b}) PuzzleSolve (1,cb,{a})

PuzzleSolve (1,ca ,{b})

PuzzleSolve (1,bc ,{a})

PuzzleSolve (1,ba ,{c})

abc

acb

bac

bca

cab

cba