по моему опыту это сокращало время на порядки. Текущий размер массива - одна переменная.
Насчёт одной переменной: тут дело не в оптимизации счёта, а в том, что каждая лишняя переменная загромождает код. И если время счёта не слишком критично, то компактность кода оказывается гораздо важнее. Насчёт времени -- я тут провёл простенький эксперимент: многократная вставка случайного числа в середину текущего массива (заодно и собственно Матлаб установил, а то всё руки не доходили). Как и ожидалось, раздвижение "физического" массива заметно тормозит счёт; заметно, но -- не фатально. Вот этот код:
x=0:200000;
n=3;
for i=1:100000
x(round(n/2)+1:n+1)=x(round(n/2):n);
x(round(n/2))=rand;
n=n+1;
end
-- выполнился секунд за 15-16. А этот:
x=0:2;
for i=1:100000
x=[x(1:round(length(x)/2)-1), rand, x(round(length(x)/2):length(x))];
end
-- секунд за 39-40. В общем, замедление раза в два с половиной; не так уж и смертельно, и уж во всяком случае не на порядки.
-- Чт апр 10, 2014 17:34:28 --Пардон, я маленько зазевался. Второй код -- не полный аналог первого (это потому, что я первый сочинял после второго). Полным аналогом будет такой:
x=0:2;
for i=1:100000
x(round(length(x)/2)+1:length(x)+1)=x(round(length(x)/2):length(x));
x(round(length(x)/2))=rand;
end
И он выполняется за примерно 32 секунды. Ну тем более.