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
rzymek01
post
Post #2





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


@sztosz, wiadomo, że rekurencja jest wolniejsza i zżera więcej pamięci, bo musi pamiętać poprzednie wywołania funkcji

dobra, to teraz c++ (kompilator gcc 3.4.2, windows x86)

żeby zrobić z tego c, wystarczy:
rezerwowac pamięć funkcją calloc,
ctime na time.h
uzywać zamiast iostream, scanf i printf


  1. /* wykorzystane założenia:
  2. - rozważamy liczby tylko nieparzyste
  3. - przy eliminacji wielokrotości liczby p, eliminujemy tylko liczby nieparzyste,
  4. więc postaci: p^2, p(p+2), p(p+4), ...
  5. i jeszcze dlatego, że liczby k*p zostały przesiane wcześniej
  6.  
  7. - wykorzystałem wskazówki i pseukod z książki "Algorytmy", bo komu się chce na nowo koło odkrywać (IMG:style_emoticons/default/tongue.gif)
  8.  
  9. */
  10.  
  11. // tutaj mozna dać stałą chudego windowsa ;)
  12. #include <windows.h>
  13. #include <ctime>
  14. #include <iostream>
  15. #include <vector>
  16.  
  17. using namespace std;
  18.  
  19. // Sito - bez wyświetlania danych
  20. // w celu wyświetlania danych nalezy odkomentować linijki na końcu funkcji
  21. void Sito(int N) {
  22. /* Sito
  23.  * Wejście: parzysta liczba naturalna N
  24.  * Wyjście: tablica liczb pierwszych z zakresu liczb naturalnych <2, N+1>
  25. */
  26.  
  27. // inicjalizacja zmiennych
  28. int M = N / 2;
  29. bool* aSito = new bool[M + 1];
  30. for (int i = 1; i < M + 1; aSito[i++] = true);
  31.  
  32. int i = 1,
  33. p = 3,
  34. q = 4,
  35. j;
  36.  
  37. /*
  38. kod identyczny jak w moim poście wyżej z tym, że usuwamy wszystkie $
  39. */
  40.  
  41. vector<int> aPierwsze;
  42. aPierwsze.push_back(2);
  43. for (i = 1; i <= M; ++i) {
  44. if (!aSito[i])
  45. continue;
  46.  
  47. aPierwsze.push_back(2*i + 1);
  48. }
  49.  
  50. // wyświetlenie wyników
  51. // vector<int>::iterator it = aPierwsze.begin();
  52. //
  53. // for ( ; it < aPierwsze.end(); ++it )
  54. // cout << *it << "\n";
  55. // cout << endl;
  56. }
  57.  
  58. int main() {
  59. int n,
  60. iPomiarow;
  61. cout << "Podaj liczbe: ";
  62. cin >> n;
  63. cout << "\nPodaj liczbe pomiarow: ";
  64. cin >> iPomiarow;
  65. cout << endl;
  66.  
  67. LARGE_INTEGER start, stop, freq;
  68. unsigned __int64 istart, istop, ifreq;
  69. // ilość taktów cpu na sek
  70. QueryPerformanceFrequency(&freq);
  71. ifreq = freq.QuadPart;
  72.  
  73. // kalibrujemy czas operacji pomiaru czasu
  74. QueryPerformanceCounter(&start);
  75. QueryPerformanceCounter(&stop);
  76. unsigned __int64 kalibracja = start.QuadPart - stop.QuadPart;
  77.  
  78. // wykonujemy pomiar czasu
  79. QueryPerformanceCounter(&start);
  80.  
  81. // mierzymy
  82. for(int i = 0; i < iPomiarow; ++i) {
  83. Sito(n);
  84. }
  85.  
  86. // kończymy
  87. QueryPerformanceCounter(&stop);
  88.  
  89. istart = start.QuadPart;
  90. istop = stop.QuadPart;
  91. float t = (istop - istart - kalibracja) / (float)(ifreq * iPomiarow); // czas w sekundach
  92.  
  93. cout << t;
  94.  
  95. getchar(); // żeby nie zamknęła się konsola (IMG:style_emoticons/default/biggrin.gif)
  96.  
  97. return 0;
  98. }


najtrudniej było z dobrym liczeniem czasu, ale się udało.. uff (IMG:style_emoticons/default/smile.gif)


Kod
N = 100 000, czas: 0.000765121, pomiarów 10 000
N = 1 000 000, czas: 0,00850865s., pomiarów: 1000
N = 10 000 000, czas: 0,256164s, pomiarów 100
N = 100 000 000, czas: 3,43068s, pomiarów 10
N = 1 000 000 000, czas: 42.1552s, pomiarów 10


ale co by się nie oszukiwać, jesli gdzieś potrzeba liczby pierwsze to stosuje się preprocessing (IMG:style_emoticons/default/tongue.gif)
na jedne konkurs informatyczny trzeba było podać n-tą liczbę pierwszą z ograniczeniem do 100 000, to w necie znalazłem te liczby, wpadkowałem w tablicę i czas programu O(1) (IMG:style_emoticons/default/tongue.gif)

Ten post edytował rzymek01 31.08.2009, 19:23:07
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 15:45