2010-11-18 6 views
0

현재 int 배열은 nxn입니다. 배열 내의 모든 셀을 무한대로 초기화하고 나중에 셀과 비교되는 값이 셀 내부의 값보다 낮은 경우 나중에 셀을 변경하려고합니다. 다음은 무한 성을 나타 내기 위해 -1을 사용하여 지금까지 생각해 냈던 의사 코드입니다. 어떻게 생각해? 이것이 가장 효율적인 방법인가요, 버그입니까? 당신이 값 -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

, 당신은 같은 방식으로 잘해야한다.

PossiblyInfinitInteger에 데이터 유형을 캡슐화하여 무한대로 설정되었는지 여부도 확인할 수 있습니다. 아마도 과잉 공격 일지 모르겠습니다.

1
  1. if(table [i][j] == -1 || table[i][j] > value) then ...도 마찬가지입니다. 확실하지는 않지만 컴파일러가 처리 할 수 ​​있습니다.
  2. 이 예약되어 있고 그 값이 0보다 작을 수 없다면 접근 방식은 정확합니다. table[i][j] < value과 비자 반대로 비교하십시오. 예약 된 값으로 -1을 사용하는 것은 문제가
  3. 경우는 Integer.MAX_VALUE를 사용 if(table[i][j] == Integer.MAX_VALUE) then table[i][j] = value;