Advertisement
Guest User

Untitled

a guest
May 31st, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.42 KB | None | 0 0
  1. // sample.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <vector>
  6. #include <math.h>
  7. #include <algorithm>
  8.  
  9. using namespace std;
  10.  
  11. bool criteriaInvertion(vector<int> data) {
  12.     int invertions = 0;
  13.     int index = 0;
  14.     for (int i = 0; i<data.size(); i++) {
  15.         index += 1;
  16.         for (int j = i; j<data.size(); j++) {
  17.             if (i>j) invertions += 1;
  18.         }
  19.     }
  20.     int n = data.size();
  21.     double z2 = (invertions - n * (n - 1) / 4.) * 6. / pow(n, 3. / 2);
  22.     return z2 <= 1.96;
  23. }
  24.  
  25.  
  26. bool phaseFrequency(std::vector<double> data) {
  27.     vector<bool> delta(data.size());
  28.     for (int i = 0; i < data.size() - 1; i++) {
  29.         if (data[i + 1] != data[i]) {
  30.             delta.push_back(data[i + 1]>data[i]);
  31.         }
  32.     }
  33.     int phases = 0;
  34.     bool old_sign = delta[0];
  35.     for (bool b : delta) {
  36.         bool new_sign = b;
  37.         if (new_sign != old_sign){
  38.             phases += 1;
  39.             old_sign = new_sign;
  40.         }
  41.     }
  42.     int n = data.size();
  43.     int _ = 0;
  44.     if (n < 30) {
  45.         _ = 0.5;
  46.     }
  47.     double z1 = z1 = (abs(phases - (2 * n - 7) / 3.) - _) / sqrt((16 * n - 29) / 90.);
  48.     return z1 <= 1.96;
  49. }
  50.  
  51. bool medianCriteria(vector<double> data) {
  52.     int data_len = data.size();
  53.     // поиск медианы
  54.     vector<double> sorted_data(data);
  55.     sort(sorted_data.begin(), sorted_data.end());
  56.     double median = 0;
  57.     if (data_len % 2 == 0){
  58.         median = (sorted_data[int(data_len / 2.) - 1] + sorted_data[int(data_len / 2.)]) / 2.;
  59.     }
  60.     else {
  61.         median = sorted_data[data_len / 2];
  62.     }
  63.     // вычисление массива с дельтами
  64.     vector<bool> delta(data.size());
  65.     for (double a : data) {
  66.         delta.push_back(a - median);
  67.     }
  68.     int max_series = 0;
  69.     int series = 0;
  70.     int series_number = 1;
  71.     bool old_sign = delta[0] > 0;
  72.     // подсчет количества серий и длины максимальной из них
  73.     for (double a : delta) {
  74.         bool new_sign = a > 0;
  75.         if (new_sign == old_sign) {
  76.             series += 1;
  77.         }
  78.         else {
  79.             max_series = max(series, max_series);
  80.             series = 0;
  81.             series_number += 1;
  82.             old_sign = new_sign;
  83.         }
  84.     }
  85.     bool cond1 = series_number > (data_len + 1 - 1.96 * sqrt(data_len - 1.)) / 2.;
  86.     bool cond2 = max_series < 3.3 * log10(data_len + 1);
  87.     return cond1 && cond2;
  88. }
  89.  
  90. int main()
  91. {
  92.     vector<int> plane1 = { 90,10,60,186,61,49,14,24,55,20,79,84,44,59,59,118,25,156,310,76,26,44,23,62,130,70,101,208 };
  93.     bool result = criteriaInvertion(plane1);
  94.     cout << result;
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement