2012-09-05 3 views
0

행렬을 나타내는 2D 배열이 있습니다. 가장 큰 합을 가진 사각형 부분 행렬을 찾아야합니다. I가이 있기 때문에이최대 합계 부분 행렬 찾기

9 3 5 9 
2 5 9 8 
8 4 9 7 
9 5 3 9 

큰 서브 행렬

9 8 
9 7 

될 예정이있는 경우 부분 행렬의 크기는, 예를 들어 (2)에 의해 분할 된 열 또는 행의 개수 가장 큰 합계.


2 둘째, 나는 순열의 가장 큰 부분 행렬을 찾아야합니다. 그 말은 하위 행렬의 모양이 가장 큰 숫자를 선택해야한다는 것입니다 (동일한 열 또는 동일한 행에서 적어도 두 개의 숫자). 예를 들어 네 개의 대각 모서리

9 9 
9 9 

의 화려하지만 첫번째 행을하고 매트릭스의 형상을 가지고 있기 때문에, 매트릭스를 만들 수 없다.

나는 여전히 고민 중입니다. 제발 도와주세요.

여기 내 코드와 subm는 행렬

for (i=0;i<rows-subm;i++){ 
      for(j=0;j<colums-subm;j++) 
      { 
      temp=pic[i][j]+pic[i][j+1]+pic[i+1][j]+pic[i+1][j+1]; 
      if(temp > summax) 
       summax=temp; 
      } 
} 
+1

[무엇을 시도 했습니까?] (http://whathaveyoutried.com) – Keppil

+1

박제 동물과 조금 이야기하십시오. 당신은 무엇을 알 수 있습니까? 문제를 해결하려면 무엇이 필요합니까? 무엇보다, 하위 코드에 대해 가장 큰 값을 찾도록 보장하는 코드는 무엇입니까? 나는 9 8 9 7이 가장 큰 부분 행렬 일 것이라고 생각한다. – Makoto

+0

파트 1의 경우 가능한 모든 부분 행렬을 찾아야합니다. 재귀를 선택하거나 동적 프로그래밍을 찾을 수 있습니다. 이것은 표준적인 문제입니다. – Nishant

답변

1

매트릭스 결정 계산 방식을 사용의 크기입니다. 이 example을 확인하십시오. 2 × 2 행렬의 행렬식

AB

을 계산한다

CD

ad-cb 

Instead use a+b+c+d 

result = mat[0][0] + mat[1][1] + mat[0][1] + mat[1][0]; 

레코드 모든 값의 예에서는 2 × 2 행렬 연산을 대체하고, 최대 값을 찾는 그들로부터

+0

고마워요. 나는 그것을 대단히 감사한다. – Sam