Informatika gyűjtemény

Egy szinttel feljebb Megoldás

2004050607080910

NézetNyomtat

Algoritmusok

Három különböző algoritmust beszéltünk meg. Az elsőt a szakkörösök találták ki, a másik kettőt "megtanultuk".

1. Mohó algoritmus

Fibonacci eljárását azért hívjuk mohónak, mert minden lépésben a lehető legnagyobb reciprokértéket veszi hozzá a felbontáshoz, majd a maradékkal dolgozik tovább. A mohó algoritmus legfeljebb $p$ darab törtből álló felbontást ad, de a nevezők nagyon nagyra nőhetnek. Például az $\frac{5}{121}$ tört egyiptomi alakja mohó algoritmussal számolva:

$\frac{5}{121}= \frac{1}{25}+ \frac{1}{757}+ \frac{1}{763309}+ \frac{1}{873960180912}+ \frac{1}{1527612795642093418846225}$

mohó(p,q):

    p’ := p; q’ := q
    Ciklus amíg p’ > 0
        a következő tört: 1/n, ahol 1/<= p’/q’ < 1/(n-1)
        p’ := p’n – q’; q’ := q’n
        p’/q’ egyszerűsítése
    Ciklus vége

2. Párosítós algoritmus

Kiindulunk a $\frac pq = \frac 1q + \frac 1q + \ldots + \frac 1q$ felbontásból, és fokozatosan megszüntetjük az egyenlő nevezőket. Az egyezések megszüntetése a következő módon történik:
$ \frac 1q + \frac 1q = \frac 2q = \left\{ \begin{array}{ll} \displaystyle{\frac {1}{\frac q2}} & , \mathrm{ha }q\mathrm{ ps} \\ \displaystyle{\frac {1}{\frac {q+1}2}+\frac {1}{\frac {q(q+1)}2}} & , \mathrm{ha }q \mathrm{ ptln} \end{array} $

A párosítási lépés nem növeli a felbontásban szereplő törtek számát és bizonyítható, hogy véges lépésben minden egyezést kiküszöböl. Így legfeljebb $p$ tört összegére bontottuk az eredetit. Az egyezések keresése hatékonyan elvégezhető, ha a lista elemeit nagyság szerint rendezve tároljuk.

párosító(p,q):

    lista := [q, q,, q] (p darab)
    Ciklus amíg van két egyenlő nevező (értékük q)
        lista := lista – [q,q]
        Ha q páros
            akkor lista := lista + [q/2]
            különben lista := lista + [(q+1)/2, q(q+1)/2]
        Elágazás vége
    Ciklus vége
    A felbontás nevezői a lista elemei
    

3. Golomb algoritmusa

A 3. sorban meghatározott $s$ érték a $p’$ multiplikatív inverze (mod $q’$). Látható, hogy a legnagyobb előforduló nevező legfeljebb $q(q-1)$ lehet. $s$ képzési szabálya miatt $p’$ és $q’$ relatív prím marad.

golomb(p,q):

    p’ := p; q’ := q
    Ciklus amíg p’ > 1
        a következő tört: 1/(sq’), ahol p’s=q’r+1 (0<s<q’)
        q’ := s; p’ := r
    Ciklus vége
    az utolsó tört: p’/q’
    

Kódok

mb_egyiptom.c (Mészáros Balázs, C)
szp_egyiptom.c (Szendrei Péter, C)
mt_egyiptom.pas (Mezei Tamás, Delphi)
pt_egyiptom.pas (Peregi Tamás, Pascal)