|
Мой лучший друг-отладчик!
|
||||||||||||||||
Довольно большое время работы с std::min()05.12.2014, 08:55. Показов 1499. Ответов 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 / 1819
Регистрация: 18.10.2014
Сообщений: 17,206
|
||||||||||||
| 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 Отсортировать большое число элементов за минимальное время, используя битовый массив Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|