Ускорить программу на Python18.11.2017, 10:57. Показов 3835. Ответов 30
Метки нет (Все метки)
Есть простенькая задачка. Я её решил на C++, но на Python не получается, потому что язык более медленный, и не удаётся уложиться в 1 секунду. Но я знаю, что на Python также можно решить эту задачу. Но как?
1. Задача Кликните здесь для просмотра всего текста
Простые числа (Время: 1 сек. Память: 16 Мб Сложность: 25%) Необходимо вывести все простые числа от M до N включительно. Входные данные Входной файл INPUT.TXT содержит два натуральных числа M и N, разделенных пробелом (2 ≤ M ≤ N ≤ 300 000) Выходные данные В выходной файл OUTPUT.TXT выведите все простые числа от M до N в порядке возрастания, по одному в строке. Если таковых чисел нет, то следует вывести «Absent». Пример: INPUT.TXT 2 5 OUTPUT.TXT 2 3 5 INPUT.TXT 4 4 OUTPUT.TXT Absent 2. Решение на C++ (решение правильное) Кликните здесь для просмотра всего текста
3. Решение на Python (не укладываюсь в 1 секунду) Кликните здесь для просмотра всего текста
0
|
|||||||||||
| 18.11.2017, 10:57 | |
|
Ответы с готовыми решениями:
30
Ускорить программу Python
Как ускорить ввод данных в Python |
|
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
|
||||||
| 18.11.2017, 22:54 | ||||||
|
ну это закон сохранения энергии чем больше скорость, тем больше расход памяти
попробуй так
1
|
||||||
|
641 / 481 / 179
Регистрация: 28.05.2012
Сообщений: 1,419
|
||||||
| 19.11.2017, 08:24 | ||||||
|
jvf, Ваш вариант можно и так сократить.
На этом сервисе можно обойтись и без работы с файлами.
1
|
||||||
| 19.11.2017, 12:55 [ТС] | ||||||
|
Там на сервере я решил новую задачу. Но только на C++, на Python решение не проходит. Задача:
Кликните здесь для просмотра всего текста
Простые числа (Время: 0,5 сек. Память: 16 Мб Сложность: 28%) Необходимо вывести все простые числа от M до N включительно. Входные данные Входной файл INPUT.TXT содержит два натуральных числа M и N, разделенных пробелом (2 ≤ M ≤ N ≤ (10 в 6 степени)) Выходные данные В выходной файл OUTPUT.TXT выведите все простые числа от M до N в порядке возрастания, по одному в строке. Если таковых чисел нет, то следует вывести «Absent». Пример первый: INPUT.TXT 2 5 OUTPUT.TXT 2 3 5 Пример второй: INPUT.TXT 4 4 OUTPUT.TXT Absent Вот решение на C++, оно прошло, мне его засчитали, но мне интересно, а можно ли решить то же самое на Python. Кликните здесь для просмотра всего текста
#include <fstream> #include <iostream> #include <math.h> #include <stdio.h> #include <stdlib.h> using namespace std; int main(int argc, char* argv[]) { setlocale(LC_ALL, "rus"); int m,n; ifstream fin("INPUT.TXT"); fin >> m; fin >> n; fin.close(); cout <<"m="<<m<<" n="<<n<<endl; ofstream fout("OUTPUT.TXT"); n+=1; bool a[n]; for(int i = 0; i < n; i++){ a[i]=true; } for ( int i=2;i<sqrt(n)+1;i++){ if (a[i] == true){ for (int j=i*2;j<n;j+=i){ a[j] = false; } } } bool found = false; for (int i=m;i<n;i++){ if (a[i] == 1){ found = true; fout << i<<endl; //cout<<i<<" "; } } if (found == false){ fout<<"Absent"; } fout.close(); return 0; } Обсуждавшееся выше решение уже к этой задаче не подходит. Оно оказывается слишком медленным. Использование множеств тоже не подходит, потому что лимит памяти. Это решение уже не подходит к новой задаче, потому что там лимит в 0,5 секунды, а чисел стало до 1 000 000
0
|
||||||
|
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
|
|||||||||||
| 19.11.2017, 13:20 | |||||||||||
|
ну можно так:
1
|
|||||||||||
| 19.11.2017, 13:32 [ТС] | ||||||
|
Вот улучшенный алгоритм, который проходит и более сложную проверку:
время -- 0,47 секунды на 1 000 000 чисел.
Ранее мы обсуждали более простую задачу. Там рекород составил 0,312 секунды. Новый алгоритм ускоряют задачу в три раза без большого лимита памяти! Итог -- трёхкратное ускорение. Результат -- 0,187 секунды!!! Это трёхкратное ускорение по сравнению с прошлым лучшим результатам (если укладываемся в ограничение по памяти)
0
|
||||||
|
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
|
|
| 19.11.2017, 14:38 | |
|
это вариант решета Сундарама
я бы написал на Си и сделал обертку для питона http://vscode.ru/prog-lessons/... na-si.html
1
|
|
|
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
|
||||||
| 19.11.2017, 18:53 | ||||||
|
что покажет на вашем тесте этот код?
1
|
||||||
| 19.11.2017, 19:02 [ТС] | |
|
Есть два теста: более простой (n<=300000 и время ограничено 1 секундой) и более сложный (n<=1000000 и время ограничено 0,5 секундами).
Ваше решение не проходит более простой тест на сервере, заваливается с результатом в 1,875 секунды. То есть для прохождения первого теста вам нужно ускорить вашу программу на 0,875 секунды.
0
|
|
|
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
|
|
| 19.11.2017, 19:06 | |
|
понятно хотя на другом сайте выдало такие результаты
0
|
|
| 19.11.2017, 19:10 [ТС] | |
|
Вот скриншота вашего результата на более простом тесте на другом сервере:
Ваш результат самый верхний. Он выделен красным, потому что не прошёл проверку по времени. Там написано Time limit exceeded, тест 15, время 1,1875
0
|
|
| 19.11.2017, 19:14 [ТС] | |
|
На скриншоте видно, что пока лучший результат из моих тестируемых -- 0,171 секунда.
0
|
|
| 19.11.2017, 19:14 | |
|
Помогаю со студенческими работами здесь
31
Способы ускорить выполнение программы Python Ускорить программу на Python Ускорить код на Python Как ускорить выполнение программы на Python?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|