Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
375
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.41 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /*
  5. Co oznacza zlozonosc algorytmu O(1)?
  6.  
  7. -> oznacza ze taki algorytm dla różnej ilości przyjmowanych danych wykonuje zawsze stałą liczbę operacji
  8. -> np. w tym przypadku wykonywana jest jedna operacja - wykorzystanie wzoru na ciąg arytmetyczny w celu obliczenia sumy
  9. -> ważne jest to, że dla różnych danych liczba operacji się nie zmienia - to jest klucz w zrozumieniu tego
  10. -> Algorytm o złożoności oznaczonej O(1) jest najszybszym z możliwych - bo nieważne czy podłożymy milion liczb czy jedną - będzie zawsze działać tak samo szybko
  11.  
  12. Dlaczego w tym algorytmie jest O(1)?
  13. - bo jest stała liczba operacji - tutaj akurat jedna
  14. */
  15.  
  16. /*
  17. Co oznacza zlozonosc algorytmu O(n)?
  18.  
  19. -> oznacza, że liczba operacji w takim algorytmie nie jest STAŁA w zależności od ilości przyjmowanych danych
  20. -> im więcej danych tym rośnie liczba operacji, no bo jest pętla wiadomka
  21. -> można powiedzieć, że ten algorytm jest LINIOWY - bo liczba operacji rośnie proporcjonalnie do ilości przyjmowanych danych
  22.  
  23. Dlaczego w tym algorytmie jest O(n)?
  24. - w tym algorytmie wykonujemy następujące operacje:
  25.     1) przypisanie int sum=0;
  26.     2) Odpalenie pętli N razy, więc mamy N operacji
  27.     3) return sum - ostatnia operacja
  28.     Łącznie wychodzi: f(N) = 1 + N + 1 = N +2
  29.     Złożoność jest to ograniczenie z góry funkcji. Więc pomijamy stałe.
  30.     Zatem złożoność tego algorytmu wychodzi nam : O(N)
  31. */
  32.  
  33. //sumowanie liczb z wykorzystaniem wzoru na sumę wyrazow w ciagu arytmetycznym - O(1)
  34. int sum1(int n) {
  35.   return  (n * (n+1))/2;
  36. }
  37.  
  38. //sumowanie liczb w petli - O(n)
  39. int sum2(int n) {
  40.   int sum = 0; //1 operacja
  41.   for (int i = 1; i <= n; i++) { //n operacji
  42.     sum += i;
  43.   }
  44.   return sum; //2 operacja
  45. }
  46.  
  47. //sumowanie liczb - budujemy macierz NxN wypełnioną liczbami od 1 do N. Macierz ma n^2 komórek, przez
  48. //które przechodzimy w dwóch pętlach, a nastepnie wyznaczamy sumę
  49. //ponieważ przechodzimy przez każdą komorke macierzy to zlozonosc bedzie O(n^2)
  50. int sum3(int n){
  51.     int sum=0;  
  52.     int array[n+1][n+1];
  53.  
  54.     int j,i;
  55.     for (i = 1; i <= n; i++) {
  56.         for (j = 0; j <= n; j++) {
  57.                 array[i][j] = i;
  58.  
  59.         }
  60.         sum+=array[i][0];
  61.  
  62.     }
  63. return sum;
  64. }
  65.  
  66. int main(){
  67.     printf("sum1: %d", sum1(5));
  68.     printf("\nsum2: %d", sum2(5));
  69.     printf("\nsum3: %d", sum3(5));
  70.  
  71.     return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement