Для следующего кода:Изменение сложности от O (N) к O (1)
s = 0 ;
for(i=m ; i<=(2*n-1) ; i+=m) {
if(i<=n+1){
s+=(i-1)/2 ;
}
else{
s+=(2*n-i+1)/2 ;
}
}
Я хочу изменить сложность кода из O(n)
в O(1)
. Поэтому я хотел исключить цикл for. Но так как сумма s
хранит такие значения, как (i-1)/2
или (2*n-i+1)/2
, поэтому устранение цикла включает утомительный подсчет значения пола каждого (i-1)/2
или (2*n-i+1)/2
. Мне стало очень трудно это сделать, поскольку я мог бы получить неправильную формулу в суммах этажей. Могу ли вы, пожалуйста, помогите мне в изменении сложности от O(n)
до O(1)
. Или, пожалуйста, помогите мне с этими суммами. Есть ли другой способ уменьшить сложность? Если да ... то как?
вы можете сказать, допустили ли вы ошибку, проверив результаты. –
Какую технику вы используете для устранения цикла? –
Я не уверен, почему это так сильно изменилось. Это кажется очень сложной проблемой. –