powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как уменьшить выделение памяти данной программы и ускорить её?
6 сообщений из 6, страница 1 из 1
Как уменьшить выделение памяти данной программы и ускорить её?
    #39700197
Aleksei2213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
программа принимает списки подставляет их под формулы и сортирует.
2# сколько списков
2 9 9 9 # первое число в этом списке кол элементов нём -1
2 8 8 8


Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
import math 
log_2 = math.log(2) #сюда вывел логорифм для оптимизации
h = {}
i = 0
acc = 0
for _ in range(int(input())): # считываем кол списков
    s = input()[2:]
    s = s.split()
    if '1' in s: # удаляю единицы из списка такие списки 9 1 9 9  становятся такими 9 1
        s = s[:s.index('1') + 1]
    if len(s) == 1: # если длина его 1
        acc = -9
        del s[-1]
    elif len(s) == 2: # если длина его 2
        acc = math.log(float(s[-1])) 
        del s[-1]
        acc += math.log(math.log(float(s[-1])) / log_2) 
        del s[-1]
    else:
        acc = float(s[-1])
        del s[-1]
        acc *= math.log(float(s[-1])) 
        del s[-1]
        acc += math.log(math.log(float(s[-1])) / log_2) / log_2
        del s[-1]
        while len(s) != 0 and acc < 500:  # если он слишком большой
            acc = (2 ** acc) + (math.log(float(s[-1])) / log_2) / log_2
            del s[-1]
 
    h[i] = [int(item) for item in s]
    s.clear()
    acc = round(acc, 10) # округляю последние число
    h[i].append(acc)
    h[i].reverse()
    # print(h[i])
    i += 1
 
sorted_list = sorted(h.items(), key=lambda x: (len(x[1]), x[1])) # сортирую списки
print(' '.join(str(i + 1) for i, _ in sorted_list))
...
Рейтинг: 0 / 0
Как уменьшить выделение памяти данной программы и ускорить её?
    #39700281
Лысый дядька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как уменьшить выделение памяти данной программы и ускорить её?


Для начала, я бы посоветовал определить, какая же конкретно часть программы занимает больше всего времени. Хотя бы так
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
total_t1 = 0

.....
t = time.time()
acc = math.log(float(s[-1])) 
del s[-1]
acc += math.log(math.log(float(s[-1])) / log_2) 
del s[-1]
total_t1 += time.time() - t
......


без этого простого эксперимента трудно понять, где именно затуп, он может быть очень много где в вашем коде. Например, вас не смущает, что вы дважды подряд ищете в списке единицу?
Код: python
1.
2.
3.
    
if '1' in s: # тут итерация по списку (в пессимистичном варианте по всему)
      s = s[:s.index('1') + 1] # тут еще одна итерация по списку


Или, вот зачем вы делаете s.clear()?
Почему вы думаете, что del s[-1] - бесплатная операция? Удаление из списка дает такую же сложность, как добавление в него.

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
l = range(1000)


def test_append():
    for i in range(1000):
        l.append(i)

def test_del():
    for _ in range(len(l)):
        del l[-1]


if __name__ == '__main__':
    import timeit
    print(timeit.timeit("test_append()", setup="from __main__ import test_append", number=10000))
    print(timeit.timeit("test_del()", setup="from __main__ import test_del", number=10000))



Много памяти расходуется? Ну а на кой черт вы копируете список в словарь? Чем вас не устраивало присваивание указателя? Зачем создаете новый список функцией sorted вместо использования одноименного метода? Зачем вам тут вообще нужен словарь, какое свойство словаря вы используете?
...
Рейтинг: 0 / 0
Как уменьшить выделение памяти данной программы и ускорить её?
    #39700631
Aleksei2213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
использую словарь так как мне нужно потом их сортировать а списки я не могу так сортировать,del[-1] может можно её как то оптимизировать?
...
Рейтинг: 0 / 0
Как уменьшить выделение памяти данной программы и ускорить её?
    #39700649
Aleksei2213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не устраивало присваивание указателя?

а как это сделать?
...
Рейтинг: 0 / 0
Как уменьшить выделение памяти данной программы и ускорить её?
    #39700729
Лысый дядька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksei2213использую словарь так как мне нужно потом их сортировать а списки я не могу так сортировать,del[-1] может можно её как то оптимизировать?

Вы понимаете головой, что когда вы делаете h.items() вы получаете список и сортируете вообще-то его, а не словарь, который сортировать в общем случае бессмысленно?
...
Рейтинг: 0 / 0
Как уменьшить выделение памяти данной программы и ускорить её?
    #39700730
Лысый дядька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksei2213del[-1] может можно её как то оптимизировать

Зачем это вообще делать?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как уменьшить выделение памяти данной программы и ускорить её?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]