Nội dung Text: Algorithms and Data Structures in C part 6
Table 2.2 Calculations for a
100 MFLOP machine Time
# of Operations
1 second 108
1 minute 6×109
1 hour 3.6×1011
1 day 8.64×1012
1 year 3.1536×1015
1 century 3.1536×1017
100 trillion years 3.1536×1029
2.1.1 Justification of Using Order as a Complexity Measure
One of the major motivations for using Order as a complexity measure is to get a handle on the
inductive growth of an algorithm. One must be extremely careful however to understand that the
definition of Order is “in the limit.” For example, consider the time complexity functions f1 and f2
defined in Example 2.6. For these functions the asymptotic behavior is exhibited when n ≥ 1050.
Although f1 Θ (en) it has a value of 1 for n < 1050. In a pragmatic sense it would be desirable to
have a problem with time complexity f1 rather than f2. Typically, however, this phenomenon will
not appear and generally one might assume that it is better to have an algorithm which is Θ (1)
rather than Θ (en). One should always remember that the constants of order can be significant in
Example 2.2 Order
Example 2.3 Order
Previous Table of Contents Next
The well-ordering property is required for the inductive property to work. For example consider
the method of infinite descent which uses an inductive type approach. In this method it is
required to demonstrate that a specific property cannot hold for a positive integer. The approach
is as follows:
Example 2.5 Induction
1. Let P (k) = TRUE denote that a property holds for the value of k. Also assume that P(0) does
not hold so P(0) = FALSE.
Let S be the set that
From the well-ordering principle it is true that if S is not empty then S has a smallest
member. Let j be such a member:
2. Prove that P(j) implies P(j‐1) and this will lead to a contradiction since P(0) is FALSE and j was
assumed to be minimal so that S must be empty. This implies the property does not hold for any
positive integer k. See Problem 2.1 for a demonstration of infinite descent.
Recursion is a powerful technique for defining an algorithm.
A procedure is recursive if it is, whether directly or indirectly, defined in terms of itself.
One of the simplest examples of recursion is the factorial function f(n) = n!. This function can be
defined recursively as
A simple C++ program implementing the factorial function recursively is shown in Code List
2.1. The output of the program is shown in Code List 2.2.
Code List 2.1 Factorial
Code List 2.2 Output of Program in Code List 2.1
2.3.2 Fibonacci Numbers
The Fibonacci sequence, F(n), is defined recursively by the recurrence relation
A simple program which implements the Fibonacci sequence recursively is shown in Code List
2.3. The output of the program is shown in Code List 2.4.
Code List 2.3 Fibonacci Sequence Generation
Code List 2.4 Output of Program in Code List 2.3
The recursive implementation need not be the only solution. For instance in looking for a closed
solution to the relation if one assumes the form F (n) = λn one has
which assuming λ ≠ 0
The solution via the quadratic formula yields
Because Eq. 2.7 is linear it admits solutions of the form
To satisfy the boundary conditions in Eq. 2.8 one obtains the matrix form
multiplying both sides by the 2 × 2 matrix inverse
resulting in the closed form solution
A nonrecursive implementation of the Fibonacci series is shown in Code List 2.5. The output of
the program is the same as the recursive program given in Code List 2.4.
Code List 2.5 Fibonacci Program — Non Recursive Solution
2.3.3 General Recurrence Relations
This section presents the methodology to handle general 2nd order recurrence relations. The
recurrence relation given by
with initial conditions:
can be solved by assuming a solution of the form R (n) = λn. This yields
If the equation has two distinct roots, λ1,λ2, then the solution is of the form
where the constants, C1, C2, are chosen to enforce Eq. 2.19. If the roots, however, are not distinct
then an alternate solution is sought:
where λ is the double root of the equation. To see that the term C1nλn satisfies the recurrence
relation one should note that for the multiple root Eq. 2.18 can be written in the form
Substituting C1nλn into Eq. 2.23 and simplifying verifies the solution.