Честно говоря, нет правильного ответа, поскольку это зависит от того, чем вы готовы пожертвовать, а также от используемого языка.
В любом случае, основным отличием будет то, что метод функции займет больше времени, чем матричный метод, а матричный метод займет больше места (очевидно?).
Использование времени для экономии памяти, как правило, не очень хорошая идея, поскольку у нас много памяти и гораздо меньше времени.
Я запустил их в Python с
N = 10 и получил Function 0.015623331069946289, Matrix 0.0
N = 100 и получил Function 1.0839078426361084, Matrix 0.8769278526306152
~ В настоящее время работает N = 1000 ~
Что-нибудь большее, и мне придется переключиться на Numpy.
Вот код, который я использовал для определения времени, если кто-то хочет попробовать его.
import time
n = 1000
def f(i, j):
return i+j
A = [[i+j for j in range(n)] for i in range(n)]
B = [i for i in range(n)]
C = [0 for _ in range(n)]
start1 = time.time()
for i in range(n):
for j in range(n):
s = 0
for k in range(n):
s += f(i, k) * B[k]
C[i] = s
end1 = time.time()
start2 = time.time()
for i in range(n):
for j in range(n):
s = 0
for k in range(n):
s += A[i][k]*B[k]
C[i] = s
end2 = time.time()
print("Function-", end1-start1, ", Matrix-", end2-start2)
Конечно, этот подход предполагает, как указано в вашем вопросе, что матрица уже настроена, поскольку для этого тоже требуется значительное время.
РЕДАКТИРОВАТЬ: Ран для N = 1000, получил Function 620.2477366924286, Matrix 478.4342918395996
Как видите, чем больше, тем лучше время, которое вы получите с помощью матричного метода