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) |
|
|
|
![]() |
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 |
A popatrz sobie na wyjaśnienie moje oraz chłopaków. My nie sprawdzamy czy ma dokładnie tylko 2 dzielniki (IMG:style_emoticons/default/winksmiley.jpg) Bierzemy sobie jakąś liczbę i lecimy w pętlach usuwając jej kolejne wielokrotności (algorytm L0uda) lub sprawdzając czy liczba dzieli się przez tę, która wybraliśmy (algorytm wookieb). Różnica pomiędzy tymi dwoma polega na tym, że w przypadku pierwszego ważne jest to, czy dane są ustawione jako ciąg kolejnych liczb naturalnych. Jeśli tak nie będzie to algorytm jest bezużyteczny. Wystarczy, że liczby będą nieco przemieszane i będzie klops, bo przez to usunąć można liczby pierwsze z wyników. Algorytm drugi na mieszanie jest odporniejszy, ale też nie bez wad. W wyniku przemieszania pokaże nie tylko liczby pierwsze. Największym spowalniaczem kodu drugiego jest ciągłe robienie modulo i jego sprawdzanie. Tymczasem algorytm pierwszy ma to kompletnie gdzieś (IMG:style_emoticons/default/winksmiley.jpg) Po prostu kasuje hurtem bez sprawdzania zawartości. Dlatego jest taki szybki (IMG:style_emoticons/default/smile.gif) Gdyby jednak zaczynał nie od 0 ale 1 lub 2, to trzeba by go zmodyfikować tak jak opisałem w moim poście wyżej: pobrać wartość znajdującą się w elemencie tablicy o danym indeksie i o tyle indeksów przeskakiwać. Algorytm ten ma jeszcze jedną zaletę. Jest bardzo podatny na zrównolegnianie. Od około 21 do północy wymieniałem z wookiemb PW i część z nich poświęciłem na prezentację działania tego algorytmu na 5 procesorach (IMG:style_emoticons/default/winksmiley.jpg) By było to ładnie widoczne zrobiłem niezwykle uproszczony przykład szukania liczb pierwszych od 2 do 25. Hipotetycznie wszystkie liczby dla algorytmu wookiego były znalezione po 15 operacjach, algorytm pierwszy puszczony na 5 prockach zrobiłby to w 11 operacjach. Zapewne na 4 by to zrobił w 11, ale wprowadziłem bardzo wiele uproszczeń, które i tak działały na korzyść algorytmu wookiego (wszystkie operacje niemalże pomijane i tylko kasowanie uwzględniałem), czyli całość operacji sprawdzania, modulo, kasowania była równa temu samemu co samego kasowania, co jest jawnym naciąganiem, gdyż zajmuje to różne ilości czasu procesora, ale nie chciałem utrudniać odbioru idei. Przebiegi czasowe wykonywane jednocześnie dla kilku procesorów to dla wielu abstrakcja i konieczne są uproszczenia.
Co do algorytmów i ich pisania to sie już wypowiedziałem jak sądzę. Trzeba zrozumieć istotę problemu, złapać zależności występujące i układać to w bloczki. Nieraz w trakcie się okazuje, że o czymś zresztą zapomnieliśmy, czegoś nie uwzględniliśmy. Zresztą podczas pisania dowolnej aplikacji szybko się o tym programiści przekonują. Zwłaszcza Ci, którzy siedzą w obiektówce (IMG:style_emoticons/default/smile.gif) |
|
|
|
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
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 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 12:14 |