Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2021, 09:41   #1
jeetle
Новичок
Джуниор
 
Регистрация: 28.04.2021
Сообщений: 1
По умолчанию Почему время одинаковое, хотя должно возрастать (сложность O(n^2) )

Здравствуйте. Почему время одинаковое, хотя должно возрастать (сложность O(n^2) ) и как исправить?
Код:
#include <iostream>
#include <vector>
#include <random>
#include <ctime>
#include <algorithm>
#include <chrono>
#include <cstdlib>
 
using namespace std::chrono;
 
double meanTime(double* t, int n) {
double s{0};
for (int j{1}; j < 10; j += 1) s += t[j];
double aTime = s / 10;
std::cout << "\t [" << aTime << "] \t";
return aTime;
}
//Измерение std для пунктов a, b и c
double stdTime(double* t, double mean) {
double s{0};
for (int j{1}; j < 10; j += 1) s += (t[j] - mean) * (t[j] - mean);
double sTime = sqrt(s / 10);
std::cout << "[" << sTime << "]";
return sTime;
}
 
// a. Функция, сортирующая целые числа (int), которые размещены в векторе.
void SelectionSort(std::vector<int> &a) {
    for (int startIndex = 0; startIndex < a.size() - 1; ++startIndex)
    {
        int smallestIndex = a.at(startIndex);
        for (int currentIndex = startIndex + 1; currentIndex < a.size(); ++currentIndex)
        {
            if(a.at(currentIndex) < a.at(smallestIndex)) smallestIndex = currentIndex;
 
        }
        std::swap(a.at(startIndex), a.at(smallestIndex));
    }
}
 
int RandomNumber2() { return (std::rand() % 100); }
void FillVector(std::vector<int>& a) {
std::srand(unsigned(std::time(0)));
std::generate(a.begin(), a.end(), RandomNumber2);
}
 
double measureTime(std::vector<int>& a, int n) {
FillVector(a);
steady_clock::time_point t1 = steady_clock::now();
SelectionSort(a);
steady_clock::time_point t2 = steady_clock::now();
duration<double> time_span = duration_cast<duration<double>>(t2 - t1);
return time_span.count();;
}
 
 
void Experiment(std::vector<int> &a, int n, double* means, double* stds) {
FillVector(a);
double* times = new double[10000];
std::cout << "\n\nFor b: " << std::endl;
for (int k{ 0 }; k <= 53; k++) std::cout << "-";
std::cout << "\nArgument" << " | " << "Average time" << " | " << "Standard deviation of time |" << std::endl;
for (int k{ 0 }; k <= 53; k++) std::cout << "-";
for (size_t i = 1000; i < 10000; i+=1000) {
std::cout << "\n[" << i << "]" << " ";
for (size_t j = 0; j < 10; ++j) {
times[j] = measureTime(a, i);
}
means[i] = meanTime(times, i);
stds[i] = stdTime(times, means[i]);
}
}
 
int main() {
     double* means = new double[10000];
    double* stds = new double[10000];
    int n{1000};
    std::vector<int> a(n);
     Experiment(a, n, means, stds);
    return 0;
}

Последний раз редактировалось jeetle; 28.04.2021 в 09:48.
jeetle вне форума Ответить с цитированием
Старый 28.04.2021, 16:13   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Потому что длина вектора определяется в main и больше не меняется. Аналогичная задача - https://programmersforum.ru/showpost...77&postcount=9, но не хватает создания и заполнения вектора. Не нужно выделять по 10000 элементов для means, stds и times.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
на листе "накладна" если С:С одинаковое значение то в D:D значение должно прибавляться друг другу макросом probuem Microsoft Office Excel 0 14.06.2019 20:22
Сообщения в чат не выводятся, хотя все вроде нормально должно работать. trebush PHP 2 15.03.2016 14:55
Телешоу (Время: 2 сек. Память: 16 Мб Сложность: 66%) kostan3 Общие вопросы по Java, Java SE, Kotlin 4 04.01.2013 18:21
Сложность и время работы сортировки Шелла lega4 Помощь студентам 0 11.04.2011 11:02
свойствах показывает 1,50 гб (хотя должно быть 2, 00 гб) MORFIK Компьютерное железо 21 15.06.2009 04:31