Глядя на следующее, я бы предположил, что сложность по времени составляет O (T), где T - это количество строк в data
, но из моего опыта с этим кодом это намного длиннее ...
data = S(i).POS; %# 2 or 3 column vector, with T rows.
nData = size(data,1);
numberOfDeltaT = floor(nData/4);
msd = zeros(numberOfDeltaT,1);
for dt = 1:numberOfDeltaT
deltaCoords = data(1+dt:end,:) - data(1:end-dt,:);
squaredDisplacement = sum(deltaCoords.^2,2); %# dx^2+dy^2+dz^2
msd(dt) = mean(squaredDisplacement);
end
В качестве продолжения, распараллеливание этого (путем простого использования parfor
) сохранит сложность такой же? Я бы предположил, что это зависит от количества потоков, но для чего-то вроде 2-4 потоков это не повлияет на Big-O, даже если фактическое время выполнения будет короче?
Это в MATLAB, кстати.