COP 3530
Fall 1999
Diagnostic Test
Name:_____________________
1.
The algorithmic (programming) techniques of
recursion
and
iteration
can be related to the mathematical proof
technique of
induction
in a manner that allows inductive proofs of
correctness
and
runtime complexity
.
Show this
relationship by proving that the first of the following two code segments correctly computes N
2
, for N
≥
0, and that the
second has run time complexity 2
N
–1, N
≥
1.
In this latter case, we base complexity on the number of recursive calls
made.
function
sq(N :
integer
);
begin
if
N<=0
then
sq := 0
else
sq := 2*N – 1 + sq(N1)
end
;
{ sq }
HINT
: Prove S(N): sq(N) = N
2
, N
≥
0
procedure
Move (n:integer; X, Y, Z:char);
begin
if
n = 1
then
writeln('Move ', X, ' to ', Y)
else
begin
Move (n1, X, Z, Y);
writeln('Move ', X, ' to ', Y);
Move (n1, Z, Y, X)
end
end
;
{ Move }
HINT
: Prove S(N): T(N) = 2
N
–1, N
≥
1, where T(1) = 1; T(N) = 2
*
T(N–1) + 1, N>1.
This preview has intentionally blurred sections. Sign up to view the full version.
View Full Document
2.
A
dictionary
is an ADT that responds to the messages
insert
(newWord),
lookup
(oldWord) and
delete
(oldWord).
There are many competing abstract implementations for a dictionary, three of which are a
sorted linear list
(not a
linked list), a
balanced
binary search tree
and a
trie
.
Focusing on the lookup only, I have given informal algorithms
and analyses of the costs of looking up a word.
Discuss the
pros and cons
of each abstract implementation. Be sure to
specify the complexity of the other operations
(insert and delete) for each implementation.
This is the end of the preview.
Sign up
to
access the rest of the document.
 Summer '09
 Computer Science, Recursion, Array data structure, worst case, E. Hughes

Click to edit the document details