2011-10-29 5 views
0

通常、擬似コードにあるアルゴリズムは可能な限り一般的なものです。擬似コードを実装と可能な限り同じように変換する

例は、チェックや境界のケースを簡素化するため、またはループを停止するときに、occusionally -/+無限大が使用されているということです(もちろん簡単です)。例えば

current-sum=enter image description here

total-sum=0 
for i=x downto low 
total-sum=total-sum+A[i] 
    if(total-sum > current-sum) //so that in first iteration we will enter the if statement 

etc

の私達のドメインでは期待できない値を持つプログラミング言語でアルゴリズムを実装するときに[OK]を、負の無限大を交換することができます問題。

具体的なプログラミング言語(Javaなど)でアルゴリズムを実装するときに、これを表すためのより一般的な方法/トリックがあるかどうかは疑問でした:
例えば、これらの値は、後で実際にドメイン値として有効となる可能性が
current-sum = -1; または
current-sum = -10000;

+2

疑似コードが何をしているのか、なぜそれが理解できません。これにより、翻訳が難しくなります。 –

+0

擬似コードは、最大部分配列問題を計算するためのアルゴリズムの一部です。この部分では、配列内の合計を計算し、-infinityを開始点として使用します。それが意味をなさないと思うなら、疑似コードの詳細を投稿できます – Cratylus

答えて

1
int current_sum = Integer.MIN_VALUE; 

これは、current_sumにintが持つことができる最小値 - (2^31)を与えます。

1

通常、データ型に収まる最大値で無限大を表します。

たとえば、+ inifityがある場合は、Integer.MAX_VALUEを使用できます。 -infinityと同じですが、Integer.MIN_VALUEを使用できます。

他のデータ型と同じです。

2

Integer.MIN_VALUEは、最小の32ビット表現可能値(-2^31)です。

また、これが実際に問題の有効な値である可能性がある場合は、64ビットに拡張してLong.MIN_VALUEを使用することもできます。

そして最後に、あなたはあなたのif条件に対して||最初の頃、​​すぐfalseに設定boolean firstTime = true;のオプションが常にあります。

1

Integer.MIN_VALUEInteger.MAX_VALUE場合によってはドメイン内の値になる可能性があるため、解決策が不適切です。より慎重にDouble.NEGATIVE_INFINITYを使用してください。例Double.NEGATIVE_INFINITY + 2 = Double.NEGATIVE_INFINITY

+0

これは興味深いことです。クール。 – Cephron

3

なし一般に、具体的なプログラミング言語

でアルゴリズムを実装するときに、これを表現するために、より汎用的な方法/トリックがある場合にはかかわらず、私が思っていたために

。常に機能する整数として「マイナスの無限大」を表現する方法はありません。可能な限り小さな整数値(Javaの場合Integer.MIN_VALUE)がよく使用されます。しかし、このソリューションが機能するかどうかを理解するには、特定のアルゴリズムを調べる必要があります。

したがって、一般的な/一般的な解決策はありません。


例では、Integer.MIN_VALUEは「マイナス無限」の代わりに使用できます。ただし、 アルゴリズムでInteger.MIN_VALUEを実際の値として使用する必要がある場合は、も使用できません。は「値なし」のマーカーとして使用できません。 Integer.MIN_VALUEが「マイナス無限大」のプロキシとして機能しない別のケースは、算術演算を行うときに使用される場合です。 (Integer.MIN_VALUE + x == Integer.MIN_VALUEx == 0のみのままです)

+0

+1一般的な問題の拡大治療 – Cephron

関連する問題