[Algorytmy][PHP] Max elementy w zbiorze, minimalna roznica

Andriej91
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 13 sty 2012, o 19:01
Płeć: Mężczyzna
Lokalizacja: Katowice

[Algorytmy][PHP] Max elementy w zbiorze, minimalna roznica

Post autor: Andriej91 »

Witam, mam do utworzenia i analizy algorytm wyznaczenia liczby wystąpień maksymalnego elementu w tablicy oraz minimalnej odległości między elementami o maksymalnej wartości.

Algorytm już napisałem, schemat blokowy i instrukcje krok po kroku też. Problem został jedynie ze złożonością obliczeniową. Podam poniżej kod w PHP, prosiłbym o jakiekolwiek wskazówki.
Rozumiem, że złożoność w dużej mierze zależy od ilości danych. Załóżmy więc że liczb w tablicy jest 20. Dziękuje z góry za pomoc.

Co wiem:
W pierwszej pętli sprawdzam każdy element czyli tyle ile liczb tyle sprawdzeń. (złożoność liniowa?)
W drugiej pętli zaś sprawdzam każdy element który jest maximum (z pierwszej pętli) i tutaj mam ..? No właśnie co?..

Plus jak to zapisać (obliczenia) ?

Kod: Zaznacz cały

    <?php

    function znajdzLiczby($liczby) {
        $max = $liczby[0];
        $ml = 0;
        $ile = 0;

        foreach ($liczby as $k => $v) {
            if ($k != 0) {
                if ($v > $max) {
                    $max = $v;
                    unset($poz);
                    $poz[] = $k;
                    $ile = 1;
                } else if ($v == $max) {
                    $poz[] = $k;
                    $ile++;
                }
            }
        }

        if ($ile == 1) {
            $ml = 0;
        } else {
            for ($j = 0; $j <= $ile - 2; $j++) {

                if ($j == 0) {
                    $ml = $poz[$j + 1] - $poz[$j];
                } else
                if ($poz[$j + 1] - $poz[$j] < $ml) {
                    $ml = $poz[$j + 1] - $poz[$j];
                }
            }
        }

        $result['max'] = $max;
        $result['ile'] = $ile;
        $result['ml'] = $ml;

        return $result;
    }

    ?>
-- 13 sty 2012, o 23:07 --

Trochę moich wypocin... czy ktoś mógłby rzucić okiem?
wg.

Ale nie widzę nic z tego wzoru...

t1 - wczytywanie danych
t2 – przypisywanie wartości
t3a – sprawdzenie
t3b – skok
t4 – unset
t5 - wypisywanie

Złożoność czasowa optymistyczna

1*t1 + 5*t2 + (n+1)*t3a + 1*t3b + (n+1)*2*t3a + (n+1)*3*t2 + (n+1)*t4 + 1*t3a + 1*t2 + 3*t5 =
t1 + 9*(n+1)*t2 + (2n+5)*t3a + 1*t3b + (n+1)*t4 + 3*t5

ta = t3a + t3b
tb = t2 + t4
tc = t1 + t5

T(n) = ta*(2n+5)
T(n) = tb*(10n+10)
T(n) = tc*4

T(n) = ta*(2n+5) * tb*(10n+10) * tc*4

POMOCY:P
Ostatnio zmieniony 13 sty 2012, o 20:23 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
ODPOWIEDZ