Форум программистов, компьютерный форум CyberForum.ru

Как определить эффективность програмного кода? - C++

Восстановить пароль Регистрация
 
StepaPair
2 / 2 / 1
Регистрация: 24.09.2013
Сообщений: 19
07.10.2013, 11:35     Как определить эффективность програмного кода? #1
Всем привет!

Недавно начал изучать С++ и сразу возник принципиальный вопрос.
Как определить эффективность програмного кода?

Любую задачу в программировании можно решить различными методами.
Как можно оценить затраты ресурсов на каждый метод. И что вообще относится к ресурсам? Есть ли какие-нибудь другие показатели кроме времени выполнения?

Например, у меня была задачка: есть массив из 10 чисел mass[], нужно создать другой массив, который состоял бы из всех числем mass[], но распологались бы они в случайном порядке.

Я нашел 2 решения:
1. Брать радномное число, которое служило бы номером ячейки в mass[] и в случае, если оно не выпадало ранее записывать его в искомый массив, если такое число уже выпадало ранее повторить рандом числа.
2. Брать радномное число, которое служило бы номером ячейки в mass[] и после этого сдвигать стоящие справа числа массива на а влево как бы "уменьшая" размер массива на 1.

Оба варианта кода прилеплю ниже.

Мне кажется второй вариант лучше, но как это измерить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
reisal78
 Аватар для reisal78
603 / 516 / 119
Регистрация: 28.04.2013
Сообщений: 1,451
07.10.2013, 11:41     Как определить эффективность програмного кода? #2
Лично моё мнение:
На ранних этапах обучения не стоит с этим заморачиваться. Разберите основы с++, и многие вопросы которые у Вас появляются в начале обучения пропадут сами собой.
StepaPair
2 / 2 / 1
Регистрация: 24.09.2013
Сообщений: 19
07.10.2013, 11:58  [ТС]     Как определить эффективность програмного кода? #3
Вариант 1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <ctime>
using namespace std;
 
 
int main()
{   
    int mass[10]={1,2,3,5,8,13,21,34,55,89},     // значения для выборки
        test[10]={0},                // массив проверющий выпадало ли такое значение ранее
        randMass[10]={0};            // массив случайных неповторяющихся чисел 
 
    srand(time(NULL));
 
    for (int i=0, x ; i<10 ; i++)
    {
        for (;;)
        {
            x=rand() % 10;         // x - случайная переменная обозначающая номер ячейки в массиве
            if (test[x]==0)            // проверка выпадало ли такое значение ранее 
            {
                randMass[i]=mass[x];
                test[x]=1;
                break ;
            }
            else continue;
        }
        
    }
 
    for (i=0 ; i<10; i++)                       // вывод на экран случайного массива
        cout << randMass[i] << endl;
 
    system("pause");
    return 0;
}

Вариант 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <ctime>
using namespace std;
 
 
int main()
{   
    int mass[10]={1,2,3,5,8,13,21,34,55,89},         // значения для выборки
        randMass[10]={0};                            // массив случайных неповторяющихся чисел 
 
    srand(time(NULL));
    
    for (int i=0, x , numbersLeft=10 ; i<10 ; i++)// x - случайная переменная обозначающая номер ячейки
    {
        x=rand() % numbersLeft;         // numbersLeft - количество чисел оставшееся в массиве mass[]
        randMass[i]=mass[x];
        for (int j=x ; j<9 ; j++)      // цикл сдвига всех чисел начиная с только что выбранного ввлево
            mass[j]=mass[j+1];
        numbersLeft--;
 
    }
 
    for (i=0 ; i<10; i++)                  // вывод на экран случайного массива
        cout << randMass[i] << endl;
 
    system("pause");
    return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.10.2013, 11:59     Как определить эффективность програмного кода? #4
Как определить эффективность програмного кода?
Профайлер.
StepaPair
2 / 2 / 1
Регистрация: 24.09.2013
Сообщений: 19
07.10.2013, 12:06  [ТС]     Как определить эффективность програмного кода? #5
Цитата Сообщение от reisal78 Посмотреть сообщение
Лично моё мнение:
На ранних этапах обучения не стоит с этим заморачиваться. Разберите основы с++, и многие вопросы которые у Вас появляются в начале обучения пропадут сами собой.
У меня есть цель написать конкретную программу в процессе своего обучения, во первых, так интереснее обучаться, во вторых быстрее "усваивается".

Понятно, что сразу идеальный код написать не удастся, но хотелось бы с известными проблемными местами разобраться сразу.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
07.10.2013, 12:12     Как определить эффективность програмного кода? #6
Цитата Сообщение от StepaPair Посмотреть сообщение
Как определить эффективность програмного кода?
комплексно
StepaPair
2 / 2 / 1
Регистрация: 24.09.2013
Сообщений: 19
07.10.2013, 12:32  [ТС]     Как определить эффективность програмного кода? #7
Цитата Сообщение от ForEveR Посмотреть сообщение
Профайлер.
Очень лаконично, но помогло
Спасибо

Добавлено через 43 секунды
Цитата Сообщение от XRuZzz Посмотреть сообщение
комплексно
А вот тут бы поподробнее не мешало бы
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
07.10.2013, 13:43     Как определить эффективность програмного кода? #8
Цитата Сообщение от StepaPair Посмотреть сообщение
Мне кажется второй вариант лучше, но как это измерить?
Вот для этого сначала надо ответить на вопрос: а что есть "эффективность"? Что есть критерий этой самой "эффективности"?
StepaPair
2 / 2 / 1
Регистрация: 24.09.2013
Сообщений: 19
07.10.2013, 13:46  [ТС]     Как определить эффективность програмного кода? #9
Цитата Сообщение от CheshireCat Посмотреть сообщение
Вот для этого сначала надо ответить на вопрос: а что есть "эффективность"? Что есть критерий этой самой "эффективности"?
Я предполагаю, что время выполнения. Возможно, что то еще типа использования памяти.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
07.10.2013, 13:51     Как определить эффективность програмного кода? #10
Так все-таки? Потому что обычно в разработке ПО именно эта дилемма и стоит: либо программа работает быстро, но жрет дофига памяти, либо - требует памяти очень и очень скромно, но работает сильно неторопливо...... :-)
StepaPair
2 / 2 / 1
Регистрация: 24.09.2013
Сообщений: 19
07.10.2013, 13:59  [ТС]     Как определить эффективность програмного кода? #11
Цитата Сообщение от CheshireCat Посмотреть сообщение
Так все-таки? Потому что обычно в разработке ПО именно эта дилемма и стоит: либо программа работает быстро, но жрет дофига памяти, либо - требует памяти очень и очень скромно, но работает сильно неторопливо...... :-)
Для меня сейчас важно УМЕТЬ оценить и время выполнения, и расход памяти при выполнении.
Мне кажется, что второй вариант будет выигрывать и там и там.

В теме отписывался ForEveR , с советом использовать профайлер.
Поначалу показалось, что он мне выдавал время выполнения, но поигравщись я осознал, что ошибался.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.10.2013, 14:14     Как определить эффективность програмного кода? #12
StepaPair, Профайлер показывает узкие места кода.
StepaPair
2 / 2 / 1
Регистрация: 24.09.2013
Сообщений: 19
07.10.2013, 14:19  [ТС]     Как определить эффективность програмного кода? #13
Цитата Сообщение от ForEveR Посмотреть сообщение
StepaPair, Профайлер показывает узкие места кода.
А как узнать время выполнения, и расход памяти?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2013, 14:21     Как определить эффективность програмного кода?
Еще ссылки по теме:

C++ Эффективность развертки циклов
Определить эффективность курсов C++
как понять значение кода с++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.10.2013, 14:21     Как определить эффективность програмного кода? #14
StepaPair, ну профайлер вообщем-то показывает и это. Можно посчитать и самостоятельно. Посмотрите настройки профайлера, мы ведь даже не знаем каким вы пользуетесь
Yandex
Объявления
07.10.2013, 14:21     Как определить эффективность програмного кода?
Ответ Создать тему
Опции темы

Текущее время: 03:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru