eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingjak posortować czynniki › Re: jak posortować czynniki
  • X-Received: by 10.157.63.185 with SMTP id r54mr1577225otc.14.1476461407210; Fri, 14
    Oct 2016 09:10:07 -0700 (PDT)
    X-Received: by 10.157.63.185 with SMTP id r54mr1577225otc.14.1476461407210; Fri, 14
    Oct 2016 09:10:07 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!ne
    ws.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!l13no1556549itl.0!new
    s-out.google.com!203ni465itk.0!nntp.google.com!l13no1556538itl.0!postnews.googl
    e.com!glegroupsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Fri, 14 Oct 2016 09:10:06 -0700 (PDT)
    In-Reply-To: <d...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=212.87.7.105;
    posting-account=CvUQzQoAAABvVQmR58QmR6N4Cev1qhAS
    NNTP-Posting-Host: 212.87.7.105
    References: <1...@g...com>
    <ntlp6e$2bl$1@node2.news.atman.pl>
    <a...@g...com>
    <ntlujd$7ku$1@node2.news.atman.pl>
    <3...@g...com>
    <ntm5rn$3p5$1@node1.news.atman.pl>
    <d...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <b...@g...com>
    Subject: Re: jak posortować czynniki
    From: bartekltg <b...@g...com>
    Injection-Date: Fri, 14 Oct 2016 16:10:07 +0000
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:209945
    [ ukryj nagłówki ]

    On Thursday, October 13, 2016 at 3:41:25 PM UTC+2, M.M. wrote:

    >
    > Dzięki za odpowiedź, najbardziej przyda się pomysł
    > który mi podsunąłeś, żeby wyciągać eksponenty :)
    > Resztę w miarę ogarniam.



    > Mam takie liczby do wymnożenia, że przy 80 losowo wybranych
    > często pada. Liczby, choć nie służą do wyliczenia dwumianiu
    > newtona, to powstają z dużych dodatnich i ujemnych potęg, więc
    > mogą po wymnożeniu nawet dać coś w okolicach jedynki. Napisałem
    > najpierw podobnie do sortowania. Czynniki mam w kilku wektorach,
    > jeśli w jednym mam czynniki duże, to w drugim mam małe, albo
    > na odwrót. S skrócie: próbuję wymnożyć przez jedną, potem przez
    > drugą i wybieram tę, która daje wynik bliższy jedynce. Po tym
    > zabiegu mogę wymnożyć nawet 400 liczb bez problemów z zakresem, a
    > nie muszę sortować. Jednak pomysł z przeniesieniem wykładników
    > do osobnej zmiennej zapewne będzie najlepszy i szybki.

    Zrobiłem mały test
    http://pastebin.com/3mWyh93z

    Mnożenie bezpośrednie (najczęśceij daje 0 lub inf ;-))
    Dodanie logartrymów - po to, aby sprawdzić wynik. Niestabilne!
    Ale daje wynik i wiadomo, że sie nie pomyliśmy.

    Prawdziwe algorytmy:

    Jeden to modyfikacja sortowania. Nie potrzeba nam przecież
    sortować, wystarczy zrobić podział na > 1 i < 1.
    Potem mnożymy, jeśli tymczasowy wynik jest >1, korzystamy
    ze zbioru liczb mniejszych, jeśli mniejszy, z większych.
    Potem trzeba domnożyć ogon.

    Rozwinięciem tego jest zrobienie partition i mnożenia na raz.
    Mam dwa iteratory, jeden omija wszystkie <1, drugi omija
    wszystko co jest >1.
    Dalej tak samo, używam tego z przecinwej strony niz wynik.

    Różnica jest minimalna.
    frexp jest ponad 2 razy szybszy!

    W sumie mogliśmy się tego spodziewać. W obu wersjach 'sortujących'
    mamy dwa przebiegi po tablicy, dla frexp tylko jeden,
    a to dostęp do pamięci, a nie operacje będą wąskim gardłem.

    Chyba, że masz tylko tyle liczb, ile się mieści w cache.
    Wtedy... kto wie, trzeba by mój test nieco przerobić.


    pzdr
    bartekltg






Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

  • 25.09.17 14:24 apl

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: