2017-02-09 12 views
-1

私は数学的な問題を抱えています。たとえば、ベクトルのいくつかの要素の合計を効率的に求める方法があります。ベクトル上の2つの要素の合計を効率的に計算する方法

たとえば、n個の要素(n = 100000000、nはランダムな実数)を持つベクトル(v)を持ち、v(10)とv(100000) v(8)およびv(100)。実際には、(A < B)を用いて2つの要素AとBの間の要素の合計を効率的に計算したいと考えています。

私は直接コードを使って答えを探しているわけではありません。私はこの問題を理解するために数学的な説明を探しています。これは確かにベクトル効率的な微積分の基本概念です。

+0

「どのようにベクトルを表現するのですか?」という質問には、これを行うライブラリが多数あります。 – chepner

答えて

0

を溶液が最初の新しいベクトル(W)をで算出するありますv(1)とv(1000)の和を求めたい場合、答えはw(1000)で、v(10)とv(1000)の和が必要な場合は、答えはw(1000)-w(10-1)になります。唯一の低い計算は累積された合計です。

-1

メモ化テーブルを構築することで最も簡単な方法:

def sums(L): 
    answer = {i:{j:0 for j in range(i,len(L))} for i in range(len(L))} 
    for i,num in enumerate(L): 
     answer[i][i] = L[i] 
     for j in range(i+1, len(L)): 
      answer[i][j] = answer[i][j-1] + L[j] 

    return answer 

そして次のようにテーブルを照会:

table = sums(my_vector) 
print(table[8][100]) 
+0

OP状態:私は直接コードを使って答えを探しているわけではありません。私はこの問題を理解するために数学的な説明を探しています。これは確かにベクトル効率的な微積分の基本概念です。 – Varaquilex

+0

しかし、あなたは巨大なデータを持っていれば、memoisationテーブルを構築するのは巨大でしょうか? 私はちょうど友人とこれについて考える: 私は、私たちが合計したい要素の数についてのサイズで単一の垂直方向のベクトル(u)を構築する場合? Aは必要最小限の要素で、Bはmax(8と100は前と同じ値をとる)です。したがって、u = 0(B-A + 1,1)+1; そして、合計は次のようになります。v(1、a:b)* u は、データを記憶せずにこの計算を行う効率的な方法ですか? –

+0

@LionelMattéo:テーブルのサイズは、ベクトルのn個の要素に対してn^2として増加します。小さな事例を投稿(オリジナルの投稿を編集)できるのであれば、これをもう一度見てください。 – inspectorG4dget

関連する問題