2017-12-15 11 views
1

配列として表される要素のリストがあります。与えられた区間(l、r)に対して、 '1'がそれらの要素に加えられるべきである。特定の間隔の要素を最速で1ずつ増やす

for(i=l;i<=r;i++) 
    A[i]++; 

正常に動作します。しかし、私は多数の階乗の和を求めるプログラムをやっています。 階乗アルゴリズムはいくらか高い時間の複雑さを要するので、前に階乗を行うことが必要な上記ステップの時間複雑さを減らす必要があります。

+1

私はそれを(マルチスレッドなしで)改善することはできないと思います。たぶんあなたはfactorials sumアルゴリズムの改良について考えるべきです –

答えて

2

一度に2つの要素の配列値をインクリメントすることによって、時間の複雑さを減らすことができます。

私は以下のコードが時間複雑度をO(n)からO(n/2)に減らすと思います。

for(i=l; i<=r; i++) 
{ 
if(i!=r) 
A[r]++; 
A[i]++; 
r--; 
} 

説明:

インクリメント開始インデックスと終了インデックスの両方からの配列要素値。

両方のインデックスが同じ場合、インデックスは中間の要素を指します。 したがって、1つの要素(中間要素)のみをインクリメントします。

関連する問題