Предмет: Информатика,
автор: Laace246
Написать программу на языке C++
Приложения:
Ответы
Автор ответа:
1
#include <iostream>
#include <ctime>
using namespace std;
int main() {
srand( time(0) );
int *mas = new int[100];
int even_c = 0, odd_c = 0;
for (int i = 0; i < 100; ++i) {
mas[i] = 1 + rand() % 100;
if (mas[i] % 2 == 0) even_c++; else odd_c++;
}
int *even = new int [even_c];
int *odd = new int [odd_c];
int temp = 0;
for (int i = 0; i < 100; ++i) {
if (mas[i] % 2 == 0) {even[temp] = mas[i]; temp++;}
}
temp = 0;
for (int i = 0; i < 100; ++i) {
if (mas[i] % 2 != 0) {odd[temp] = mas[i]; temp++;}
}
delete[] mas;
cout << "Even: ";
for (int i = 0; i < even_c; ++i) {
cout << even[i] << " ";
}
cout <<endl << "Odd: ";
for (int i = 0; i < odd_c; ++i) {
cout << odd[i] << " ";
}
}
Что мы имеем, по результатам выполнения я составил диаграммы, вы их сможите посмотреть по ссылкам, я их загружу на файлообменник, а так же усредненные данные тут
Начнем с размера бинарников, без какой либо оптимизации собраные под G++, вот его версия кстати:
g++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
Размер вашего кода в скомпилированном бинарнике составляет:
16 K
Моего же
24 К
То есть 150% от вашего или в полтора раза больше. Если их компилить с флагом -O3, то ваш бинарь весит:
16K
Мой же
16K
То есть фактический размер бинаря при билде с флагом оптимизации меньше, чем при тех же условиях - ваш
g++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
Размер вашего кода в скомпилированном бинарнике составляет:
16 K
Моего же
24 К
То есть 150% от вашего или в полтора раза больше. Если их компилить с флагом -O3, то ваш бинарь весит:
16K
Мой же
16K
То есть фактический размер бинаря при билде с флагом оптимизации меньше, чем при тех же условиях - ваш
Время выполнения программ
- Синяя ваш код
- Красная линия мой код
100 выполнений
https://prnt.sc/m8n5tk
1000 выполнений
https://prnt.sc/m8n5yq
Как видите ваш код выполняется чаще всего в разы дольше чем мой, посмотрите особенно вторую картинку и размах пиков выполнения.
Еденицы измерения там взяты из измерения - миллисекунды кажись.
- Синяя ваш код
- Красная линия мой код
100 выполнений
https://prnt.sc/m8n5tk
1000 выполнений
https://prnt.sc/m8n5yq
Как видите ваш код выполняется чаще всего в разы дольше чем мой, посмотрите особенно вторую картинку и размах пиков выполнения.
Еденицы измерения там взяты из измерения - миллисекунды кажись.
По потреблению памяти, ниже привожу усредненное значение по выполнению 100 итераций. Замерял данные с помощью тулзы valgrind.
Ниже можно ознакомится с результатом работы вашего примера:
Total: 73,552
Heap: 73,504
Extra Heap: 48
а теперь моего примера:
Total: 74,152
Heap: 74,128
Extra Heap: 24
Очевидно, что ваша реализация выигрывает всего на 600-630 байт потребления памяти.
Приведены измерения для пикового значения потребления памяти.
Еденицы измерения - байты.
Ниже можно ознакомится с результатом работы вашего примера:
Total: 73,552
Heap: 73,504
Extra Heap: 48
а теперь моего примера:
Total: 74,152
Heap: 74,128
Extra Heap: 24
Очевидно, что ваша реализация выигрывает всего на 600-630 байт потребления памяти.
Приведены измерения для пикового значения потребления памяти.
Еденицы измерения - байты.
Какой из этого можно сделать вывод?
Мне было очень скучно, если я вам это рассписал.
А ещё, можно отметить, что даже с оптимизацией (все тесты и замеры выполненны с компиляцией с флагом оптимизации) ваш солюшн решает мой только в потреблении памяти, всего на 600 байт, зато в разы медленнее, в отдельных случаях в 2 раза.
Мне было очень скучно, если я вам это рассписал.
А ещё, можно отметить, что даже с оптимизацией (все тесты и замеры выполненны с компиляцией с флагом оптимизации) ваш солюшн решает мой только в потреблении памяти, всего на 600 байт, зато в разы медленнее, в отдельных случаях в 2 раза.
Так что пишите хороший код, коль с такой сложной абстракцией мой код все равно работает лучше, не забывайте return, а так же подчищать память, а иначе это позорно...
Спасибо за внимание)
Спасибо за внимание)
P.S.
Могу написать код ещё быстрее, избегая использования векторов))
Могу написать код ещё быстрее, избегая использования векторов))
К слову тоже всего одним циклом, у вас 5, а у меня 1, ну круто же)
К слову наврал, по графикам видно что код работает быстрее в среднем не в 2 раза а в 3-4
Похожие вопросы
Предмет: Русский язык,
автор: nikitos123zy
Предмет: Математика,
автор: fl1m999
Предмет: Математика,
автор: nurzigitnurik7
Предмет: Математика,
автор: владимир1151
Предмет: Математика,
автор: ДашаБрюсова
1. Размер бинарей
2. Время выполнения
3. Объем памяти для в рантайме + обьем по куче + доп обьем по куче