Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
StepaPair
2 / 2 / 1
Регистрация: 24.09.2013
Сообщений: 19
#1

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

07.10.2013, 11:35. Просмотров 601. Ответов 13
Метки нет (Все метки)

Всем привет!

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

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

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

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

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

Мне кажется второй вариант лучше, но как это измерить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2013, 11:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как определить эффективность програмного кода? (C++):

Открытие програмного кода игры - C++
Добрый вечер, неуверен что пишу в нужной теме, но всетаки вопрос. Есть ли какой-либо способ открыть и посмотреть програмный код одной из...

Определить эффективность курсов - C++
Здравствуйте! Свой первый пост начну, по традиции, с глупого вопроса:-[ Окончил университет по спец "Информационные системы и...

Как повысить эффективность загрузки процессора? - C++
Дамы и господа! Недавно выяснилось, что мои задачи загружают процессор только на 25%. Якобы так по умолчанию, а чтобы было больше,...

Определить, как изменится значение указателя при выполнении кода - C++
При выполнении операции: double *p; ++p; значение указателя р увеличится на: Выберите один ответ: 4

расчет програмного модуля - C++
разработать программный модуль : расчета основных параметров поликлиноременных передач

Эффективность развертки циклов - C++
Обдумываю целесообразность разворачивания циклов. Сама по себе задача несложная, но тем не менее, рутинная. Кроме того, читаемость кода...

13
reisal78
676 / 588 / 139
Регистрация: 28.04.2013
Сообщений: 1,675
07.10.2013, 11:41 #2
Лично моё мнение:
На ранних этапах обучения не стоит с этим заморачиваться. Разберите основы с++, и многие вопросы которые у Вас появляются в начале обучения пропадут сами собой.
1
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;
}
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
07.10.2013, 11:59 #4
Как определить эффективность програмного кода?
Профайлер.
1
StepaPair
2 / 2 / 1
Регистрация: 24.09.2013
Сообщений: 19
07.10.2013, 12:06  [ТС] #5
Цитата Сообщение от reisal78 Посмотреть сообщение
Лично моё мнение:
На ранних этапах обучения не стоит с этим заморачиваться. Разберите основы с++, и многие вопросы которые у Вас появляются в начале обучения пропадут сами собой.
У меня есть цель написать конкретную программу в процессе своего обучения, во первых, так интереснее обучаться, во вторых быстрее "усваивается".

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

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

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

Исследовать эффективность двух алгоритмов определения простоты числа - C++
дали задание: Цель: Следует выбрать эффективный алгоритм (по времени) теста простоты числа. На исследование вам дается два алгоритма: ...

Найти первые N чисел Фибоначчи (рекурсия/итерация, сравнить эффективность) - C++
Найти первые N чисел Фибоначчи двумя способами: с помощью рекурсии и с помощью итерации. Сравнить эффективность алгоритмов.

Как сравнить эффективность сгенерированного кода Си VS2003 VS Pelles C ver.7 - C (СИ)
Как сравнить эффективность сгенерированного кода Си VS2003 VS Pelles C ver.7 ? Насколько быстрый код и у кого?

Розделения програмного кода - Visual C++
Добрый вечер всем. У меня такая трабла, розделяю реализацию класса и его описания на два файла(*h, *.cpp) и тут же получаю ошыбку...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru