eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Bisekcja...
Ilość wypowiedzi w tym wątku: 16

  • 1. Data: 2018-12-11 00:48:04
    Temat: Bisekcja...
    Od: DMR <m...@g...com>

    Mam w tablicy dane (kilkadziesiąt tysięcy elementów).
    Jako, że będę z nich gęsto wyszukiwał, to wykombinowałem sobie, że wczytam je teraz
    do drzewa (takiego quasi-drzewa, ze stablicowanymi węzłami, no i oczywiście same
    wskaźniki), w "bisekcyjny" sposób.
    Jeśli dane będą uporządkowane, to tym lepiej - drzewo wyjdzie idealnie wyważone.
    A jeśli nie będą, to... Nie wiem, co by się musiało stać, żeby drzewo się jakoś
    specjalnie zdegradowało. :-)
    Szybkie testy pokazały, że drzewo wczytane z losowo ułożonych danych wychodzi wyższe
    około ~2.5 raza od "logarytmicznego", więc wynalazki typu drzewa czerwono-czarne, czy
    AVL (na razie) sobie odpuściłem.

    Dumny ze swojego rozumu postanowiłem wprowadzić światłą ideę w czyn i... Zupa!
    Utknąłem.
    Jak "kulturalnie" wyznaczyć kolejność indeksów?
    Trochę nie bardzo widzi mi się puścić to w rekurencję...


  • 2. Data: 2018-12-11 09:51:13
    Temat: Re: Bisekcja...
    Od: Wojciech Muła <w...@g...com>

    On Tuesday, December 11, 2018 at 12:48:05 AM UTC+1, DMR wrote:
    > Mam w tablicy dane (kilkadziesiąt tysięcy elementów).
    > Jako, że będę z nich gęsto wyszukiwał, to wykombinowałem sobie, że wczytam je teraz
    do drzewa (takiego quasi-drzewa, ze stablicowanymi węzłami, no i oczywiście same
    wskaźniki), w "bisekcyjny" sposób.
    > Jeśli dane będą uporządkowane, to tym lepiej - drzewo wyjdzie idealnie wyważone.

    Dlaczego po prostu ich nie posortujesz? Przecież kilkadziesiąt tysięcy
    elementów to jest nic. I wtedy możesz użyć wyszukiwania binarnego na
    zwykłej tablicy.

    w.


  • 3. Data: 2018-12-11 12:20:24
    Temat: Re: Bisekcja...
    Od: DMR <m...@g...com>

    > Dlaczego po prostu ich nie posortujesz?


    Bo ja starej daty jestem... :-)
    Kilkadziesiąt tysięcy elementów, to jest... Ho, ho! ;-)

    A poza tym, to tak na chłopski rozum, można posortować dane w czasie "kwadratowym" -
    ale wtedy nie odbiega to zbytnio od idei wyszukiwania liniowego, więc w ogóle nie ma
    sensu, albo w czasie "logarytmicznym" - ale wtedy trzeba kombinować z kopcami, albo
    rekurencją, więc też nie ma to żadnego sensu, bo zasadniczym celem nie jest
    posortowanie zbioru danych, tylko szybkie w nim wyszukiwanie, a wtedy lepiej
    poświęcić ten sam koszt na zbudowanie struktury do tego specjalizowanej.

    Wydaje mi się, że mój problem polega na próbie zlekceważenia twórców wspomnianych
    algorytmów - nie bez powodów są one takie jakie są, a coś, co daje z pozoru
    porównywalne rezultaty, a na pierwszy rzut oka wydaje się o wiele prostsze, finalnie
    wcale nie musi takie być.



    Pzdr.


  • 4. Data: 2018-12-11 13:40:12
    Temat: Re: Bisekcja...
    Od: Borneq <b...@a...hidden.pl>

    W dniu 11.12.2018 o 12:20, DMR pisze:
    > A poza tym, to tak na chłopski rozum, można posortować dane w czasie "kwadratowym"
    - ale wtedy nie odbiega to zbytnio od idei wyszukiwania liniowego, więc w ogóle nie
    ma sensu, albo w czasie "logarytmicznym" - ale

    Co łatwiejsze: użyć QSort wbudowaną procedurą czy używać specjalnie
    drzew czerowno-czarnych czy AVL?


  • 5. Data: 2018-12-11 14:33:23
    Temat: Re: Bisekcja...
    Od: DMR <m...@g...com>

    Życie, to w ogóle nie jest łatwe. Trudne jest. :-)

    Jeszcze łatwiejsze może być zassanie danych do Excela i przemielenie, ale trudniejsze
    może być potem zasypianie z wątpliwościami, czy rozwiązanie problemu zepchnąłeś na i7
    z odpowiednio pojemnym "kejszem", czy też wziąłeś temat na klatę, nabywając przy
    okazji fajowego skilla (bo niby - czemu nie?)


  • 6. Data: 2018-12-11 14:48:51
    Temat: Re: Bisekcja...
    Od: AK <n...@n...net>

    On 2018-12-11 12:20, DMR wrote:
    >> Dlaczego po prostu ich nie posortujesz?
    >
    >
    > Bo ja starej daty jestem... :-)
    > Kilkadziesiąt tysięcy elementów, to jest... Ho, ho! ;-)

    ...a po co od razu drzewa? Dlaczego nie jakies hashowanie ?
    Liniowe toto i w przypadku gdy elementy rzadko sie powtarzaja
    moze byc wcale szybkie/wydajne?

    AK


  • 7. Data: 2018-12-11 19:35:05
    Temat: Re: Bisekcja...
    Od: DMR <m...@g...com>

    > Dlaczego nie jakies hashowanie ?


    Wykombinowanie dobrej funkcji, kolizje, kupa danych... Nie wiem, czy to ogarnę.
    Ale zgłębiam temat. Bo niby - czemu nie? ;-)


  • 8. Data: 2018-12-11 19:35:26
    Temat: Re: Bisekcja...
    Od: AK <n...@n...net>

    On 2018-12-11 14:48, AK wrote:
    > Liniowe toto
    Poprawka: Oczywiscie przy tworzeniu hashy.
    Przy szukaniu to liniowe w skrajnym przypadku,
    lub nawet bezposrednie - w drugim skrajnym (perfect hash).

    AK


  • 9. Data: 2018-12-11 20:25:35
    Temat: Re: Bisekcja...
    Od: AK <n...@n...net>

    On 2018-12-11 19:35, DMR wrote:
    >> Dlaczego nie jakies hashowanie ?
    >
    >
    > Wykombinowanie dobrej funkcji, kolizje, kupa danych... Nie wiem, czy to ogarnę.
    > Ale zgłębiam temat. Bo niby - czemu nie? ;-)
    >

    ...a nie lepiej uzyc cus gotowego/sprawdzonego ?
    Np takie cos w Pythonie (na dosc slabym kompie-szefc bez butow chodzi:)
    dla 10 000 000 'rekordow':

    import timeit

    dictionary = { key: str(key).zfill(6) for key in range(10000000) }
    print(timeit.timeit('temp = { key: str(key).zfill(6) for key in
    range(10000000) }', number=1))

    print(dictionary[9999999], timeit.timeit('dictionary[9999999]',
    number=10000, globals=globals()) / 10000)
    print(dictionary[1], timeit.timeit('dictionary[1]',
    number=10000, globals=globals()) / 10000)
    print(dictionary[5000009], timeit.timeit('dictionary[5000009]',
    number=10000, globals=globals()) / 10000)
    print(dictionary[100000], timeit.timeit('dictionary[100000]',
    number=10000, globals=globals()) / 10000)

    daje takie czasy:
    D:\>py zzz.py
    5.356959160756147
    9999999 7.252555713392894e-08
    000001 5.5035608509168556e-08
    5000009 7.855509932497284e-08
    100000 8.065047214307341e-08

    i to dla teoretycznie dosc slabych hashy, bo dla liczb naturalnych.
    Oczywiscie szybkosc hashowania liniowa wzgledem rozmiaru,
    a szybkosc szukania praktycznie niezalezna od rozmiaru.

    PS: Oczywiscie to klasyczny dict/set (czyli klucz jest unikalny)
    Istnieja oczywiscie: multidict i multiset, choc w Py niestandardowo.
    W/w ma glownie obrazowac ze kilkadziesiat tysiecy to dzis raczej
    "pryszcz" dla klasycznych/gotowych rzeczy.

    AK


  • 10. Data: 2018-12-11 20:35:09
    Temat: Re: Bisekcja...
    Od: AK <n...@n...net>

    On 2018-12-11 20:25, AK wrote:
    > (na dosc slabym kompie-szefc bez butow chodzi:)

    Ale byyyyk :(. Przepraszam bardzo. szewc

strony : [ 1 ] . 2


Szukaj w grupach

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: