|
29 / 27 / 2
Регистрация: 17.07.2019
Сообщений: 38
|
||||||
Как ускорить программу21.08.2019, 16:37. Показов 3175. Ответов 15
Метки нет (Все метки)
Вот задача:
Требуется определить в заданном массиве количество элементов, равных искомому числу. Входные данные В первой строке вводится одно натуральное число N, не превосходящее 10^5: количество чисел в массиве. Во второй строке вводятся N натуральных чисел, не превосходящих 10^9, каждое следующее не меньше предыдущего. В третьей строке вводится количество искомых чисел M - натуральное число, не превосходящее 10^6. В четвертой строке вводится M натуральных чисел, не превосходящих 10^9. Выходные данные Для каждого запроса выведите в отдельной строке одно число: количество элементов массива, равных числу-запросу. Элементы массива нумеруются с единицы. Если в массиве нет такого числа, выведите 0. Время: 6 сек Память: 256 мегабайт Я сделал так:
0
|
||||||
| 21.08.2019, 16:37 | |
|
Ответы с готовыми решениями:
15
Как ускорить программу? Как ускорить программу Как ускорить программу |
|
5037 / 1064 / 149
Регистрация: 29.01.2013
Сообщений: 6,214
|
|
| 21.08.2019, 17:07 | |
|
Антон Ф, Можно попробовать стандартные способы ускорения, например, PyPy.
0
|
|
|
5223 / 3470 / 1173
Регистрация: 21.03.2016
Сообщений: 8,297
|
|||||||
| 21.08.2019, 20:12 | |||||||
|
Антон Фмне кажется не зря в задании сказано
0
|
|||||||
|
Просто Лис
|
|||||||
| 23.08.2019, 13:56 | |||||||
|
Можно попробовать так:
0
|
|||||||
|
|
|
| 23.08.2019, 17:24 | |
|
Если тупой перебор через count - вычислительная сложность O(N).
Если бинарный поиск - то M*O(log(N)). Отсюда вывод - берём N и M, считаем, что меньше, и делаем так ![]() Добавлено через 1 минуту Хотя есть и третий способ. Упорядочить массив-запрос, и идти по нему. Одновременно будет двигаться указатель по a.
1
|
|
|
Супер-модератор
|
||||||
| 24.08.2019, 11:19 | ||||||
0
|
||||||
|
207 / 58 / 19
Регистрация: 18.02.2018
Сообщений: 256
|
|
| 26.08.2019, 00:14 | |
|
Во-первых, кинь все в def (если пользуешься сишной реализацией), ибо локальные переменные эффективнее глобальных.
Юзай xrange вместо range, если питон 2.x
0
|
|
|
8 / 12 / 2
Регистрация: 08.08.2019
Сообщений: 63
|
|
| 27.08.2019, 16:56 | |
|
Catstail, зачем так усложнять себе жизнь? bisect работает идеально в питоне.
Нашел левую границу, правую границу, а дальше все легко - вычел из правой левую и готово.
0
|
|
|
|
|
| 27.08.2019, 18:39 | |
|
Catstail, позвольте не согласиться. Использовать готовые библиотеки - это гуд, а писать то, что уже написано ранее - это переизобретать велосипед.
Другой вопрос, что в данной задаче bisect не поможет. (hacthies)
0
|
|
|
Супер-модератор
|
|
| 27.08.2019, 18:46 | |
|
Про велосипеды я слышу регулярно. Но совершенно очевидно, что тот, кто боится изобрести велосипед, вообще ничего не изобретет. Умение программировать - это знание алгоритмов и умение их реализовать. А этот навык достигается только изобретением велосипедов
1
|
|
|
|
|
| 27.08.2019, 19:18 | |
|
Catstail, не думаю.
Это, скорее, относится, к олимпиадному программированию, то есть из спортивного интереса. В продакшне же каждый велосипед - потеря рабочего времени, и это также очевидно. Поэтому и ценится умение использовать готовое, то есть знание библиотек. "Умение программировать" в продакшне также включает в себя другие навыки, относящиеся к работе в команде. Очевидно, что личный велописед будет хуже стыковаться с другими модулями, написаными другими людьми, плюс это всё ещё и надо будет читать. Вот представьте себе, сидит такой "наследник", втыкает в легаси и вдруг его осеняет - "!"№;;%:?, это ж бинарный поиск!" А время уже потеряно.
0
|
|
|
Супер-модератор
|
|
| 27.08.2019, 20:47 | |
|
dondublon, да пожалуйста. Все зависит от целей подготовки специалиста. Если готовится аккуратный исполнитель, то он, разумеется, должен быть в меру туп. Но если человек хочет решать самостоятельные творческие задачи, то ему нужна не столько аккуратность, сколько знание алгоритмов и структур данных. А познается все это, извините, на "велосипедах".
1
|
|
|
|
|||
| 28.08.2019, 12:26 | |||
|
Хех... Сам себя не похвалишь - никто не похвалит
![]() Я говорил про человека, который умеет работать в команде, с другими людьми. Сюда входит не только отказ от велосипедов, но и, к примеру, знание ООП и умение его применять. Это как частный случай задачи по организации кода вообще. Хорошо разбить код на объекты - с этой задачей тупой не справится, тут думать надо. Тоже творческая задача. По теме: https://en.wikipedia.org/wiki/... _the_small Работать с людьми вообще сложнее, чем с техникой и программами. Эта область куда хуже формализуется. Так что тут простор для творчества - ого-го. Знание алгоритмов, тут, безусловно, в плюс - но знание, а не переписывание их при каждом удобном случае. Архитекторы не занимаются технологией изготовления кирпичей и бетонных плит (в массе своей).
0
|
|||
|
Супер-модератор
|
|||
| 28.08.2019, 18:02 | |||
|
dondublon, "в меру туп" - это метафора. В промышленной разработке (тем более - при командной работе) безусловно нужно использовать библиотеки.
Посмотрим теперь на ситуацию глазами преподавателя: При моем подходе тот, кто учится, не только решит задачу, но и поймет, почему примененный алгоритм позволяет ускорить решение. И реализацию свою слепит худо-бедно. При подходе моих оппонентов, тот, кто учится, поймет, что binsearch работает быстрее. Почему? На этот вопрос он ответить не сумеет.
0
|
|||
| 28.08.2019, 18:02 | |
|
Помогаю со студенческими работами здесь
16
Как ускорить программу?
Как ускорить программу? Как ускорить программу Как можно ускорить программу? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|