eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingodchylenie standardowe online › Re: odchylenie standardowe online
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!newsfeed2
    .atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
    From: bartekltg <b...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: odchylenie standardowe online
    Date: Mon, 30 Jan 2012 03:35:00 +0100
    Organization: ATMAN - ATM S.A.
    Lines: 60
    Message-ID: <jg4vkl$vii$1@node2.news.atman.pl>
    References: <jg4sr8$lv$1@inews.gazeta.pl>
    NNTP-Posting-Host: 144-mi3-6.acn.waw.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node2.news.atman.pl 1327890901 32338 85.222.69.144 (30 Jan 2012 02:35:01
    GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Mon, 30 Jan 2012 02:35:01 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0) Gecko/20111222
    Thunderbird/9.0.1
    In-Reply-To: <jg4sr8$lv$1@inews.gazeta.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:194920
    [ ukryj nagłówki ]

    W dniu 2012-01-30 02:47, M.M. pisze:
    > Czesc
    >
    > Jest liniowa tablica malych liczb staloprzecinkowych
    > int tablica[1..N];
    > N jest dosc duze, rzedu 100tys do 10mln.
    >
    > Jest tablica indeksow
    > int index[1..M]
    >
    > Kazdy index[i] dzieli tablice na pare tablic:
    > tablica_a[1..index[i]]
    > tablice_b[index[i]+1..N]
    >
    > Czyli tablica_a ma index[i] pierwszych elementow z tablicy
    > a tablica_b ma elementy pozostale.
    >
    > Zadanie jest takie, aby szybko oszacowac odchylenie standardowe dla kazdej
    > pary tablic ( dla kazdej tablicy w kazdej parze, razem 2*M odchylen ).
    > M niestety moze przyjmowac duze wartosci, a wiec par moze byc duzo,
    > np. M ~= N / log(N).
    >
    > Mozna to policzyc jakims algorytmem online, albo np. algorytmem ktory
    > przebiega cala tablice nie wiecej niz 10 razy?


    http://www.youtube.com/watch?v=gENVB6tjq_M



    Odchylenie standardowe to pierwiastek wariancji.

    Var(X) = E[ (X-E(X))^2 ] =...= E(X^2) - E(X)^2

    Korzystamy z drugiej wersji.

    Pisząc po ludzku sum_{i=1}^k (x_i^2/k)/k - ( sum_{i=1}^k x_i )^2/k


    Ponieważ masz inty, nie musisz sie przejmować stratą dokładności
    (np licząc odchylenie z dużęj próbki X ~ N(1,10^-12) lepiej użyć
    pierwszego wzoru;) uważaj jedynie na zakres, bo prawie na pewno
    przekroczysz int32, a dla odpowiednich danych i int64)

    Liczysz więc na bieżąco sumę i sumę kwadratów, zapisujesz
    je dla każdego k z tablicy index.
    Potem za ich pomocą (oraz sumy i sumy kwadratów wszystkich)
    obliczasz odchylenie w odpowiednich podtablicach.

    Podsumowując masz jeden przejazd po 'tablica' z zapisywaniem
    do tablic długości M (suma i suma kwadratów) a następnie
    przelecenie tych tablic i wpisanie wyników (uważaj na związek
    indeksu i długości przedziału==liczności próbki i pamiętaj
    o pierwiastku:) IMHO najpierw odejmowanie, potem zrzut
    na double i dzielenie.


    pzdr
    bartekltg

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: