2010-11-18 16 views
0

現在、intのnxn配列を持っています。配列内のすべてのセルを無限大で初期化し、後でセルと比較される値がセル内の値よりも小さい場合に変更する予定です。ここまでは、無限を表現するために-1を使用して、これまでに思い描いた擬似コードを示します。どう思いますか?これは最も効率的な方法で、バグはありますか?最小値intで配列を実装

if(table[i][j] == -1 || (table[i][j] != -1 && table[i][j] > value) 
    then table[i][j] = value 

答えて

2

代わりにInteger.MAX_VALUEで開始します。この方法では、コードは単純に次のようになります、ダブルスを含むようにあなたの配列だった

if(table[i][j] > value) { 
    table[i][j]=value; 
} 

お知らせは、あなたも限りDouble.POSITIVE_INFINITYを使用するなど、行くことができます。

+0

ありがとうございました。具体的にはFloyd-Warshallアルゴリズムを実装しています。したがって、table [i] [j]> table [i] [k] + table [k] [j]ならばtable [i] [j] = table [i] [k] + table [k] [j]。 ikとkjが両方ともMAX_VALUEの場合、プログラムが追加されているので、これは何らかの方法でプログラムを動揺させるでしょうか? – sudo

+0

名前のとおり、Integer.Max_VALUEはInteger世界で可能な最大値です。それに「1」を加えていたら、Integer境界から外れて結果Integer.MIN_VALUE-1を持ちます(実際には整数は実際には円形です)。 – Riduidel

1

あなたは値-1が「予約済み」の値として扱うことができることを確信している場合は、このようなアプローチで問題ないはずです。

PossiblyInfinitIntegerにデータ型をカプセル化することも考えられます。このデータ型は、それが無限に設定されているかどうかのブール値を持ちます。おそらく、過剰なこと、私は知らない。

1
  1. if(table [i][j] == -1 || table[i][j] > value) then ...同じです。私は確信していませんが、コンパイラがこれを処理するかもしれません。
  2. が予約されていて、値が0より小さくなることはできません。あなたのアプローチは正しいです。ちょうどtable[i][j] < valueと比較してください。
  3. 予約値として-1を使用することが問題である場合は、Integer.MAX_VALUEを使用します。 if(table[i][j] == Integer.MAX_VALUE) then table[i][j] = value;
関連する問題