Реализация массива с минимальными значениями - PullRequest
0 голосов
/ 18 ноября 2010

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

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

Ответы [ 3 ]

2 голосов
/ 18 ноября 2010

Я бы вместо этого начал с Integer.MAX_VALUE. Таким образом, код может быть проще:

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

Обратите внимание, что, если в вашем массиве содержатся двойные числа, вы можете даже использовать Double.POSITIVE_INFINITY.

1 голос
/ 18 ноября 2010
  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;
1 голос
/ 18 ноября 2010

Если вы уверены, что значение -1 может рассматриваться как «зарезервированное» значение, вам может подойти такой подход.

Вы также можете рассмотреть инкапсуляцию типа данных в некоторый PossiblyInfinitInteger, которыйимеет логическое значение того, установлено ли оно в бесконечность.Возможно, перегиб, я не знаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...