Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > как увеличить скорость кода и уменьшить выделение


Автор: Andrei3423421 11.9.2018, 20:24
как увеличить скорость кода и уменьшить выделение памяти?

Код

2# кол списков
3 99 99 99 99 # первое число кол элементов  в списке -1
2 33 33 33

import math



log_2 = math.log(2) # для оптимизации вывел сюда
h = {}
i = 0
for _ in range(int(input())): 
    s = input()[2:]
    s = s.split()
    if '1' in s: # удаляю первое число и елиницы такой список 2 2 1 99 станет 2 1
        s = s[:s.index('1') + 1]
    s = list(map(float, s)) # для ускорения
    if len(s) == 1: # три случая если длина 1
        acc = -9
        s = []
    elif len(s) == 2: # если длина 2
        v1, v2 = s
        acc = math.log(v2) / log_2+math.log(math.log(v1) / log_2) 
        s = []
    else: # общий случай
        *s, v1, v2, v3 = s
        acc = v3 * math.log(v2) / log_2 + math.log(math.log(v1) / log_2) 
        for n, it in enumerate(reversed(s)): # если цифр много до раскрываю
            if acc > 190:
                break
            acc = (2 ** acc) + math.log(math.log(float(s[-1])) / log_2) / log_2
            del s[-1]
    acc = round(acc, 10)
    a = [int(item) for item in s]

    a.append(acc)
    a.reverse()
    h[i] = [float(item) for item in a] # заполняю словарь списком
    s = []
    a = []
    # 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)

Автор: Romikgy 11.9.2018, 23:58
код полный ахение... ИМХО
зачем столько логарифмов? 
enumerate(reversed(s)) зачем это делаете . если не используете результат их работы?
Цитата(Andrei3423421 @  11.9.2018,  19:24 Найти цитируемый пост)
sorted_list = sorted(h.items(), key=lambda x: (len(x[1]), x[1])) # сортирую

зачем ?
Цитата(Andrei3423421 @  11.9.2018,  19:24 Найти цитируемый пост)
print(' '.join(str(i + 1) for i, _ in sorted_list)

если выводите только длинны первого элемента?

Автор: Andrei3423421 12.9.2018, 19:21
Код

sorted_list = sorted(h.items(), key=lambda x: (len(x[1]), x[1])) # сортирую
print(' '.join(str(i + 1) for i, _ in sorted_list)


тут сортировка если длина больше то список больше.
если равны то сравниваю по элементам и вывожу в порядке возрастания,логарифмами сокращаю числа
пример 
3
3 2 99 99 99
3 3 99 99 99

Автор: Romikgy 12.9.2018, 19:30
Цитата(Andrei3423421 @  12.9.2018,  18:21 Найти цитируемый пост)
логарифмами сокращаю числа

зачем? и почему по основанию 2 ?

Автор: _zorn_ 14.9.2018, 18:23
Цитата
как увеличить скорость кода и уменьшить выделение

Купи нитру и прокладки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)