|
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
|
|
Оптимальная сортировка для средних массивов03.11.2018, 15:57. Показов 2948. Ответов 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 массивов.
Из средних значений двух массивов найти минимальное Вычисление средних значений среди отрицательных чисел массивов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|