Найти - Пользователи
Полная версия: Как еще можно оптимизировать следующий код?
Начало » Python для экспертов » Как еще можно оптимизировать следующий код?
1 2 3 4 5 6 7 8 9
shiza
izekia
прикольно, пока писал, родилась идея, там в треугольнике числа < 100
я могу просто делать индекс на диапазоне, вместо инта :cool:

пошел пробовать
Я правда не знаю алгоритма, но обычно такая штука здорово выручает.
izekia
shiza
izekia
прикольно, пока писал, родилась идея, там в треугольнике числа < 100
я могу просто делать индекс на диапазоне, вместо инта :cool:

пошел пробовать
Я правда не знаю алгоритма, но обычно такая штука здорово выручает.
ага, я отпишусь по результату, а ведь казалось уже оптимизировать негде :)
izekia
сложил все в словарь, почти в 1.8 раза выигрыш по времени
при использовании nums в сравнении с int(x)
где-то я сегодня читал про оптимизированный словарь который в 2.5 появился
izekia
точнее в 2.4 появился defaultdict
-10% еще
izekia
черт, на сфере нет модуля collections
izekia
izekia
черт, на сфере нет модуля collections
поторопился, все там есть
спасибо всем, кто помогал в этой теме
окончательный мой результат: 1.26

я первый среди трех питонистов на этой задаче :cool:
crchemist
izekia
izekia
черт, на сфере нет модуля collections
поторопился, все там есть
спасибо всем, кто помогал в этой теме
окончательный мой результат: 1.26

я первый среди трех питонистов на этой задаче :cool:
Вітаю! Покажи код
izekia
Окончательный код:
import psyco
psyco.full()
from collections import defaultdict

def main():
nums = defaultdict(int)
for x in range(100):
nums[str(x)] = x
casesCount=input()
for caseNum in range(casesCount):
rowCount=input()
triangle=[]
for i in range(rowCount):
triangle+=[[nums[x] for x in raw_input().split()]]
for i in range(rowCount - 2, -1, -1):
for j in range(i+1):
triangle[i][j]+= triangle[i+1][j] > triangle[i+1][j+1] and triangle[i+1][j] or triangle[i+1][j+1]
print rowCount == 0 and '0' or triangle[0][0]

main()
izekia
там количество строк может быть равным нулю, как я понял
ты, кстати, не мог бы по русски писать, я не понимаю украинского

и используй словарь из collections, он реально даст прирост производительности

а так идея алгоритма прикольная :)
правда сравнений больше получается и сложений тоже
надо сравнить
crchemist
try faster ;) 1.02
import psyco
psyco.full()
import sys

rinput = sys.stdin.readline
routput = sys.stdout.write

def main():
cache = dict([(str(i), i) for i in range(100)])
for i in range(input()):
num_of_rows = input()
prev_line = [cache[rinput().rstrip()]]
last_line = []
for j in range(1, num_of_rows):
last_line = [cache[x] for x in rinput().rstrip().split()]
for z in range(len(last_line)):
if z:
x = z if z < len(prev_line) else z - 1
plx = prev_line[x]
last_line[z] += prev_line[z - 1] if prev_line[z - 1] >= plx else plx
else:
last_line[0] += prev_line[0]
prev_line = last_line

routput(str(max(last_line or prev_line)) + '\n')
main()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB