|
Мой лучший друг-отладчик!
|
||||||||||||||||
Довольно большое время работы с std::min()05.12.2014, 08:55. Показов 1506. Ответов 14
Метки нет (Все метки)
Здравствуйте! Имеется 2 исходника.
1:
Самое интересное : при сдаче задачи в тестирующую систему программа с этим if'ом заходит с довольно большим запасом по времени, тогда как версия с std::min ловит Time Limit и по моим замерам работает в 4-5 раз дольше. Кто может обьяснить, почему так происходит? Неужели вызов функции настолько замедляет программу каждый раз? Функция std::min элементарна же.(вариант со своим, самописным min с inline и без шаблонов я не тестил).
0
|
||||||||||||||||
| 05.12.2014, 08:55 | |
|
Ответы с готовыми решениями:
14
Большое время работы Std::min Из переменной типа std::string записать в файл большое количество данных (2 Mb) |
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 05.12.2014, 09:31 | |
|
ZaMaZaN4iK, как минимум, у Вас во втором случае присваивание происходит чаще.
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||||||
| 05.12.2014, 09:39 | ||||||
|
ZaMaZaN4iK, не по теме, но с вектором у тебя беда. Сделай p.reserve(100) перед циклом:
0
|
||||||
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
||||||||||||
| 05.12.2014, 09:59 | ||||||||||||
|
Смотрим в первый
0
|
||||||||||||
|
Мой лучший друг-отладчик!
|
|
| 05.12.2014, 11:33 [ТС] | |
|
TheCalligrapher, прошу прощения. Не тот исходник добавил. В том, про который я веду речь, этот самый break стоит.Так что тут с меня взятки гладки
![]() DrOffset, Да, я знаю. Можно и reserve(), можно и сразу размер указать. Не суть важно. На таком размере массива(а размер всего лишь сто) произойдет всего лишь 8 перевыделений памяти. Хоть это и медленная операция, но здесь она не играет ключевую роль. А так да,конечно, Вы правы. Просто лень писать было(хоть это и глупо звучит )Toshkarik, ну я понимаю это. Но что, операция присваивания такая долгая что ли? Добавлено через 4 минуты TheCalligrapher, не туда я посмотрел. На самом деле тот код даже без break работает быстрее. И если я там этот break поставлю, то это наоборот будет только оптимизация, а не замедление кода. Добавлено через 1 минуту И там кстати нужно писать break с условием, иначе будет неправильный ответ
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 05.12.2014, 12:05 | ||
|
0
|
||
|
Мой лучший друг-отладчик!
|
|
| 05.12.2014, 13:04 [ТС] | |
|
DrOffset, да, я обычно память резервирую,но хочу Ваше внимание, что не это место узкое в моей программе, этот оптимайз на максимальных данных(а это повторюсь всего лишь 100), даёт выигрыш на самом большом тесте всего лишь 4 сотых секунды.Вы мне лучше помогите с тем местом, на которое я обратил Ваше внимание.
Я не просто знаю, я уверен, что там будет не более 8 первыделений памяти. Так как по стандарту вектор увеличивает свой размер в 2 раза по сравнению с предыдущим. Ну и тут просто логарифм возьмем и получим, что 8-9 перевыделений. И хоть это операция долгая, я не спорю, она так мало раз выполняется, что не это ключевое место в моем коде. Версия компилятора на сайте была также указана и она совпадает с моим(также, как и флаги компиляции). А STL'овский вектор только таким способ память перевыделяет.
0
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||
| 05.12.2014, 13:08 | ||
|
По теме: попробуйте использовать профилировщик.
0
|
||
|
Мой лучший друг-отладчик!
|
|
| 05.12.2014, 13:12 [ТС] | |
|
Toshkarik, прошу прощения за может быть неправильно понятое выражение. Стандартом я имел в виду стандартную реализацию vector в STL. Вот ссылка на Хабр : тыц
0
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 05.12.2014, 13:16 | |
|
ZaMaZaN4iK, это зависит от компилятора, от конкретной реализации STL. Были компиляторы и с 1.5 и c 1.7 и с 2.5 множителями. Правда, версии сейчас не вспомню.
Добавлено через 1 минуту Вот, что то нашел: http://alenacpp.blogspot.ru/2005/06/vector_30.html
1
|
|
|
Мой лучший друг-отладчик!
|
|
| 05.12.2014, 13:23 [ТС] | |
|
Toshkarik, да, спасибо за ссылку. Тоже читал. Только что замерил свой коэффициент - 2. К сожалению, у меня используется наихудший. Из этого следует, что хуже моего варианта не будет точно
![]() Добавлено через 1 минуту Toshkarik, Вы не подскажете, так в чём может быть проблема всё таки ? тут явно дело не в перераспрделении памяти. Так как во первых, в двух исходниках используется один и тот же вариант, а во вторых, я уже протестил уже и с reserve(). Неужели операция присваивания так много занимает времени? Или вызов функции std::min() такой долгий?
0
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||||||||
| 05.12.2014, 13:30 | ||||||||||||
0
|
||||||||||||
|
Мой лучший друг-отладчик!
|
||||||
| 05.12.2014, 13:34 [ТС] | ||||||
|
Только что написал свою функцию min:
Добавлено через 3 минуты Toshkarik, да,я делал это. В случае с min оно, понятное дело, больше. Это сразу понятно. Получается, что программа тормозит из-за того, что очень много раз выполняется операция присваивания... Но я никак не мог предположить, что эта операция может долго выполняться.
0
|
||||||
|
Диванный эксперт
|
|
| 05.12.2014, 14:01 | |
|
1
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||||||||||
| 05.12.2014, 14:25 | ||||||||||
Добавлено через 4 минуты ![]() Добавлено через 11 минут
1
|
||||||||||
| 05.12.2014, 14:25 | |
|
Помогаю со студенческими работами здесь
15
Большое время перерисовки OpenGL
Большое расхождение в результатах работы программы Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream Отсортировать большое число элементов за минимальное время, используя битовый массив Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|