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

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

26.01.2023, 11:07. Показов 613. Ответов 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
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
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
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru