Уведомления

Группа в Telegram: @pythonsu

#1 Июль 22, 2008 20:39:31

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Как еще можно оптимизировать следующий код?

izekia
прикольно, пока писал, родилась идея, там в треугольнике числа < 100
я могу просто делать индекс на диапазоне, вместо инта :cool:

пошел пробовать
Я правда не знаю алгоритма, но обычно такая штука здорово выручает.



Офлайн

#2 Июль 22, 2008 20:47:20

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Как еще можно оптимизировать следующий код?

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

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



Офлайн

#3 Июль 22, 2008 21:04:53

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Как еще можно оптимизировать следующий код?

сложил все в словарь, почти в 1.8 раза выигрыш по времени
при использовании nums в сравнении с int(x)
где-то я сегодня читал про оптимизированный словарь который в 2.5 появился



Офлайн

#4 Июль 22, 2008 21:12:21

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Как еще можно оптимизировать следующий код?

точнее в 2.4 появился defaultdict
-10% еще



Офлайн

#5 Июль 22, 2008 21:18:19

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Как еще можно оптимизировать следующий код?

черт, на сфере нет модуля collections



Офлайн

#6 Июль 22, 2008 21:26:32

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Как еще можно оптимизировать следующий код?

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

я первый среди трех питонистов на этой задаче :cool:



Офлайн

#7 Июль 22, 2008 22:07:42

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Как еще можно оптимизировать следующий код?

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

я первый среди трех питонистов на этой задаче :cool:
Вітаю! Покажи код



Офлайн

#8 Июль 22, 2008 22:08:54

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Как еще можно оптимизировать следующий код?

Окончательный код:

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()



Офлайн

#9 Июль 23, 2008 01:18:18

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Как еще можно оптимизировать следующий код?

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

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

а так идея алгоритма прикольная :)
правда сравнений больше получается и сложений тоже
надо сравнить



Отредактировано (Июль 23, 2008 01:35:47)

Офлайн

#10 Июль 23, 2008 01:45:43

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Как еще можно оптимизировать следующий код?

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()



Отредактировано (Июль 23, 2008 01:51:40)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version