Algorytmika i niezmiennik pętli

Algorytmika i niezmiennik pętli
MJ
  • Rejestracja: dni
  • Ostatnio: dni
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"

Kopiuj
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.

MJ
  • Rejestracja: dni
  • Ostatnio: dni
0

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

  • Rejestracja: dni
  • Ostatnio: dni
0

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

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
if i % 2 = 1 then

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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.