eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › sortowanie
Ilość wypowiedzi w tym wątku: 567

  • 71. Data: 2012-10-14 00:51:24
    Temat: Re: sortowanie
    Od: PK <P...@n...pl>

    On 2012-10-13, M.M. <m...@g...com> wrote:
    > Moim zdaniem cos w okolicach insertion/selection bedzie wlasnie
    > optymalnym algorytmem.

    Not even close :).

    Insertion/selection sort w pesymistycznym wariancie wykonuje N*(N-1)/2
    porównań. Czyli w tym wypadku wychodzi 190. Do tego dochodzi konieczność
    zapisywania, ewentualnego przesuwania tablic itp itd.

    Sortowanie optymalne: max 62 porównania.

    pozdrawiam,
    PK


  • 72. Data: 2012-10-14 00:54:27
    Temat: Re: sortowanie
    Od: bartekltg <b...@g...com>

    W dniu 2012-10-13 23:56, PK pisze:
    > On 2012-10-13, M.M. <m...@g...com> wrote:
    >> Algorytmy sortowania o asymptotycznej zlozonosci n^2 moga byc szybsze
    >> od n*log(n) dla malych n, a to z powodu stalego narzutu. Jesli w petelce
    >> trzeba posortowac np. miliard razy po 20 liczb, to warto sprawdzic czy
    >> algorytm kwadratowy nie wypadnie lepiej.
    >
    > Jeśli trzeba posortować miliard razy 20 liczb, to lepiej napisać
    > optymalny sort dla 20 liczb.

    Na pewno stosuje się (albo teoretykom wydaje się, że
    się stosuje, tzw matematyka stosowana) taki spacjalizowany
    algorytm dla 5. Dużo ifów:)
    Dlaczego dla 5? Bo w mamy algorytm magicznych piątek;)

    Dla 20 byłby już zbyt skomplikowany. Za duży.

    No, chyba, że miałeś na myśli coś typu insertionsort
    skompilowany na stale na 30, czy 5 razy posoruj
    piątki i 3 razy 'merge'.

    pzdr
    bartekltg







  • 73. Data: 2012-10-14 00:58:22
    Temat: Re: sortowanie
    Od: bartekltg <b...@g...com>

    W dniu 2012-10-14 00:35, PK pisze:
    > On 2012-10-13, kenobi <p...@g...com> wrote:
    >> a jaki to jest ? ;-)
    >
    > Nie chodziło się na żaden wstęp do programowania ani nie czytało Knutha,
    > co?
    >
    > Optymalny sort dla wektora liczb o znanej długości, to po prostu drzewo
    > decyzyjne (binarne) z porównaniami elementów. Jeśli wykonujesz tylko
    > konieczne porównania, to takie drzewo wyznacza Ci dolne ograniczenie dla
    > pesymistycznych wariantów (czyli ile porównań zawsze wystarcza do
    > posortowania n liczb).
    >
    > Okazuje się, że do posortowania 20 liczb wystarczają 62 porównania.

    Co daje 2^62 możliwych wyników - gałęzi algorytmu.

    Jeśli zamieniasz elementy miejscami by zmniejszyć tą
    ilość, już wykonujesz niepotrzebne operacje.

    Dla 20 można taki algorytm napisać, ale jest on chyba
    dość teoretycznym tworem.
    Dla 4 i 5 to się takie rzeczy pisało, ale dla 20...

    pzdr
    bartekltg



  • 74. Data: 2012-10-14 00:59:40
    Temat: Re: sortowanie
    Od: PK <P...@n...pl>

    On 2012-10-13, bartekltg <b...@g...com> wrote:
    > Na pewno stosuje się (albo teoretykom wydaje się, że
    > się stosuje, tzw matematyka stosowana) taki spacjalizowany

    Stosuje się w praktyce - zapewniam :).

    > algorytm dla 5. Dużo ifów:)
    > Dlaczego dla 5? Bo w mamy algorytm magicznych piątek;)
    >
    > Dla 20 byłby już zbyt skomplikowany. Za duży.

    Duży to kwestia względna. Napisanie (wygenerowanie) nie kosztuje
    zupełnie nic. Pozostaje kwestia rozmiaru programu, ale to nie
    zawsze jest problem.

    pozdrawiam,
    PK


  • 75. Data: 2012-10-14 01:03:00
    Temat: Re: sortowanie
    Od: bartekltg <b...@g...com>

    W dniu 2012-10-14 00:59, PK pisze:
    > On 2012-10-13, bartekltg <b...@g...com> wrote:
    >> Na pewno stosuje się (albo teoretykom wydaje się, że
    >> się stosuje, tzw matematyka stosowana) taki spacjalizowany
    >
    > Stosuje się w praktyce - zapewniam :).
    >
    >> algorytm dla 5. Dużo ifów:)
    >> Dlaczego dla 5? Bo w mamy algorytm magicznych piątek;)
    >>
    >> Dla 20 byłby już zbyt skomplikowany. Za duży.
    >
    > Duży to kwestia względna. Napisanie (wygenerowanie) nie kosztuje
    > zupełnie nic. Pozostaje kwestia rozmiaru programu, ale to nie
    > zawsze jest problem.

    Ale dla 20? Bez sztuczek to nam się nie tylko w cache,
    ale i w RAMie nie zmieści.

    Możesz powiedzieć coś więcej o tych praktycznych zastosowaniach,
    jak wygląda implementacji i do jakich liczb to się stosuje?

    pzdr
    bartekltg



  • 76. Data: 2012-10-14 01:08:06
    Temat: Re: sortowanie
    Od: bartekltg <b...@g...com>

    W dniu 2012-10-13 20:58, kenobi pisze:

    >
    > za jakis czas sobie klepne pewnie to
    > uogolnienie, np dla 32 bit mozna pewnie
    > w jednym przebiegu zrobic histogram na
    > gornych bitach wygenerowac czesciowo
    > uporzadkowany wynik i w kolejnym posortowac
    > kawalki, albo tez i inaczej ladnie
    > dobierajac po efektywnosci - w kazdym
    > razie raczej da sie to uogolnic :U

    Wymyśliłeś sortowanie pozycyjne.

    Pamiętaj, że aby zadziałało należy
    zadbać, aby nasza podprocedura robiąca
    sortowanie przez zliczanie na wybranych bitach
    sortowaniem stabilnym. A zaczynać od najmniej
    znaczących bitów.

    pzdr
    bartekltg


  • 77. Data: 2012-10-14 01:16:51
    Temat: Re: sortowanie
    Od: PK <P...@n...pl>

    On 2012-10-13, bartekltg <b...@g...com> wrote:
    > Co daje 2^62 możliwych wyników - gałęzi algorytmu.

    Niestety nie wiem co nazywasz "gałęzią algorytmu".
    Drzewo decyzyjne ma unikatowe liście, czyli jest ich 20!.

    > Jeśli zamieniasz elementy miejscami by zmniejszyć tą
    > ilość, już wykonujesz niepotrzebne operacje.

    W drzewku decyzyjnym nie ma niepotrzebnych operacji. Na tym polega
    ta idea. Chyba nie łapiesz o czym piszę :).

    > Dla 20 można taki algorytm napisać, ale jest on chyba
    > dość teoretycznym tworem.
    > Dla 4 i 5 to się takie rzeczy pisało, ale dla 20...

    Teretycznym nie, bo ktoś to już napisał (istnieją wyniki).
    Nie mniej w tym algorytmie nie chodzi o optymalizację, tylko
    o wyznaczenie dolnego ograniczenia. Poza tym o tę głównie o tę
    ideę są oparte sorty sprzętowe (dla tych, którzy nie chcą tracić
    czasu na niepotrzebne operacje komputerów :)).

    Zresztą istnieje algorytm (Ford & Johnson Merge-Insertion Sort),
    który dla małych n jest bliski optymalnemu (i tym samym jest
    zapewne najlepszym algorytmem dla krótkich ciągów). Dla n=20
    akurat jest optymalny. Polecam poszukać, bo to naprawdę nieźle
    wyrzeźbiona rzecz :).

    pozdrawiam,
    PK


  • 78. Data: 2012-10-14 01:19:06
    Temat: Re: sortowanie
    Od: Edek Pienkowski <e...@g...com>

    Dnia Sat, 13 Oct 2012 21:25:41 +0200, Michoo napisal:

    > On 13.10.2012 14:46, Edek Pienkowski wrote:
    >> Dnia Sat, 13 Oct 2012 13:52:31 +0200, Michoo napisal:
    >>
    >>> Co Ty byś proponował do nauki algorytmów?
    >>
    >> Coś co ma "contraints" do spełnienia [1], najlepiej nietrywialne [2]; może
    >> być wykres Gannta z zadań, ale niektóre uczelnie preferują np. peephole.
    > Na _początek_? Może wybiję cię ze złudzeń, które też miałem idąc na
    > studia - na informatykę nie idzie banda geeków i nerdów, którzy
    > hackowali amigi, atmegi, czy inne zabawki. Większość ludzi swój pierwszy
    > program napisze na zajęciach. Ich trzeba nauczyć "co to jest algorytm".

    Heh, pewnym podejściem selekcji studentów pomimo akceptowania matury
    byłyby na wstępie ćwiczenia "napisz peephole, mając struktury danych,
    język funkcyjny, który przez ostani tydzień wyłożyliśmy i parę przykładów.
    Najlpiej, jakby działał w ogólnym przypadku, ocena 5 tego wymaga". Ale
    wtedy skończyłoby się narzekanie na poziom studentów, a na coś trzeba
    zwalić. <niepolityczne uwagi over/>

    Wbrew pozorom, niektórzy uczyli powyższego jakieś lata temu, z tym
    że bandy ludzi, którzy sobie postawili znak przy przejściu dla pieszych
    o nazwie "Nerd X-ing". Użyj googla, fajny znak, mieli zacięcie do detali.
    Przedmiot był jak najbardziej wstępny i nie wymagał niczego poza "general
    aptitude and pre-calculus high school maths" [1]. Jak widać albo rybki
    albo akwarium, albo się zakłada częściowe znerdzenie (pol: kujonizm)
    albo się nie robi nawet oprogramowania do pralek nie mówiąc o kalkulatorach
    (smartfony pominę). <ok, niepolityczne uwagi naprawdę over/>

    Inaczej mówiąc, uważam pisanie optymalizacji używając modelu
    sekwencyjnego procesora w języku funkcyjnym za coś, co można robić
    _przed_ algorytmiką, żeby wszyscy wiedzieli, co to jest procesor i umieli
    napisać, zrozumieć i poprawić kilka prostych struktur danych. No i
    cudów nie ma, nie wszystkim to się uda - z tym że na części uczelni
    na świecie nie ma polityki "mamy straszny poziom i robimi 10
    egzaminów poprawkowych", tylko "ok, w miarę ci poszło", bo nikt
    cudów nie oczekuje. Ważna jest idea, którą jednak warto załapać,
    jeżeli chce się specjalizować w tym akurat kierunku. Przypuszczam,
    że rozwija myślenie w innym kierunku niż przysłowiowe całki.

    >> Nie zaczynałbym edukacji od "zobacz, na ile możliwości można zrobić coś
    >> tak banalnego jak sortowanie, jakie piękne metody".
    >>
    > Raczej - coś tak banalnego jak sortowanie można zrobić tak, tak i tak.
    > Naucz się pokazywać różnice między tymi podejściami zanim przejdziemy dalej.

    No i robi się i tak i tak. Różnica pomiędzy podejściami polega na tym,
    że u studentów przede wszystkim należy rozwinąć myślenie. Nie polega to na
    wpychaniu wiedzy, bo wiedzę (pamięć faktualną) kążdy ma jaką ma,
    pamięta z czym się zetknął (czytając, słuchając robiąc). Pamięć
    proceduralną rozwija się inaczej (to ta pamięć odpowiedzialna za między
    innymi jazdę na rowerze, z dodatkiem ruchowej - sam wiedza jak się to robi
    to za mało), rozwija się ją zderzając z problemami. Trzeba je rozwiązać,
    albo polec próbując, bo inaczej nie da się nauczyć "jazdy na rowerze" i
    nie da się nauczyć programowania bez rozwalania samemu prostych w sumie
    problemów od samego początku.

    Biorąc pod uwagę powyższe, implementowanie peephole samemu bez
    wystarczających instrukcji danych zanim ktoś zrozumie w ogóle problem
    rozwija lepiej niż wykłady,
    na których wymienia się sorty i obwieszcza, co to jest złożoność.
    Oczywiście, można to samo zrobić z sortem: masz tu tablicę intów (właśnie
    ci powiedzieliśmy, co to jest tablica, prawda?) i je posortuj,
    czyli ułóż od najmniejszych do największych. I tylko pomagać, jak się ktoś
    spyta. Ktoś tak robi? Dawno nie byłem na uczelni.

    Potem można wyłoązyć teorię dopiero, bo jak ktoś faktcznie tak jak mówisz
    nie wie co to RAM a co to procesor, nie sądzę, żeby w ogóle był w stanie
    zrozumieć coś tak prostego jak problemy z sortowaniem. My mamy to już
    dawno za sobą, ale ja też kiedyś nie wiedziałem, co to jest program
    komputerowy. Z mojego doświadczenia lepiej się przyswaja wiedzę, gdy ma
    się za sobą trochę prób, nawet skończonych niepowodzeniem,
    bo wtedy się lepiej rozumie temat. Ba, nawet lepiej próbować rzeczy dużo
    za trudnych dużo za wcześnie, bo potem wszystko jest prostsze,
    fragmenty prawie wpadają w miejsca na brakujące elementy układanki.
    Jedynie trzeba zmienić właśnie podejście, zaakceptować niepowodzenia,
    przestać udawać że ktoś kto nie wie co to jest program zrozumie
    quick-sorta (poza odnotowaniem, że chyba się wie jak to działa)
    i ze to jest uczenie algorytmiki.

    Z tymi constraints to jest tak, że to tylko pewna struktura poznawcza,
    każdy programista ją ma ("jeżeli w kodzie obok a to zawsze b plus
    dodatnie x, to y/(a-b) nie będzie dzieleniem przez zero"), ale trzeba ją
    wykształcić. Dodatkowo, pomaga pewien wgląd w proces. Dlatego istnieją
    takie przedmioty na niektórych uczelniach jak "Jak się uczyć?" czy
    bardziej wyspecjalizowane "Street Fighting Maths" (uczy szybkiego
    szacowania i paru innych). Ludzie mogą z nich polewać, ale te przedmioty
    mają swoje skutki i przyczyny. Tak samo programy uczelni nie powinny uczyć
    tylko tego, co się przyda, ale też wykształcić odpowiednio właśnie taką
    pamięć w naszych durnych mózgach jak pamięć proceduralna.
    Nie mówiąc już o budowaniu abstrakcji, bo ludzki mózg na raz jest w stanie
    trzymać w ręku około 5-8 pojęć, choć da się rozwinąć pojemność o kilka
    ćwiczeniami na jakiś czas przynajmniej. Ale nie 10 tys. linii kodu na
    raz.
    Tych właściwości "hardware" nikt nie przeskoczy, trzeba mieć do tego
    narzędzia, część narzędzi to nie jest wiedza to umiejętność posługiwania
    się niektórymi pojęciami, którą da się nauczyć tylko robiąc - stąd takie
    pojęcie, praktykowane, jak "Learning by doing", w dowolnej postaci, może
    być lab, mogą być staże.

    Powyższe to w zasadzie tło. Ja po prostu nie widzę większego sensu w
    zaczynaniu od algorytmów typu sortowanie, jeżeli ktoś praktycznie nie
    próbował poradzić sobie ze strukturami danych,
    nie rozumie ani reguł ani ograniczeń ani nie posiada odpowiednich
    struktur, które mają naturę qualia [3]. To, czy samą algorytmikę zacznie
    się od sorta czy od analizy polegającej na wyłożeniu co to jest złożoność
    (to drugie przeczy naturalnym własnościom mózgu niestety), najpierw trzeba
    mieć inne narzędzia, i w tym procesie nie ma znaczenia, w ramach jakiego
    przedmiotu te umiejętności się dostarczy - ok, nie musi to być w
    przedmiocie o nazwie algorytmika, ale musi być w wymaganych przed. A
    jeżeli sort ma być wykładany jako coś, co ludzie później uzupełnią wiedzą
    praktyczną, to sorka,
    ale to się nadaje do programowania pralek (dokładnie tak jak w tym
    dowcipie o programistkach, zaprogramuj sobie pralkę [2]).

    [1] Można znaleźć wszystko używając wyszukiwarki, ze zwróceniem
    uwagi na lata wykładanego przedmiotu. Aktualny program jest na Mitx,
    zdaje się "wstęp do programowania" lub jakoś podobnie.

    [2] Też może być fajne. Gość w ramach demo wyjął kawałek pralki,
    dodał trochę prostej elektroniki i to generowało obrazki i dźwięk.
    Co kto lubi, ale nie robił tego w ramach profesji. Nerd p..y ;)

    [3] Zdaje się są inne dla każdego człowieka, nie da się o nich
    tak wprost rozmawiać. Chyba że mi walniesz strumień świadomości
    czegoś prostego, jak myślisz o jakimś prostym problemie,
    zczynając od "na co po kolei na ekranie nastawiasz gałkę oczną".

    PS. Chyba żem się rozpisał...


    --
    Edek


  • 79. Data: 2012-10-14 01:21:39
    Temat: Re: sortowanie
    Od: bartekltg <b...@g...com>

    W dniu 2012-10-13 21:33, kenobi pisze:

    > I discovered this algorithm time when I was participated in

    "Rediscovered", jeśli już. Algorytm jest znany od lat 50;)

    > a computer-science contest. One of the problems required
    > the participants to sort seven numbers using no more than three
    > comparison operations.

    Czyli M.M. miał rację, kazali użyć porównań.
    Mamy obiekty i możemy je porównywać. Nic o zakresie.

    BTW, Coś tu jest pomieszane. trzema porównaniami
    można posortować 3 liczby.
    Może to było tradycyjne 5 liczb w 7 porównań?

    > Seeing this problem as a perfect
    > opportunity for showing off,

    Pokazać algorytm znany kilkadziesiąt lat i udowadniając
    niezrozumienie treści zadania. Ot, takich chlopków
    roztropków mamy w necie pełno;)

    > I wrote a small program that sorted the
    > numbers without using any comparison operations.

    Za to tablica h miała 2^32 bajtów długości,
    bo sortowali longi. Heh, kto się na to łapie.

    > Unfortunately, my solution was not considered superior. Only after a
    > couple of years of carefully exploring the existing
    > sorting algorithms could I evaluate the importance of the result.

    Aż w końcu znalazł ten, skądinąd ważny algorytm, na wikipedii;)

    BTW, daj w końcu jego nazwisko w takiej postaci, abym
    mógł go wyszukać w goooglach.

    pzdr
    bartekltg


  • 80. Data: 2012-10-14 01:22:47
    Temat: Re: sortowanie
    Od: PK <P...@n...pl>

    On 2012-10-13, bartekltg <b...@g...com> wrote:
    > Ale dla 20? Bez sztuczek to nam się nie tylko w cache,
    > ale i w RAMie nie zmieści.

    Bez sztuczek nie, ale można to podzielić. Nie mniej wtedy oczywiście
    są jakieś straty na dodatkowe kombinowanie, więc może się przestać
    opłacać.

    >
    > Możesz powiedzieć coś więcej o tych praktycznych zastosowaniach,
    > jak wygląda implementacji i do jakich liczb to się stosuje?

    Widziałem zastosowania dla n=8 (zarówno soft- jak i hardware). Akurat
    było to zastosowanie w fizyce (tam się trochę spieszą). Nie wiem czy
    istnieje jakiekolwiek inne zastosowanie, gdzie ludzie tak walczą
    o nanosekundy - może w jakimś GPS czy innych militariach?

    pozdrawiam,
    PK

strony : 1 ... 7 . [ 8 ] . 9 ... 20 ... 57


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: