2010-11-18 6 views
0

В настоящее время у меня есть массив nxn из int. Я планирую инициализировать все ячейки в массиве с бесконечностью и позже изменить его, если значение, сравниваемое с ячейкой, ниже, чем значение внутри ячейки. Вот псевдокод того, что я придумал до сих пор, используя -1 для представления бесконечности. Как вы думаете? Это самый эффективный способ, любые ошибки?Реализация массива с минимальным значением ints

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

Спасибо. Более конкретно я реализую алгоритм Флойда-Варшалла. Итак, если таблица [i] [j]> table [i] [k] + table [k] [j], тогда таблица [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. Если -1 зарезервировано, а значения не могут быть меньше 0, ваш подход правильный, просто сравните table[i][j] < value, а не наоборот.
  3. При использовании -1 как зарезервированное значение является проблемой, используйте Integer.MAX_VALUE: if(table[i][j] == Integer.MAX_VALUE) then table[i][j] = value;
Смежные вопросы