|
|
||||||||||||||||
Как ускорить логику цикла? [for experts]25.01.2021, 16:21. Показов 5704. Ответов 62
Приветсвую.
Есть рабочий код для простой задачи. На входе имеем начало и конец отрезкОВ надо определить какие области эти отрезки НЕ перекрыли. Грубо говоря какие доски забора остались НЕ покрашены. Например
Кликните здесь для просмотра всего текста
//битовое расположение используется для уменьшения памяти (отведенно максимум 2Гб для нашей задачи) и (надеюсь) увеличения скорости Но стоит задача его "ускорить". Т.к. например с такими входными данными этот код делается неприемлимо долго Кликните здесь для просмотра всего текста
Жду от уважаемого сообщества один из двух варианта ответа А) как еще можно ускорить данную логику ? Б) если существенно ускорения выше обозначенной логики не возможно, подскажите алгоритм (словесный код) как можно быстро (всмысле не написать код быстро а чтоб программа быстро крутилась) решить данную задачу ?
0
|
||||||||||||||||
| 25.01.2021, 16:21 | |
|
Ответы с готовыми решениями:
62
Как ускорить работу цикла?
Как ускорить выполнение цикла на Update |
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
||||||
| 29.01.2021, 16:19 | ||||||
0
|
||||||
|
|
|||||||
| 29.01.2021, 17:51 [ТС] | |||||||
|
вообщем смог сам победить , без подглядывания на ваши варианты (а то может и красивее сделал бы
но блин что с моей головой !? почему у меня почти все задачи сводятся к куче if как заставить её думать по другому ? или это просто данно не всем ?PS: хотя просматривая лучшие варианты на codingame - мой оказывается не самый хужший , как минимум лаконичнее многих... PSS: очередной раз поражаюсь могуществу Си, ктото в 20 строчек делает код, а ктото этот же в 120 ![]() Кликните здесь для просмотра всего текста
int compare (const void * pa, const void * pb); принимает только *a, *b ну то есть массив (он же указатель) и я ни как не мог предположить что туда можно впихнуть вообще почти всё что угодно ![]() первый раз столкнулся с таким , до сих пор всё было очень строго. int на входе так int. указатель указателей так указатель указателей , а тут разрыв шаблона
0
|
|||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 29.01.2021, 22:12 | |||
![]() Когда много условий (if) - значит что система решения плохо продумана. Код в сообщении выше - мало того что наверняка проиграет в производительности, его изменение другим программистом (или даже Вами, спустя некоторое время) будет затруднительным. (возможности языка, алгоритмику, примеры, ). Имхо.
0
|
|||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 29.01.2021, 22:30 | ||
|
0
|
||
|
|
|
| 29.01.2021, 23:25 [ТС] | |
|
SmallEvil, спасибо
TheCalligrapher, ну ссылка то она ссылка но просто так один в другой не заменяются и тут даже теория не всегда помогает... понятно что нужно много практики и опыта (коего у вас не отнять) мне же пока тяжело а чаще очень тяжело бороться со всякими (*)[]-> ит.д.
0
|
|
|
|
|||||||
| 01.02.2021, 19:33 [ТС] | |||||||
|
Renji, SmallEvil, TheCalligrapher, zayats80888, Folian, господа , ради интереса хочу замерить скорость ваших вариантов /узнать насколько мой вариант уступает... вобщем
у меня отрезки записанны ввиде матрицы int fence[100][2], L длина, N кол-во;... у вас всякие векторы поинты и т.д. (чтоб я сам долго не ломал голову), подскажите плиз (каждый для своего варианта) как быстро перевести/скопировать мою матрицу в ваши инпут даты а дальше я скопирую ваши примеры и на основе моей инпут дате проверю все примеры на скорость ради интереса (если не возражаете).я имею ввиду мне нужно от каждого из вас чтото типо (например)
PS:
0
|
|||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||||
| 01.02.2021, 19:39 | ||||||
|
Может, стоит разобраться как эти вектора работают?
В моем случае каждый lineList.push_back({x,y}); пихает в список один отрезок x-y. Ну, вызывать push_back в цикле то вы сами сумеете? Если совсем никак, то замените весь код main до push_back на:
0
|
||||||
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
||
| 01.02.2021, 20:16 | ||
|
Чтоб заполненный массив использовать придется немного костылей вставить; в принципе, могу подправить, но проще файлом)
0
|
||
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
||||||||||||||||||||||||||||
| 01.02.2021, 22:36 | ||||||||||||||||||||||||||||
|
Кстати, насчет Может, конечно, я где-то накосячил, но вот результаты: Кликните здесь для просмотра всего текста
Renji, ~11 секунд Кликните здесь для просмотра всего текста
TheCalligrapher, ~19 Кликните здесь для просмотра всего текста
XLAT, ~68 Кликните здесь для просмотра всего текста
SmallEvil, ~39 Кликните здесь для просмотра всего текста
Folian, ~6 ![]() Кликните здесь для просмотра всего текста
Хотя я догадываюсь, там числа часто перекрывают друг-друга. Нужно создать что-то более разрозненное, с большим количеством "дыр". Добавлено через 24 минуты Нет, всё справедливо было сказано; на сильно полосатом заборе у меня самый тормозной вариант, настолько тормозной что пока ещё неизвестно ![]() Остальные варианты, как и ожидалось, +- так же.
1
|
||||||||||||||||||||||||||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
|
| 01.02.2021, 23:23 | |
|
1
|
|
|
|
||||||
| 01.02.2021, 23:54 [ТС] | ||||||
|
Folian, чтение / инициализация мне кажется надо вынести из таймера
только замерять сорт/подсчёт/вывод а замерьте тогда уже и моё плиз Кликните здесь для просмотра всего текста
0
|
||||||
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
||
| 02.02.2021, 01:17 | ||
|
alexbmd, ~13,6 c чтением ~7,8 отдельно. Моё творение, навскидку, осилит этот файл с мелкими полосками примерно за 2,5 года
0
|
||
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
||
| 02.02.2021, 01:22 | ||
|
0
|
||
|
Just Do It!
|
|||
| 02.02.2021, 09:08 | |||
|
чтобы одним одним плевком менять тип. часто, когда начинаешь вбивать код, не всегда ясно, какую точность там для своих вводных требует валидатор. а иногда просто хотца поэкспериментить с разными типами.
0
|
|||
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
||
| 02.02.2021, 11:25 | ||
|
Кстати интересно, вчера внимания не обратил, но на малых отрезках выполняется не за 68, а за 47 примерно, т.е. в полтора раза быстрее, в то время как у остальных - в т.ч. и у SmallEvil - так же как и с большими, хотя вроде тоже через std::map.
1
|
||
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
||
| 02.02.2021, 12:02 | ||
|
Но со вторым файлом выводов дофига. Сейчас ради интереса посмотрел: до чисел отрезков > 100'000'000 оно мелькало секунд 50, а теперь прикинь сколько оно будет мелькать до 2'000'000'000 при более или менее одинаковом разбросе и ответь, оно тебе надо? При том что этот вывод одинаков у всех.
0
|
||
|
Just Do It!
|
||||||||
| 02.02.2021, 13:30 | ||||||||
|
я тоже щас тут поигрался с вашими тестами. результат несколько иной: SmallEvil обгоняет Renji на 30% а мой обгоняет и SmallEvil и Renji, правда если заменить std::map на std::unordered_map ![]() файл "fnc_extended.txt" был сгенерирован так:
тема того, что мы на самом деле измеряем до конца не раскрыта ...
1
|
||||||||
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
|||
| 02.02.2021, 14:30 | |||
|
Ещё посетила мысль сравнить своё с решениями на std::map на более подходящей задаче, вроде "Когда весь забор будет покрашен". Но это уже только вечером)
0
|
|||
| 02.02.2021, 14:30 | |
|
Можно ли как нибудь ускорить работу цикла for? Ускорить работу вложенного цикла for() C# Welcome to experts C++! Minsk.BelHard.vacancies: Java Experts, Team Lead, PM Как из цикла вывести данные для другого цикла? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|