Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 26.01.2023
Сообщений: 24

Как ускорить код

26.01.2023, 11:07. Показов 591. Ответов 7

Студворк — интернет-сервис помощи студентам
Добрый день!

Написал такой код, который очень медленно работает при строке в 20000 чисел, разделенных пробелом.
Я не представляю как можно ускорить этот код.
Буду признателен за любую помощь.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
import time
 
for i in range(int(sys.stdin.readline())):
 
    sys.stdin.readline()
    lst = [int(i) for i in sys.stdin.readline().split()]
 
    summa = 0
    for item in set(lst):
      cnt = lst.count(item)
      summa += (cnt // 3 * 2 + cnt % 3) * item
    
    print(summa)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.01.2023, 11:07
Ответы с готовыми решениями:

Как ускорить код?
Здравствуйте! Скажите, пожалуйста, как можно ускорить данный код? Не проходит проверку def checkPrime(start, end): numbersList...

Как ускорить код?
https://inf-ege.sdamgia.ru/problem?id=36000 задача с файлом отсюда написал код : with open ('26-2.txt') as f: ...

Как ускорить код? Оптимизировать?
Задача: Определите количество целочисленных точек, находящихся внутри и на границе круга радиуса r с центром в начале координат. ...

7
Эксперт Python
8849 / 4500 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
26.01.2023, 11:17
как можно ускорить этот код
Без полного условия задачи - никак…
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
26.01.2023, 11:23
Цитата Сообщение от gajason Посмотреть сообщение
lst.count(item)
здесь твоя проблема.

Добавлено через 1 минуту
используй
Python
1
from collections import Counter
1
0 / 0 / 0
Регистрация: 26.01.2023
Сообщений: 24
26.01.2023, 11:54  [ТС]
Спасибо за ответ.

Допустим, в одной строке 10000 повторений одного и того же числа, я не хотел 10000 раз бессмысленно по циклу пробежаться. Поэтому и засунул все в SET, чтобы исключить повторения.
Беру из SET значение, проверяю сколько повторений в LIST.

как это "from collections import Counter" поможет - я не понимаю

Добавлено через 4 минуты
Цитата Сообщение от Gdez Посмотреть сообщение
Без полного условия задачи - никак…
Есть строка из (допустим) 20000 чисел, разделенных пробелом.
Надо среди них найти число, количество его повторений, и сделать определенное действие над ними (допустим число * к-во повторений).
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
26.01.2023, 11:55
Лучший ответ Сообщение было отмечено gajason как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from collections import Counter
 
import sys
import time
 
for i in range(int(sys.stdin.readline())):
 
    sys.stdin.readline()
    lst = [int(i) for i in sys.stdin.readline().split()]
 
    summa = 0
    for item, cnt in Counter(lst).items():
        summa += (cnt // 3 * 2 + cnt % 3) * item
 
    print(summa)
2
0 / 0 / 0
Регистрация: 26.01.2023
Сообщений: 24
26.01.2023, 11:58  [ТС]
Цитата Сообщение от eaa Посмотреть сообщение
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from collections import Counter
 
import sys
import time
 
for i in range(int(sys.stdin.readline())):
 
    sys.stdin.readline()
    lst = [int(i) for i in sys.stdin.readline().split()]
 
    summa = 0
    for item, cnt in Counter(lst).items():
        summa += (cnt // 3 * 2 + cnt % 3) * item
 
    print(summa)
Спасибо огромное!

Пока не очень хорошо понимаю логику Python!
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
26.01.2023, 12:15
Лучший ответ Сообщение было отмечено gajason как решение

Решение

Цитата Сообщение от gajason Посмотреть сообщение
lst.count(item)
count работает за O(n). в set тоже n элементов может быть.
в итоге O(n^2) действий - в худшем случае.
т.е для 10000 элементов, программа в худшем случае выполнит порядка 10^10 операций.
а Counter работает за O(n) - примерно (чуть больше на самом деле, но не суть).

Добавлено через 9 минут
gajason, учитывая что python выполняет в 1 секунду около от 10^6 до 10^7 операций.
для выполнения вашей программы понадобится от 10^3 до 10^4 секунд (от 17 до 167 минут).
Если грубо оценить.

Добавлено через 1 минуту
Дело тут не в python. Просто написан неправильный алгоритм для программы.
2
0 / 0 / 0
Регистрация: 26.01.2023
Сообщений: 24
26.01.2023, 12:19  [ТС]
Цитата Сообщение от eaa Посмотреть сообщение
count работает за O(n). в set тоже n элементов может быть.
в итоге O(n^2) действий - в худшем случае.
т.е для 10000 элементов, программа в худшем случае выполнит порядка 10^10 операций.
а Counter работает за O(n) - примерно (чуть больше на самом деле, но не суть).

Добавлено через 9 минут
gajason, учитывая что python выполняет в 1 секунду около от 10^6 до 10^7 операций.
для выполнения вашей программы понадобится от 10^3 до 10^4 секунд (от 17 до 167 минут).
Если грубо оценить.

Добавлено через 1 минуту
Дело тут не в python. Просто написан неправильный алгоритм для программы.
Благодарю!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.01.2023, 12:19
Помогаю со студенческими работами здесь

Ускорить код:
вот задача: На детском утреннике Дед Мороз выдал каждому из n детей по конфете. Однако дети оказались капризными, и каждый из...

Нужно ускорить/опитимизировать код
Задача: La Cucaracha Каждую полночь в квартире ученого Васи начинается ужас. Сотни ..., о нет! ТЫСЯ- ЧИ тараканов вылазят из каждой дырки...

Как ускорить код?
Как ускорить мой код? def Authors(what, lang='en'): with warnings.catch_warnings(): warnings.simplefilter("ignore"); params =...

Как ускорить код
import random import string while True: words = random.randrange(12, 26) result_str =...

Как ускорить код
def a(n): if n==1: return 1 else: return 1+a(n-a(a(n-1))) n=int(input()) print(a(n))


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
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 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru