06.03.2017 Views

Mathematics for Computer Science

e9ck2Ar

e9ck2Ar

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

“mcs” — 2017/3/3 — 11:21 — page 170 — #178<br />

170<br />

Chapter 6<br />

State Machines<br />

Since there is a transition from .x; y; z/, we have z ¤ 0, and since z 2 N<br />

by (6.1), we can consider just two cases:<br />

If z is even, then we have that x t D x 2 ; y t D y; z t D z=2. There<strong>for</strong>e, z t 2 N<br />

and<br />

y t x z t<br />

t D y.x 2 / z=2<br />

D yx 2z=2<br />

D yx z<br />

D a b (by (6.1))<br />

If z is odd, then we have that x t D x 2 ; y t D xy; z t D .z<br />

z t 2 N and<br />

y t x z t<br />

t D xy.x 2 .z 1/=2<br />

/<br />

1C2.z 1/=2<br />

D yx<br />

1C.z 1/<br />

D yx<br />

D yx z<br />

D a b (by (6.1))<br />

1/=2. There<strong>for</strong>e,<br />

So in both cases, (6.2) holds, proving that P is a preserved invariant.<br />

Now it’s easy to prove partial correctness: if the Fast Exponentiation program<br />

terminates, it does so with a b in register y. This works because 1 a b D a b , which<br />

means that the start state .a; 1; b/ satisifies P . By the Invariant Principle, P holds<br />

<strong>for</strong> all reachable states. But the program only stops when z D 0. If a terminated<br />

state .x; y; 0/ is reachable, then y D yx 0 D a b as required.<br />

Ok, it’s partially correct, but what’s fast about it? The answer is that the number<br />

of multiplications it per<strong>for</strong>ms to compute a b is roughly the length of the binary<br />

representation of b. That is, the Fast Exponentiation program uses roughly log b 2<br />

multiplications, compared to the naive approach of multiplying by a a total of b 1<br />

times.<br />

More precisely, it requires at most 2.dlog be C 1/ multiplications <strong>for</strong> the Fast<br />

Exponentiation algorithm to compute a b <strong>for</strong> b > 1. The reason is that the number<br />

in register z is initially b, and gets at least halved with each transition. So it can’t<br />

be halved more than dlog be C 1 times be<strong>for</strong>e hitting zero and causing the program<br />

to terminate. Since each of the transitions involves at most two multiplications, the<br />

total number of multiplications until z D 0 is at most 2.dlog be C 1/ <strong>for</strong> b > 0 (see<br />

Problem 6.6).<br />

2 As usual in computer science, log b means the base two logarithm log 2 b. We use, ln b <strong>for</strong> the<br />

natural logarithm log e b, and otherwise write the logarithm base explicitly, as in log 10 b.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!