2011-04-01 6 views
2

동일한 1 차원 (선형) 공간에 해당하는 두 세트의 간격. 여기에 대략적인 비주얼이 있습니다. 실제로는 더 많은 간격이 있고 훨씬 더 넓어 지지만 기본적인 아이디어가 있습니다. 이 간격의1 차원 공간을 분할하는 알고리즘

interval graphic

각각의 정보를 포함하고 나는 다른 세트 (파란색)에 포함 된 정보에 간격 (빨간색) 한 세트의 정보를 비교하는 프로그램을 쓰고 있어요.

여기 내 문제입니다. 나는 그 공간을 각각의 청크에서 수행 할 비교 작업의 대략 동일한 양 (작업량은 공간의 해당 부분의 간격 수에 따라 다름)으로 n 덩어리로 분할하고 싶습니다. 또한 파티션은 두 청크에서 빨간색 또는 파란색 간격을 분리해서는 안됩니다.

그래서 입력 간격의 두 세트, 그리고 원하는 출력

  • 간격은 대략적으로 동일하게 분할
  • 없는 구간의 각 요소에 분산되도록 상기 공간의 파티션 여러 파티션 요소와 겹치다

누구든지이 작업을 수행하는 방법이나 알고리즘을 제안 할 수 있습니까?

+0

@ 대니얼 : 비교 목록을 작성하기 위해 비교를 시작하기 전에 한 번 전체 공간을 스캔하는 것이 비용이 많이 듭니까? 또한, 같은 수의 빨간색과 파란색 간격을 보장합니까? 간격 (예 : 헤더 또는 무언가에 인코딩 된 일련 번호)을 검사하여 간격의 순서를 식별 할 수있는 방법이 있습니까? –

+0

동일한 수의 간격이 없을 것입니다. 선형 공간의 빠른 초기 스캔은 아마도 필요할 것이고 비싸지 않을 것입니다. 필요한 경우 여러 데이터 구조에 "간격"객체 (시작 및 끝 좌표가있는 객체)에 대한 포인터를 저장할 수 있지만 그 이상을 저장하는 것은 너무 많은 메모리를 필요로합니다. 간격 트리와 동적 배열이 먼저 마음에 떠오 랐지 만, 어떻게 사용할 수 있는지 알아 내려고 노력 중입니다 ... –

+0

@Daniel - 뭔가 빠졌거나 그냥 포인터 쌍 목록을 만들 수 없습니까? 빠른 스캔을 한 다음 처리를 위해 해당 목록을 분할 하시겠습니까? –

답변

2

"단어"는 모든 간격이 빨간색 간격 또는 파란색 간격에 속하는 최대 간격으로 정의하십시오. 청크는 단어 중간에 끝날 수 없으며 연속 된 단어의 모든 결합은 잠재적 인 청크입니다. 이제 단어의 길이가 포함 된 간격 (line = chunk)으로 정의되는 단어에 minimum raggedness word-wrap algorithm을 적용하십시오.

+0

이것을 사용하는 까다로운 부분은 n 줄을 필요로하는 선 너비를 추측하는 것입니다. –

+0

질문의 나머지 부분은 그 소리를 부드러운 제약과 같이 만듭니다. 비 인접 파티션이 허용되는지에 대한 질문이 더 중요합니다. – qrqwe

+0

예, 차선이지만 최적에 가까운 해결책이 허용되지만 "단어"는 정렬 된 순서로 유지되어야합니다. –

관련 문제