コレクション内の値が異なると、このアルゴリズム(pseudeocode)は終了しますか?このアルゴリズムは終了しますか?
while (curElement != average(allElements))
{
curElement = average(allElements);
nextElement();
}
私は、配列の最後にいると最初からやり直すことを前提にしています。
コレクション内の値が異なると、このアルゴリズム(pseudeocode)は終了しますか?このアルゴリズムは終了しますか?
while (curElement != average(allElements))
{
curElement = average(allElements);
nextElement();
}
私は、配列の最後にいると最初からやり直すことを前提にしています。
これは擬似コードであるので、2つの要素を持つ単純な例は、プログラムが終了しません場合があることを明らかにします:
x = 0, y = 1;
x y
Step 1: 0.5 1
Step 2: 0.5 0.75
Step 3: 0.635 0.75
//and so one
関わるいくつかの数学では、lim(x-y) = lim(1/2^n)
だから、数字が収束しかし、彼らは決して等しくはありません。
しかし、これを実際にコンピュータに実装する場合、ハードウェアの制限のために等しくなります。すべての数値が限られたビット数で表現できるわけではありません。
です。
エレメントに離散値がある場合、ほとんどの場合、数回実行すると同じ値になります。
エレメントに浮動小数点数や倍精度などの限定された精度値が設定されている場合は、時間はかかりますが、時間は限られます。
要素に任意の精度値が設定されていると、アルゴリズムが終了しないことがあります。 (積分のすべての要素を数えて紙に書いた図形に加えると、無限の時間と無限大の紙が必要になり、この類推では無限の忍耐が必要です)
ありますあなたのコードと以下の違いはほとんどありません。
var i = 1;
while (i != 0)
i = i/2;
これまでに終了しますか?それは実際に実装に依存します。
nextElement()は何を行い、allElements()コレクション定数ですか? –
平均(allElements)の計算方法 –
これは、そのコレクションの値によって異なります。 average(allElements)は小数値または絶対値を返しますか? –