3

コレクション内の値が異なると、このアルゴリズム(pseudeocode)は終了しますか?このアルゴリズムは終了しますか?

while (curElement != average(allElements)) 
{ 
    curElement = average(allElements); 
    nextElement(); 
} 

私は、配列の最後にいると最初からやり直すことを前提にしています。

+2

nextElement()は何を行い、allElements()コレクション定数ですか? –

+0

平均(allElements)の計算方法 –

+0

これは、そのコレクションの値によって異なります。 average(allElements)は小数値または絶対値を返しますか? –

答えて

5

これは擬似コードであるので、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)

だから、数字が収束しかし、彼らは決して等しくはありません。

しかし、これを実際にコンピュータに実装する場合、ハードウェアの制限のために等しくなります。すべての数値が限られたビット数で表現できるわけではありません。

+0

実数実装を永遠に実行できる任意の精度実数実装が存在します。 – bdares

+0

@bdares私はそれを疑う。彼らはまだメモリに数値を格納していますが、それが得られるほど大きくなるわけではありません。 –

+0

@LuchianGrigore:ディスク/リモートクラスタに番号を格納し、その場で展開することができます。理論的には、それを行うことができます。 – amit

2

です。

エレメントに離散値がある場合、ほとんどの場合、数回実行すると同じ値になります。

エレメントに浮動小数点数や倍精度などの限定された精度値が設定されている場合は、時間はかかりますが、時間は限られます。

要素に任意の精度値が設定されていると、アルゴリズムが終了しないことがあります。 (積分のすべての要素を数えて紙に書いた図形に加えると、無限の時間と無限大の紙が必要になり、この類推では無限の忍耐が必要です)

ありますあなたのコードと以下の違いはほとんどありません。

var i = 1; 
while (i != 0) 
    i = i/2; 

これまでに終了しますか?それは実際に実装に依存します。

関連する問題