2

これはプログラミングの質問よりも複雑さの理論の質問であることを私は知っています。ここに間違ったことを書いていないことを願っています。間違った場所である場合はお詫びしますが、誰かが答えを持っていることを願っています。そして、それは複雑性理論の質問であることによって、どういうわけかプログラムミンに関連しています。

私は線形反復シーケンスを研究していますが、シーケンスのn番目の値を取得するには、コンパニオンマトリックスの累乗を取得する必要があることが表示されたので、累乗を取得するための既知のアルゴリズムがあるかどうか疑問に思いました。この種のマトリックスの高速な方法で..

コーディングの例を示すことはできませんが、もう少し説明してみましょう。

k次の同次線形反復シーケンス:
s(n + k)= a(k-1)s(n + k-1)+ a(k-2)s(n + k-2)+ .. .. + a(0)
for n = 0,1、..ここで、s(i)はシーケンスのi番目の値であり、a(i)は代数フィールドの係数です。

Aは、次の場合の上記のシーケンスのコンパニオン行列です:
(0 0 0 0 ... 0 a(0))
(1 0 0 0 ... 0 a(1))
(0 1 0 0 ... 0 a (2))
(.. .. .. .. .. .. .. .. ..)
(0 0 0 0 ... 1 a(k-1))
さらに、理論では、シーケンスは次のとおりです
。s(n)= s(0)A ^ n for n = 0,1、..
これで、助けてくれてありがとう。

4

2 に答える 2

2

行列の累乗をすばやく見つけるための通常の戦略は、行列を対角化することです (固有ベクトル分解を実行します)。

A = P -1 DP

ここで、D は対角行列です。次に、次の計算により、A を n 乗することができます。

A n = P -1 D n P

ここで、D nは対角行列であるため計算が高速です。したがって、各要素のべき乗を個別に取得するだけです。

ただし、すべての行列が対角化できるわけではありません。コンパニオン行列が対角化できるかどうかはわかりません。いずれにせよ、このウィキペディアの記事が役立つ場合があります。

于 2009-04-07T14:48:38.830 に答える
1

行列積を使用してn、行列の th 乗を計算できます。MO(log n)

  • ならn=0、返すI
  • 偶数の場合n、計算N=Mn/2して返すN*N
  • nが奇数の場合、計算N=Mn-1して返しますM*N
于 2009-04-26T12:27:02.747 に答える