Advertisement
Guest User

Untitled

a guest
May 28th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <chrono>
  4.  
  5. #define TIMING
  6.  
  7. #ifdef TIMING
  8. #define TIMER_ALGORITHM(iterations, size) TimeAlgorithm(iterations, size);
  9. #define INIT_TIMER auto start = std::chrono::high_resolution_clock::now();
  10. #define START_TIMER  start = std::chrono::high_resolution_clock::now();
  11. #define STOP_TIMER(name)  std::cout << "RUNTIME of " << name << ": " << \
  12.     std::chrono::duration_cast<std::chrono::nanoseconds>( \
  13.             std::chrono::high_resolution_clock::now()-start \
  14.     ).count() << " ns " << std::endl;
  15. #else
  16. #define INIT_TIMER
  17. #define START_TIMER
  18. #define STOP_TIMER(name)
  19. #endif
  20. #define INT_MAX std::numeric_limits<int>::max()
  21. using namespace std;
  22.  
  23. int MinDistance2(int A[], size_t n) {
  24.     // Input: Array A[0..n-1] of numbers
  25.     // Output: Minimum distance between two of its elements
  26.     int dmin = INT_MAX;
  27.     int temp;
  28.  
  29.     for (int i = 0; i <= n - 2; i++) {
  30.         for (int j = i+1; j <= n - 1; j++) {
  31.             temp = abs(A[i] - A[j]);
  32.             if (temp < dmin) {
  33.                 dmin = temp;
  34.             }
  35.         }
  36.     }
  37.  
  38.     return dmin;
  39. }
  40.  
  41. void TimeAlgorithm(int iterations, size_t size) {
  42.     INIT_TIMER
  43.     int testArray [iterations][size];
  44.  
  45.     // generate many random arrays to get an average of execution times
  46.     for (int i = 0; i < iterations; i++) {
  47.         for (int j = 0; j < size; j++) {
  48.             testArray[i][j] = rand() + 1;
  49.         }
  50.     }
  51.     cout  << '-' << size << "- ";
  52.  
  53.     START_TIMER
  54.     for (int t = 0; t < iterations; t++) {
  55.          MinDistance2(testArray[t], size);
  56.     }
  57.     STOP_TIMER("algorithm")
  58. }
  59.  
  60. int CountBasicOperations(int iterations, int A[], size_t n) {
  61.     // Returns the median value in a given array of n numbers
  62.     // This is the kth element, where k = | n/2 | if the array was sorted
  63.     long int count = 0; // counter for number of basic operations
  64.     // cout  << '-' << n << "- ";
  65.  
  66.     for (int o = 0; o < iterations; o++) {
  67.         for (int i = 0; i < n; i++) {
  68.             A[i] = rand() + 1;
  69.         }
  70.  
  71.         // Input: Array A[0..n-1] of numbers
  72.         // Output: Minimum distance between two of its elements
  73.         int dmin = INT_MAX;
  74.         int temp;
  75.  
  76.         for (int i = 0; i <= n - 2; i++) {
  77.             for (int j = i+1; j <= n - 1; j++) {
  78.                 count++;
  79.                 temp = abs(A[i] - A[j]);
  80.                 if (temp < dmin) {
  81.                     dmin = temp;
  82.                 }
  83.             }
  84.         }
  85.     }
  86.     return count/iterations;    // return average count for smooth data
  87. }
  88.  
  89. int main() {
  90.     // seed pseudorandom number generator with time to get different randoms each run
  91.     srand (0);
  92.     int interval = 100;
  93.     int max = 1000;
  94.  
  95.     for (int size=interval; size <= max; size+=interval) {
  96.  
  97.         int intArray[size];
  98.  
  99.         // generate random (or consecutive) numbers to fill array
  100.         // print numbers that are generated so we can test correctness
  101.         for (int i = 0; i < size; i++) {
  102.             intArray[i] = rand() + 1;
  103.             //cout << intArray[i] << " ";
  104.         }
  105.  
  106.         // timers and counters uncomment line to be used
  107.         for (int i = 0; i < 10; i++) {
  108.             TIMER_ALGORITHM(500, size);
  109.             //cout << CountBasicOperations(100, intArray, size) << endl;
  110.         }
  111.  
  112.         //cout << "MinDistance is " << MinDistance2(intArray, size);
  113.     }
  114.  
  115.     return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement