Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2018
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.81 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <sys/resource.h>
  3. #include <sys/time.h>
  4. #define ll long long
  5. #define pb push_back
  6.  
  7. using namespace std;
  8.  
  9. void sequential_search (ll searched_element, vector <ll> x) {
  10.     for (ll i = 0; i < x.size (); ++i) if (x[i] == searched_element) return;
  11. }
  12.  
  13. void indexed_search (ll searched_element, vector <ll> x, ll range_jump) {
  14.     ll i, j;
  15.     for (i = range_jump; i < x.size(); i += range_jump)
  16.         if (x[i] >= searched_element) break;
  17.  
  18.     for (j = i - range_jump; x[j] != searched_element; j++)
  19.         if (j == i+1) return;
  20.  
  21.     return;
  22. }
  23.  
  24. ll binary_search (vector <ll> x, ll left, ll right, ll searched_element) {
  25.     while (left <= right) {
  26.         ll mid = left + (right - left)/2;
  27.         if (x[mid] == searched_element) return mid;
  28.         if (x[mid] < searched_element) left = mid + 1;
  29.         else right = mid - 1;
  30.     }
  31.  
  32.     return 0;
  33. }
  34.  
  35. double calc_time (const struct rusage *b, const struct rusage *a) {
  36.     if (b == NULL || a == NULL)
  37.         return 0;
  38.     else
  39.         return ((((a->ru_utime.tv_sec * 1000000 + a->ru_utime.tv_usec) -
  40.                  (b->ru_utime.tv_sec * 1000000 + b->ru_utime.tv_usec)) +
  41.                 ((a->ru_stime.tv_sec * 1000000 + a->ru_stime.tv_usec) -
  42.                  (b->ru_stime.tv_sec * 1000000 + b->ru_stime.tv_usec)))
  43.                 / 1000000.0);
  44. }
  45.  
  46. void generator (ll vector_size) {
  47.  
  48.     struct rusage init_time, end_time;
  49.     double time_seq_s = 0, time_idx_s = 0, time_bin_s = 0, time_generate_vec = 0;
  50.     ll bin_s;
  51.  
  52.     vector <ll> x;
  53.  
  54.     getrusage(RUSAGE_SELF, &init_time);
  55.         for (ll i = 0; i < vector_size; ++i)
  56.             x.pb (rand() % (vector_size * 5));
  57.  
  58.         sort (x.begin(), x.end());
  59.     getrusage(RUSAGE_SELF, &end_time);
  60.  
  61.     time_generate_vec = calc_time (&init_time, &end_time);
  62.  
  63.  
  64.     ll search = x[rand () % vector_size];
  65.  
  66.  
  67.     getrusage(RUSAGE_SELF, &init_time);
  68.         sequential_search (search, x);
  69.     getrusage(RUSAGE_SELF, &end_time);
  70.    
  71.     time_seq_s = calc_time (&init_time, &end_time);
  72.  
  73.  
  74.     getrusage(RUSAGE_SELF, &init_time);
  75.         indexed_search (search, x, log10(vector_size));
  76.     getrusage(RUSAGE_SELF, &end_time);
  77.    
  78.     time_idx_s = calc_time (&init_time, &end_time);
  79.  
  80.  
  81.     getrusage(RUSAGE_SELF, &init_time);
  82.         bin_s = binary_search (x, 0, vector_size, search);
  83.     getrusage(RUSAGE_SELF, &end_time);
  84.    
  85.     time_bin_s = calc_time (&init_time, &end_time);
  86.  
  87.  
  88.     printf ("With %lld elements, and element in position %lld:\n\n"
  89.             "the computer took %.2lf seconds to generate and sort the array\n"
  90.             "sequential_search took %.2lf seconds to find element\n"
  91.             "indexed_search took %.2lf seconds to find element\n"
  92.             "binary_search took %.2lf seconds to find element\n\n\n",
  93.             vector_size, bin_s, time_generate_vec, time_seq_s, time_idx_s, time_bin_s);
  94. }
  95.  
  96.  
  97. int main () {
  98.     srand (time(NULL));
  99.  
  100.     for (ll i = 100000; i < 60000000; i += 100000) {
  101.         i += i;
  102.         generator (i);
  103.     }
  104.  
  105.     return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement