|
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
|
|
Оптимальная сортировка для средних массивов03.11.2018, 15:57. Показов 3005. Ответов 55
Метки нет (Все метки)
Доброго, к сожалению не очень шарю в разных методах сортировки, потому хочу спросить, какую сортировку лучше выбрать для массива, длина которого не превышает 500'000 элементов, а содержимое лежит в пределе [0; 500'000].
Если кратко, то
0
|
|
| 03.11.2018, 15:57 | |
|
Ответы с готовыми решениями:
55
функция нахождения среднего из значений средних арифметических для пяти массивов произвольной длины (с комментариями)
Поиск и оптимальная сортировка в datagridview |
|
44 / 20 / 14
Регистрация: 23.10.2018
Сообщений: 103
|
|
| 03.11.2018, 19:54 | |
|
0
|
|
|
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
|
|||||||
| 03.11.2018, 20:24 [ТС] | |||||||
|
Добавлено через 1 минуту P.s. вполне вероятно, что код, написанный вчера в час ночи является ещё тем куском. Сейчас перепишу и снова отчитаюсь. Добавлено через 21 минуту ну вот:
0
|
|||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||||||
| 03.11.2018, 20:52 | |||||||
1
|
|||||||
|
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
|
|
| 03.11.2018, 22:43 [ТС] | |
|
Renji, ваш алгоритм довольно шустрый, хотя в некоторых тестах проигрывает предыдущему фавориту, однако, я думаю, это погрешности. Было бы неплохо, если вы объяснили как именно он работает, т.к. мне он не очевиден.
Добавлено через 13 минут p.s. только вот он тоже не прошел все тесты
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 03.11.2018, 22:51 | |||
|
1
|
|||
|
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
|
|
| 03.11.2018, 23:15 [ТС] | |
|
Renji, решение очень красивое
Что же касается остального, использую я только обычные массивы, а остальное, должно быть понятно из всей задачи: вся задача
есть массив 1 <= size <= 500'000, с элементами 0 <= a_i <= n. дальше происходит следующие: вводится команды "? l r" - делает то, что обсуждалось в этом топике (l и r - границы поиска) "! e v" - меняет значение элемента под номером 'e' на 'v' в самом начале, в то же время, когда вводится размер массива, вводится и кол-во этих команд, которых может быть от 1 до 250'000 включая. Есть ограничение на вторую команду ("! e v"), их можно ввести не больше 50'000 (конечно, при условии что всего команд >= 50'000) Что я делаю:
1. Читаю размер массива и кол-во команд через cin. 2. Выделяю память под массив и в цикле считываю все значения. 3. Вхожу в цикл while с условие пока переменная, в которой лежит кол-во операций не станет равна 0. 4. Читаю с помощью cin'а символ операции, число 'a', число 'b'. 5. Если это операция по поиску, то запускаю ваш алгоритм с параметрами find(arr + a - 1, b - a + 1); и вывожу через cout значение. (единица нужна, т.к. эти демоны начинают массив с 1, а не с 0) 6. Если это вторая команда, т.е. замена значения, то просто arr[a - 1] = b; 7. Декрементирую кол-во операций. Когда работа закончена, просто выхожу из программы, не удаляя, занятую массивом память, т.к. это может крашнуть их систему. возможно стоит запоминать результат предыдущих операций по поиску, вот только массив может меняться. Так же, если новый поиск входит в старый диапазон, то тоже можно что-то по колдовать, но не усложнит ли слишком сильно программу?
0
|
|
|
44 / 20 / 14
Регистрация: 23.10.2018
Сообщений: 103
|
||
| 03.11.2018, 23:42 | ||
![]() покажи нам ссылку на задачу, есть подозрение, что ты неправильно её понял
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||||||
| 04.11.2018, 00:16 | |||||||
0
|
|||||||
|
44 / 20 / 14
Регистрация: 23.10.2018
Сообщений: 103
|
|
| 04.11.2018, 00:37 | |
|
Ничего не получится, ему надо уложиться в 200 микросекунд
.
0
|
|
|
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
|
||||||
| 04.11.2018, 01:40 | ||||||
|
Cortas, а можно ссылку на контест?
Хочу проверить свою идею. Добавлено через 43 минуты
Плюс, по-хорошему, стоит кешировать запросы.
0
|
||||||
|
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
|
||||
| 04.11.2018, 10:30 [ТС] | ||||
|
пример
7 9 2 7 1 0 3 4 5 ? 1 7 ? 2 4 ! 3 3 ? 1 4 ? 4 7 ! 4 1 ? 1 7 ! 4 0 ? 4 7 Ответы к примеру
? 1 7 -> 6 ? 2 4 -> 2 ! 3 3 ? 1 4 -> 1 ? 4 7 -> 1 ! 4 1 ? 1 7 -> 0 ! 4 0 ? 4 7 -> 1 Только помните, что они нумеруют массив с 1. Добавлено через 30 минут Renji, ну, попробовал, однако, если я все сделал правильно, то этот код не прошел проверочного теста. Т.е. что я сделал, в первую скопировал ваш код, дальше все сделал по обычному сценарию, т.е. размер массива, кол-во операций, сам массив и т.д. При запросе на поиск в определенном участке, находил min и max значения на нем и передавал в вашу функцию (find(min, max)). Но значения отличались от нужных. При изменении элемента, как и написано в комментах к коду, сначала дергал removeValue(b) с аргументом значения, затем insertValue(b) с тем же аргументов. Что я сделал не так?
0
|
||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 04.11.2018, 12:19 | ||
|
0
|
||
|
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
|
||||||
| 04.11.2018, 15:53 | ||||||
|
Cortas, а так?
А можно ссылку на тесты? Скорее всего этот код не пройдёт тесты, поэтому нужно написать кеширование запросов. Кликните здесь для просмотра всего текста
0
|
||||||
|
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
|
|
| 04.11.2018, 16:11 [ТС] | |
|
New man, это оош. Ваша программа прошла больше всех тестов. Вы лишь запоминали уже сделанные запросы на не измененном массиве, верно?
0
|
|
|
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
|
|
| 04.11.2018, 16:21 | |
|
Cortas, нет.
Я сначала обработал массив, создав массив, индекс которого — число в массиве, а значение — набор точек в основном массиве, где он встречается. Затем я просто проходился по этому массиву, проверяя, входит ли хотя бы одна из позиций каждого числа в диапазон. То есть, сложность каждого запроса O(r-l) (так как в позициях от l до r не больше r-l чисел, проверка наличия цифры произведётся максимум r-l раз. Проверка наличия цифры в диапазоне в среднем за константу, в худшем случае за O(logN)) Общая сложность моего решения O(среднее(r-l)*k) — где n — длина базового массива, k — количество команд. Вариант с твоими сортировками: O(n) — копирование, O(nlogn) — сортировка, O(n) проверка. Итого O(n*k*logN).
0
|
|
|
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
|
|
| 04.11.2018, 16:32 [ТС] | |
|
New man, ясно, но это все ещё не достаточно быстро, хоть и максимальное время, за исключением того случая, когда оно превысило 6.5 сек, равно 3.418 сек.
Кстати, а разве у вас обработанный массив не массив массивов, раз у вас набор точек. Ведь в таком случае, вы должны были пройтись по диапазону r - l + спуститься (в худшем случае) до конца set'а или я что-то путаю?
0
|
|
|
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
|
|
| 04.11.2018, 16:34 | |
|
Cortas, Вас уже не однократно просили дать ссылку на тесты. Почему вы упорно игнорируете эти вопросы? Вам тяжело дать ссылку или ее не существует?
0
|
|
|
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
|
|
| 04.11.2018, 16:38 [ТС] | |
|
Manowar, я не игнорирую, я сказал, что это ООШ - открытая олимпиада школьников, прямую ссылку на тесты я дать не могу, т.к. для этого нужен аккаунт.
0
|
|
|
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
|
|
| 04.11.2018, 16:44 | |
|
Т.е. я не могу зарегиться и выйти на это задание?
0
|
|
|
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
|
|
| 04.11.2018, 16:45 [ТС] | |
|
Manowar, в смысле, кто вам мешает это сделать?
0
|
|
| 04.11.2018, 16:45 | |
|
Найти минимальное из средних арифметических 3 массивов.
Из средних значений двух массивов найти минимальное Вычисление средних значений среди отрицательных чисел массивов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|