Algorytmika i niezmiennik pętli

0

Witam.
Mam pytanie czy zna ktoś jakąś książkę, stronę albo inne źródła gdzie można by było poćwiczyć znajdowanie niezmienników pętli? Miałem dzisiaj na kolosie takie zadanie "znaleźć niezmiennik pętli funkcji POWER"

POWER(a, n)
p <- 1.0
q <- a
i <- n
while i > 0 do
   if i % 2 = 0 then
      p <- p * q

   q <- q * q
   i <- i / 2
return p

siedziałem nad tym dosłownie pół godziny i nie wymyśliłem. Może mi ktoś powiedzieć jaki tutaj jest niezmiennik i zarazem zaproponować inną książkę niż "Wprowadzenie do algorytmów - Cormena" gdzie można takie coś poćwiczyć?
Ktoś rzucił hasło, że niezmiennikiem jest wyrażenie q^i * p , ale za nic mi to nie pasuje.

0

odświeżam temat.
Jakby ktoś mógł pomóc, to proszę.

0

Skoro nie zamkniety to odswiezam, sprawa nadal aktualna. Jaki tu bedzie niezmiennik i jak go uzasadnic ?

1

A co ten algorytm ma niby robić? Nazwa sugeruje, że jest to algorytm potęgowania, ale to nie jest potęgowanie. Zatem pętla może nie mieć żadnego przydatnego niezmiennika.
Może autor wątku (lub autor zadania) się pomylił, i warunek miał wyglądać tak:

if i % 2 = 1 then

Wtedy niezmiennikiem jest wyrażenie wartość wyrażenia qi*p.

1

Przy uwzględnieniu poprawki zaproponowanej przez @bogdans niezmiennikiem jest:
p*qi=an

1 użytkowników online, w tym zalogowanych: 0, gości: 1