Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Książka do Algorytmiki
sztosz
post
Post #1





Grupa: Zarejestrowani
Postów: 866
Pomógł: 32
Dołączył: 2.06.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Kuleje jeśli chodzi o kwestie wynajdywania odpowiednich algorytmów żeby rozwiązać dany problem, czasem czytam o jakimś algorytm w necie i nie mam pojęcia jak go ugryźć.

Stąd moje pytanie: Czy jest jakaś książka z której dowiem się sprawnie tworzyć algorytmy, na czym to dokładnie polega? Ale tak od podstaw? W ogóle nie wiem czy w dobrym kierunku szukam, ale trochę błądzę po omacku. Nigdy nie kończyłem studiów informatycznych, ani matematycznych, więc mam w głowie tylko strzępki informacji na ten temat z liceum (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Zrównolegnianie to proces przekształcania kodu z sekwencyjnego na wieloprocesorowy. Jest to raczej mało używane określenie i mocno nieformalne, bo też czy ktokolwiek interesuje się tym poza bardzo ścisłym gronem znających się na tym? Ciekawe czy masz na to inną nazwę. Ja się nie spotkałem z innym określeniem technicznym, więc używam tego, jakie było powszechne u mnie na studiach wśród prowadzących (miałem jako przedmiot przetwarzanie współbieżne i równolegle ). Jak by to brzmiało po angielsku? Sequence to multiple processor recoding (code coversion?)? (IMG:style_emoticons/default/winksmiley.jpg)
To, że kod wookiego jest mniej optymalny od L0ud'a wynika z narzutu czasowego związanego z reindeksowaniem tablicy i czasem dostępu do zmiennych. Gdyby było to pomijalne to algorytm wookiego jest lepszy z prostej przyczyny - nie kasuje już nie istniejących indeksów. W przypadku C++ nie mógłbym sobie pozwolić na kasowanie tylko musiałbym nadpisywać wartości neutralnym elementem bo kasowanie szybko skończyło by się błędami ochrony pamięci. To, który z nich jest bardziej optymalny jest więc tak naprawdę zależne od implementacji pewnych rozwiązań w danym języku programowania. Gdyby reindeksacja była szybsza to możliwe, że oba byłyby porownywalne. Tablica wookiego za kazdym przejściem pętli jest bowiem "naprawiana" i nigdy w niej nie następuje działanie na nie istniejących indeksach. Tablica u L0uda, gdybyś sprawdzał zwroty funkcji unset co chwilę próbuje usuwać nie istniejące elementy, przez co robi wiele pustych przebiegów. Widać to choćby dla liczby 5, która co 2 cykl próbuje usunąć 10, 20, 30, a te już zostały przecież przez 2 w co 5 kroku usunięte (IMG:style_emoticons/default/winksmiley.jpg) Całościowo jednak algorytm jest szybszy, ponieważ mimo większej liczby operacji odwołanie się bezpośrednio do konkretnego indeksu tablicy jest szybsze niż sprawdzenie modulo określonego indeksu już na poziomie cykli procesora. Kto przerabiał architekturę komputerów ten wie o czym mówię. Algorytm pierwszy jest bardziej optymalny i logiczniejszy pod kątem algorytmicznym, ale drugi ma lepszą implementację w php. To jest jedyna różnica między nimi (IMG:style_emoticons/default/smile.gif) Oba są równie dobre. A jaki wpływ ma implementacja na szybkość? Wczoraj z wookiemb kodwookiego przerobiony został tak, by używał ArrayIterator i tym samym nie przejmował reindeksowaniem tablicy tylko używal next(). Wykonano 1000 razy szukanie dla liczb od 2 do 1000, przy czym algorytm L0ud'a by nieco inny, według mojej koncepcji (czyli sprawdzanie wartości elementu przy każdej iteracji FOR i skoki o wartość pola pod danym indeksem), by mógł startować od 2 a nie od 0.
Algorytm woobieb: 13 sekund
Algorytm wookieb z sqrt: 8 sekund
Algorytm L0ud'a: 1s z hakiem
Algorytm na ArrayIterator: ponad 4 minuty(!)
Jak widzicie implementacja gra rolę poważną. ArrayIterator ma poważne problemy gdy ostro kasujemy tablice do jakiej jest przypisany. Wersja z sqrt jest prawidłowa, ponieważ od elementu sqrt(długość_tablicy) pętla robi puste przebiegi, gdyż nie ma prawa już znaleźć swoich wielokrotności.
Mogę więc zaprezentować prosto różnice pomiędzy obydwoma:
Wookieb: tablica zawsze działa tylko na elementach jeszcze nie sprawdzonych,
L0ud: tablica jest skuteczna, gdyż nie sprawdza zawartości indeksów, polegając na równoważności indeksu z wartością pod nim przechowywaną. Zmiana miejsca startowego z 0 na dowolne inne wymusza jednokrotne sprawdzenie zawartości indeksu.
Go to the top of the page
+Quote Post

Posty w temacie
- sztosz   Książka do Algorytmiki   29.08.2009, 09:33:15
- - wookieb   Zależy jakich algorytmów poszukujesz. W phpie nie ...   29.08.2009, 09:37:21
- - blooregard   @sztosz - jeśli byłbyś zainteresowany zakupem ksią...   29.08.2009, 09:43:04
- - sztosz   Od razu mówię że PHP to mnie akurat mało interesuj...   29.08.2009, 09:56:56
- - wookieb   Niestety ta książka akurat sit nie omawia. Na stro...   29.08.2009, 10:13:04
- - thek   Tak naprawdę to nie ma dobrej książki do algorytmi...   29.08.2009, 19:39:46
- - Shadowsword   Kup "Wprowadzenie do algorytmów" Wydawni...   29.08.2009, 20:04:07
- - sztosz   No ładnie książka wszędzie kosztuje około 140 zł, ...   29.08.2009, 21:00:28
- - Shadowsword   Naprawdę warto. Jest gruba, dokładnie opisuje napr...   29.08.2009, 21:26:38
- - l0ud   CytatPoza tym nie można temu algorytmowi nic zarzu...   29.08.2009, 22:17:06
- - wookieb   Cytat(l0ud @ 29.08.2009, 23:17:06 ) O...   29.08.2009, 22:34:16
- - sztosz   @Shadowsword: ściągnąłem kilka rozdziałów, przeczy...   29.08.2009, 22:37:05
- - wookieb   CytatUPDATE Wynik mi wyszedł taki: 11.087609052658...   29.08.2009, 22:44:01
- - sztosz   CytatU mnie dzieje się to tutaj [PHP] pobierz, pla...   29.08.2009, 22:55:38
- - wookieb   Jeszcze mała uwaga Loud Ale tym razem słuszna [P...   29.08.2009, 23:04:52
- - thek   Kod l0ud'a jest szybszy tylko z jednego powodu...   30.08.2009, 00:33:43
- - sztosz   Ale cała szybkość nie polega na tym że do danego i...   30.08.2009, 01:52:38
- - thek   A popatrz sobie na wyjaśnienie moje oraz chłopaków...   30.08.2009, 02:41:38
- - sztosz   OK, może ten algorytm jest lepszy przy "zrów...   30.08.2009, 10:30:38
- - rzymek01   również polecam "Wprowadzenie do algorytmów...   30.08.2009, 13:34:12
- - thek   Zrównolegnianie to proces przekształcania kodu z s...   30.08.2009, 14:43:15
- - sztosz   Parallel computing (Obliczenia równoległe), tak si...   30.08.2009, 20:08:16
- - l0ud   CytatAlgorytm pierwszy jest bardziej optymalny i l...   30.08.2009, 22:12:53
- - thek   Wczoraj źle zrozumiałem algorytm Patrzyłem na nie...   31.08.2009, 00:04:23
- - rzymek01   [PHP] pobierz, plaintext <?php /* wykorzys...   31.08.2009, 09:16:03
- - sztosz   W Pythonie [PYTHON] pobierz, plaintext from time ...   31.08.2009, 15:33:05
- - l0ud   Cytatadded: ktoś wie dlaczego tablica bool [400 00...   31.08.2009, 16:32:05
- - thek   Zabrzmiało to jakby C++ sam nie był językiem wysok...   31.08.2009, 16:52:35
- - sztosz   Nadal jest błąd: [32680]=> int(385001) to jest...   31.08.2009, 16:56:55
- - l0ud   CytatZabrzmiało to jakby C++ sam nie był językiem ...   31.08.2009, 17:13:12
- - sztosz   A przede mną naprawdę dużo nauki, prosta rekurencj...   31.08.2009, 17:22:30
- - rzymek01   @sztosz, wiadomo, że rekurencja jest wolniejsza i ...   31.08.2009, 19:18:07
- - thek   OK... czas na mnie Kod#include <cstdlib> ...   1.09.2009, 01:50:22
- - rzymek01   no tak, memset jest znacznie szybszy jak ci się ...   1.09.2009, 13:53:48
- - thek   Można robić przez new... Tylko że przy wywoływaniu...   1.09.2009, 20:07:24
- - l0ud   Cytatale gdybym miał zwrócić wynik to byłaby kapli...   1.09.2009, 20:39:12
- - rzymek01   1. program po zakończeniu swojej pracy zwalnia prz...   1.09.2009, 21:19:48
- - l0ud   rzymek01, jak już to delete[] wyniki; A to, że sy...   1.09.2009, 21:34:17
|- - rzymek01   Cytat(l0ud @ 1.09.2009, 22:34:17 ) rz...   2.09.2009, 14:55:32
- - thek   @loud: gdyby rezerwacja i kasowanie pamięci były w...   1.09.2009, 22:17:54
- - Jabol   Co do tematu to niestety masz ten problem, że więk...   4.09.2009, 10:43:47


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 13:11