2010-11-18 11 views
0

Ich habe derzeit eine nxn Array von Ints. Ich plane, alle Zellen innerhalb des Arrays mit unendlich zu initialisieren und später zu ändern, wenn ein Wert, der mit der Zelle verglichen wird, niedriger ist als der Wert innerhalb der Zelle. Hier ist der Pseudo-Code von dem, was ich bisher herausgefunden habe, mit -1 zur Darstellung der Unendlichkeit. Was denken Sie? Ist das der effizienteste Weg, irgendwelche Fehler?Implementieren Array mit Min-Wert-Ints

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

Antwort

2

Ich würde stattdessen mit Integer.MAX_VALUE starten. Auf diese Weise könnte der Code einfacher sein:

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

Beachten Sie, dass Ihr Array waren verdoppelt zu enthalten, Sie sogar so weit, mit Double.POSITIVE_INFINITY gehen könnte.

+0

Danke. Genauer gesagt implementiere ich den Floyd-Warshall-Algorithmus. Wenn also Tabelle [i] [j]> Tabelle [i] [k] + Tabelle [k] [j] dann Tabelle [i] [j] = Tabelle [i] [k] + Tabelle [k] [j]. Wenn ik und kj beide MAX_VALUE wären, würde dies das Programm in irgendeiner Weise durcheinander bringen, seit sie hinzugefügt wurden? – sudo

+0

Nun, wie der Name schon sagt, ist Integer.Max_VALUE der maximal mögliche Wert in der Integer-Welt. Wenn Sie sogar '1' hinzufügen, werden Sie die Integer-Grenzen verlassen und als Ergebnis Integer.MIN_VALUE-1 haben (yep, Integers sind in der Tat zirkulär). – Riduidel

1

Wenn Sie sicher sind, dass der Wert -1 kann als „reserviert“ Wert behandelt werden, sollten Sie mit einem solchen Ansatz in Ordnung sein.

Sie könnten auch in Erwägung ziehen, den Datentyp in einigen PossiblyInfinitInteger zu kapseln, der einen Booleschen Wert dafür hat, ob er auf Unendlich gesetzt ist oder nicht. Vielleicht ein Overkill, ich weiß es nicht.

1
  1. if(table [i][j] == -1 || table[i][j] > value) then ... tut das gleiche. Ich bin mir nicht sicher, aber der Compiler kann sich darum kümmern.
  2. Wenn -1 reserviert ist und die Werte nicht weniger als 0 sein können, ist Ihr Ansatz korrekt, vergleichen Sie einfach table[i][j] < value und nicht umgekehrt.
  3. Bei der Verwendung von -1 als reservierter Wert ein Problem ist, verwenden Integer.MAX_VALUE: if(table[i][j] == Integer.MAX_VALUE) then table[i][j] = value;
Verwandte Themen