Ускорить программу на Python18.11.2017, 10:57. Показов 3867. Ответов 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 |
|
964 / 719 / 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
|
||||||
|
964 / 719 / 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
|
||||||
|
964 / 719 / 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 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|