문제

주어진 큰 sparse matrix(말 10k+1+)나는 찾아야 하위 집합,반드시 지속적인,의 행과 열의를 형성하는 조밀한 매트릭스(아닌 모든 요소를 제).나는 이 행렬로 큰 것으로 가능한(지 않은 가장 큰 금액이지만,가장 큰 요소의 개수)이내에 몇몇 비율 제약 조건이 있습니다.

은 거기에 알려진 모든 정확한 또는 aproxamate 솔루션은 이 문제가?

빠른 검색에서 Google 를 제공하는 것을 많이 가깝지만-지 않은 결과입니다. 어떤 용어해야 하 찾고 계십니까?


편집: 을 명확히 하;서브 매트릭스 될 필요가 없는 지속적인.실제로 행하고 열기는 그래서 완전히 임의의 인접성이 완전히 무관하다.


생각에 따라 차드 Okere 의 아이디어

  1. 기 위해 행에서 최대 개수를 가장 작은 수를(필요가 없지만 도움이 될 수 있습 perf)
  2. 선택하 두 개의 행이"큰"중복
  3. 추가고 다른 모든 행하는지를 줄이 겹치
  4. 기록정
  5. 추가 어떤 행 줄이 겹치에 의해 적어도
  6. 반복#3 때까지는 결과를 얻을 작
  7. 시에서 2 위로 다른 시작 쌍
  8. 계속할 때까지는 결과가 충분히 좋
도움이 되었습니까?

해결책

나는 가정 당신이 원하는 무언가가 이와 같습니다.당신처럼 매트릭스

1100101
1110101
0100101

당신이 원하는 열 1,2,5,7 과 행 1,2,right?는 부분행렬을 것입 4x2 8 요소입니다.나와 함께 갈 수 있습의 열 1,5,7 행 1,2,3 는 것 3x3matrix.

당신이 원하는 경우에는'대략적인'방법은,당신은 시작할 수 있는 단일 비로소 다음에 다른 non-zero 요소 목록에 추가의 행과 열에 있습니다.어떤 점에서 너로 실행 합 non-zero 요소는 경우의 행과 열에 추가되었는 당신의 컬렉션,컬렉션은 더 이상 없을 것입을 완전히 비니다.

그래서 위의 행렬한 경우 추가 1,1 및 2,2 당신은 행 1,2 및 열 1,2 에서 당신의 컬렉션입니다.를 추가하려는 경우 3,7 것이 문제가 발생하기 때문에 1,3 에 포함되어 있습니다.그래서 당신은 없었습니다.을 추가할 수 있습 2,5 및 2,7 하지만입니다.을 만드는 4x2 부분행렬.

당신은 기본적으로 반복될 때까지 당신을 찾을 수 없습니 더 이상 새로운 행과 열 추가 할 수 있습니다.는 당신을 얻을 것이라고 너무 현지 최소화합니다.할 수 있는 결과를 저장하고 다시 시작으로 다른 시점(아마도 하나에 적합하지 않으로 현재는 솔루션).

그냥 중지를 찾을 수 없을 때 더 이상 없습니다.

는 분명히 시간이 오래 걸릴 것입이지만,내가 알지 못하는 경우에 당신은 그것을 할 수있는 모든 더 빨라집니다.

다른 팁

이게 a입니다 넷플릭스 문제?

MATLAB 또는 다른 스파스 매트릭스 라이브러리에는 처리 방법이있을 수 있습니다.

당신의 의도는 자신의 의도입니까?

어쩌면 각 행의 1D 접근 방식이 도움이 될 것입니다. 알고리즘은 다음과 같습니다.

  1. 각 행 위로 반복하십시오
  2. 첫 번째 0이 아닌 요소의 색인을 찾으십시오
  3. 각 행에서 0이 아닌 열 사이에 가장 큰 범위의 0이 아닌 행 요소의 인덱스를 찾아서 둘 다 저장하십시오.
  4. 0이 아닌 열 사이에서 최대 규모에서 가장 작은 범위에서 가장 작은 범위를 정렬하십시오.

이 시점에서 나는 퍼지를 시작합니다 (알고리즘 디자이너가 아니라 죄송합니다). 나는 각 행을 반복하여 시작점의 인덱스를 정렬하여 최대 0이 아닌 열 인덱스를 찾으려고 노력할 것입니다.

밀도가 높은 매트릭스가 정사각형인지 여부를 지정하지 않습니다. 나는하지 않을 것이다.

나는 이것이 얼마나 효율적인지 또는 그 big-o 행동이 얼마나 될지 모른다. 그러나 그것은 시작하는 무자비한 힘 방법입니다.

편집하다. 이것은 아래의 문제와 같지 않습니다 .. 내 나쁜 ...

그러나 아래의 마지막 의견을 바탕으로 다음과 같은 것과 동일 할 수 있습니다.

  1. 그들 사이에 0 점이없는 가장 먼 수직으로 분리 된 제로 포인트 쌍을 찾으십시오.
  2. 그들 사이에 0이없는 가장 먼 수평으로 분리 된 제로 포인트 쌍을 찾으십니까?
  3. 그렇다면 당신이 찾고있는 수평 영역은이 두 쌍의 포인트 사이에 맞는 사각형입니까?

    이 정확한 문제는 Jon Bentley의 "Programming Pearls"라는 책의 보석에서 논의되며, 내가 기억하는 것처럼, 한 차원의 해결책이 있지만 2D 이상의 차원 변이체에 대한 쉬운 답변은 없습니다. ..

1 = d 문제는 효과적으로 숫자 세트의 연속 하위 집합의 가장 큰 합을 찾는 것입니다.

요소를 통해 반복, 특정 이전 요소에서 실행 총을 추적하고 지금까지 보이는 최대 하위 토탈 (및이를 생성 한 시작 및 종료 elemnt) ... 각 요소에서 최대 런닝 하위 토탈이 지금까지 볼 수있는 최대 총, 지금까지 볼 수있는 최대 및 endelemnt는 재설정됩니다 ... 최대 달리기 총계가 0 이하가되면 시작 요소가 현재 요소로 재설정되고 실행 총계는 0으로 재설정됩니다 ...

2-D 문제는 2 색 이미지의 픽셀을 나타내는 밝기 값의 스트림 내에서 발견 된 시각적 이미지 처리 알고리즘을 생성하려는 시도에서 비롯된 것입니다. 이미지 내에서 "가장 밝은"직사각형 영역을 찾습니다. 즉, "밝기"가 픽셀의 브라이네스 값과 전체 이미지의 전체 평균 밝기 사이의 차이에 의해 "밝기"가 측정 된 가장 높은 밝기 값을 가진 2 차원 서브 매트릭스를 찾으십시오 (많은 요소가 음수 값을 가졌습니다).

편집 : 1D 솔루션을 찾으려면이 책의 2 판 사본을 준설했으며 Jon Bentley는 "이 버전은 인쇄 할 때 2D 버전이 해결되지 않은 채로 남아 있습니다 ..."라고 말합니다. 1999 년에.

나는 당신이 더 이상 이것에 대해 일하지 않는다는 것을 알고 있지만, 누군가가 앞으로 나와 같은 질문을 할 것이라고 생각했습니다.

따라서 이것이 NP- 하드 문제라는 사실을 깨닫고 (Max-Clique로 축소) 나는 지금까지 나를 위해 잘 작동 한 휴리스틱을 생각해 내기로 결정했습니다.

주어진 N 엑스 바이너리/부울 매트릭스, 큰 밀도가 높은 하위 매트릭스 찾기 :

1 부: 합리적인 후보 하위 마타를 생성합니다

  1. 각각을 고려하십시오 N 행은 a -차원 이진 벡터, V_I, 어디 = 1 ~ N
  2. 에 대한 거리 매트릭스를 계산하십시오 N 해밍 거리를 사용하는 벡터
  3. 클러스터 벡터에 대한 UPGMA (산술 평균을 사용하여 비가 중 쌍 그룹 메소드) 알고리즘을 사용하십시오.

처음에 각각 V_I 벡터는 싱글 톤 클러스터입니다. 위의 3 단계 (클러스터링)는 벡터를 하위 마타로 결합 해야하는 순서를 제공합니다. 따라서 계층 적 클러스터링 트리의 각 내부 노드는 후보 서브 매트릭스입니다.

파트 II: 후보자 하위 마우스 트릭스 점수 및 순위

  1. 각 하위 매트릭스에 대해 계산하십시오 , 하나 이상의 0이있는 열을 제거함으로써 서브 매트릭스에 대한 벡터의 조밀 한 서브 세트의 요소 수.
  2. 최대화되는 하위 매트릭스를 선택하십시오

또한 초기 전체 매트릭스에서 보존되어야하는 최소 행 수에 대해 고려 사항이 있었으며 Max로 하위 매트릭스를 선택하기 전에이 기준을 충족하지 않은 후보 하위 마우스 트릭을 폐기했습니다. 값.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top