Естественно, самым эффективным будет оптимизация алгоритма, но это индивидуально, посему имеет смысл привести общие советы:
for i in range(n):
for j in range(n):
if (i * j < 200):
p = i * j
можно ускорить как:
for i in range(n):
for j in range(n):
tmp = i * j
if (tmp < 200):
p = tmp
for i in range(n):
for j in range(n):
if (a[i][i]*n != 100 and i < j):
count = 0
можно значительно перестановкой условий, ибо первое затратно на вычисления:
for i in range(n):
for j in range(n):
if (i < j and a[i][i]*n != 100):
count = 0
import profile
profile.run('main()')
Далее поговорим про особенности непосредственно языка, их оптимизацией также можно добиться поразительных результатов.
temp =''
for i in range(n):
for j in range(n):
temp += str(a[i][j])
можно ускорить:
lstr = str
temp =''
for i in range(n):
for j in range(n):
temp += lstr(a[i][j])
xrange вместо range — он более бережно использует память.n = 400
A = init_A(n)
for i in range(n):
A[i][i] *= n * n
B = init_B(n)
printToFile(A,B,n)
работает быстрее, если переписать:
def run():
n = 400
A = init_A(n)
for i in range(n):
A[i][i] *= n * n
B = init_B(n)
printToFile(A,B,n)
run()
p = math.sqrt(x ** 2 + y ** 2)на
p = math.sqrt(x * x + y * y)
for на map() где возможно — она написана на C.for i in xrange(n):
func(a[i])
лучше заменить на:
func(a)
В заключение — оптимизировать стоит уже готовый, отлаженный код. И не забывайте про JIT-компиляцию: отличная реализация для Python — PyPy.
Почитать:
http://wiki.python.org/moin/PythonSpeed
http://wiki.python.org/moin/PythonSpeed/PerformanceTips