유 방향 그래프에서 가장 많은 수의 비공유 에지를 포함하는 사이클을 찾는 방법은 무엇입니까?


26

저는 컴퓨터 과학 이론가는 아니지만이 실제 문제가 여기에 있다고 생각합니다.

문제

우리 회사에는 전국에 여러 부대가 있습니다.

우리는 직원들에게 다른 부서에서 일할 수있는 가능성을 제공했습니다. 그러나 한 가지 조건이 있습니다. 한 유닛의 총 근로자 수는 변경할 수 없습니다.

즉, 누군가 자신의 자리를 원할 경우 직원이 퇴사 할 수 있습니다.

예 (가상) 요청 데이터 :

Name            Origin    Destination
Maria              1  ->  2
Marcos             2  ->  3
Jones              3  ->  4
Terry              4  ->  5
Joe                5  ->  6
Rodrigo            6  ->  1
Barbara            6  ->  1
Marylin            1  ->  4
Brown              4  ->  6
Benjamin           1  ->  3
Lucas              4  ->  1

위의 플롯 : 위 데이터의 시각화

빨간색, 파란색 또는 검은 색 옵션 중에서 어떻게 선택해야합니까?

실제 문제는 27 개와 751 개의 요청이 있기 때문에 조금 더 복잡합니다. 시각화를보십시오

목표

모든 요청을 수집 한 후 대부분의 요청을 충족시키는 방법은 무엇입니까?

이론 (?) 응용

그래프 를 가지고 모든 단위가 꼭짓점 이고 요청이 지향 모서리 E 가되게한다면 성공적인 교환은 지향성 cyle의 형태를 취할 것입니다.V의 EG(V,E)VE

각주기는 사용해야합니다 (한 번만 노동자 두 번 자신의 장치를 떠날 수 없다 ) 만 방문 할 수 여러 번 ( 단위 떠나고 싶은 많은 노동자를 가질 수있다 ).VEV

질문

이 문제가 다음과 같이 표현되면

"지향 그래프에서 가장 많은 수의 비공유 에지를 포함하는 사이클을 찾는 방법"?

우리는 대부분의 요청자를 만족시킬 것인가?

사실, 최적의 사이클 세트를 찾는 알고리즘이 있습니까?

이 거친 접근 방식으로 문제가 해결됩니까?

  1. 에서 가장 큰 지정 사이클을 찾으십시오 .G
  2. 에서 모서리를 제거하십시오 .G
  3. 지시 된 사이클이 없을 때까지 1을 반복하십시오 .G

도와 줄래?

원래 문제를 설명하는 또 다른 방법을 알고 있습니까 (대부분의 요청자가 행복해 지도록)?

편집 : 문제를 더 잘 설명하기 위해 부서를 단위로 변경했습니다.


3
동일한 가장자리를 두 번 이상 사용하지 않으 시겠습니까? 응용 프로그램에 대한 설명에서 동일한 정점을 두 번 이상 사용하지 않아야한다는 것이 나에게 더 강한 조건입니다.
이토 쓰요시

3
@TsuyoshiIto : 설명에서 알 수 있듯이 조건은 각 정점에서 정도가 외도와 같아야한다는 것입니다. 따라서 정점 분리가 필요하지 않습니다.
오카모토 요시오

7
그런데 내 이해가 정확하면 네트워크 흐름을 통해 다항식 시간으로 문제를 해결할 수 있어야합니다. 즉, 우리가 가장자리를 따라 흐름 단위에 대한 이익 단위를 제공하고 각 가장자리에 단위 용량을 제공하면 문제는 최대 이익의 순환을 찾는 것입니다.
오카모토 요시오

3
이 게시물이이 문제의 일반화에 대해 설명 okasaki.blogspot.co.uk/2008/03/what-heck-is-math-trade.html을 (무역에 하나 개의 항목, 즉 자신의 직업 배치를 가진 각 사람의 생각).
Radu GRIGore

4
굉장한 질문, 우리가 실제로하는 일이 실제로 사용될 수있는 것처럼 느끼게합니다. :)
Gopi

답변:


9

저는 TradeMaximizer의 코드를 읽었으며 다음과 같은 일반적인 문제를 해결한다고 생각합니다.

문제 : 주어진 호는 비용이있는 유향 그래프입니다. 커버 된 버텍스의 수를 먼저 최대화하고 총 비용을 최소화하는 버텍스-비 연속 사이클 세트를 찾으십시오.

문제는 여기에 질문 해결하기 위해, 정점 직원 수와 그릴 수 있도록 호 단가 의 작업 싶습니다 . 직원은 이제 모서리가 아닌 정점입니다. 좋은 점은 직원이 "나는 정말로 일을 원하지만 일도 원할 것"이라고 말할 수 있다는 것입니다 .x y y zxyxyyz

해결책:

  1. 원래 그래프의 각 정점 에 대해 왼쪽 정점 , 오른쪽 정점 및 원가 (원래 그래프의 비용 합계보다 큼)을 소개합니다. 원래 그래프의 각 호 에 대해 이분 그래프에서 호 을 도입합니다 .x L x R x Lx R x y x Ly RxxLxRxLxRxyxLyR

  2. 이분 그래프에서 최소 비용 완벽 일치를 찾으십시오.

원본 그래프의 일부 전처리도 있습니다. SCC 사이에서 호를 제거한 다음 위에 표시된대로 크기가 모든 SCC를 처리하십시오 .>1

(실제로 TradeMaximizer는 위의 두 가지 기준에 따라 가장 큰주기의 길이와 같은 다른 것들을 경험적으로 최적화하기 위해 모든 최적의 솔루션을 반복합니다. 사람이 마음을 바꾼다.)

추신 : 저자 크리스 오카 사키 (Chris Okasaki)는 이것이 블로그 포스트 에서 코드가하는 일임을 확인했습니다 .


TradeMaximizer를 사용하여 원래 문제에 대한 해결책을 찾았습니다. 나는 내일 detais를 게시 할 것입니다.
motobói

@ motobói, 그러나 당신이해야 할 것은 내가 두 번째 단락에서 쓴 것입니다 ...
Radu GRIGore

알고리즘에 대한이 설명을 찾았습니다. boardgamegeek.com/wiki/page/TradeMaximizer
motobói

Strong Comnected Components 사이에서 아크를 제거해야하는 이유를 설명하거나 설명 할 수 있습니까?
motobói

@ motobói, 그것은 (평균적인 경우) 최적화입니다. 단계 (1)과 (2)로 충분합니다.
Radu GRIGore

22

이것은 표준 최소 비용 순환 문제입니다. 각 지정 에지 용량 과 비용 . 그런 다음 실행 가능한 순환은 에지 분리형 사이클의 합 (즉, 합집합)이며 순환 비용은 에지 수의 부정입니다.- (1)11

모든 비용과 용량은 상수에 의해 제한되므로 간단한 사이클 취소 알고리즘은 다항식 시간에 필요한 순환을 찾습니다. 이것은 명백한 욕심 많은 알고리즘과 거의 동일합니다.

while G has any negative-cost directed cycles
    γ = arbitrary negative-cost directed cycle
    reverse every edge in γ
    negate the cost of every edge in γ
return the subgraph of reversed edges

여기서 사이클 비용은 에지 비용의 합계입니다. 음수 사이클은 시간에 Bellman-Ford 최단 경로 알고리즘을 사용하여 찾을 수 있습니다 . 각 반복은 현재 순환 비용을 최소한 1 감소시킵니다. 초기 (빈) 순환 비용은 이고 최종 순환 비용은 이상 입니다. 따라서 알고리즘은 최대 반복 후에 종료 되므로 총 실행 시간은 최대 입니다.0 - E E O ( V E 2 )O(VE)0EEO(VE2)

이것은 알려진 가장 빠른 알고리즘이 아닙니다.


사람이 둘 이상의 "단위"에서 일하기를 원하지 않는 한 이것이 효과가 있다고 생각합니까? 원래 질문의 문구를 사용합니다. 그러나 사람들이 둘 이상의 유닛에서 일하기를 원한다면이 추상화가 무너질 것입니다. OP는 하나의 단위로 문제를 언급했지만 이것은 인위적으로 다소 수축적인 것처럼 보입니다. [인간은 어떤 선호도를 가지고 있는가 ...?]
vzn

1
"사람"과 "단위"는 무엇입니까? 이것은 그래프에 대한 질문입니다.
Jeffε

나는 의아해한다 : 나의 예제는이 알고리즘에 대한 반대 예제가 아닌가? C를 선택한 후 사이클 C_1 및 C_2는 더 이상 사이클이 아닙니다 (각 사이클마다 하나의 반전 된 에지가 있기 때문에). C는 모서리를 반전 한 후 양의 비용이 발생하고 새로운주기가 도입되지 않으므로 다시 사용되지 않습니다. 우리는 같은 문제에 대해 이야기하고 있습니까? 문제의 수학적 공식을 갖고 싶어합니다.
FiB

3
CCC1C2CCC1C2C=C1+C2C

분명히 "단위"는 "부서"와 같고 사용자는 부서 간 전송 요청을 기록하고 있습니다 (부서의 특정 직책이 아님)? FIB 다이어그램에는 단위 간 정점 요청과 같은 단위가 정점과 모서리로 표시됩니다. FiB-- "문제의 수학적 공식화를 원할 것입니다.". 정확한 공식을 제공하는 것은 당신에게
달렸

4

이 탐욕스러운 접근 방식이 항상 최상의 솔루션을 제공하지는 않습니다.

Cn{(v1,v2),,(vn,v1)}C1C2n1C

CnC1C2

C1C22(n1)=2n2

옆으로 : 위 예에서 두 사이클을 추가하는 대신 추가 할 수 있습니다.n2


-3

아마도이 문제를 해결하기위한 그래프 이론 방법 / 공식이있을 수 있지만이 문제는 모든 순열 중 일부가 거부되고 다른 일부는 유효한 순열 문제처럼 들립니다. 순열은 직원이고 직위는 회사의 "직책"입니다. "person [x] 원하는 위치 [y]"의 요구 사항에 맞지 않으면 순열이 거부됩니다. 단위 / 부서 / 조직 경계의 구별은이 경우 솔루션에 다소 불필요하다.

제약 조건이있는 이러한 유형의 순열 문제는 SAT (만족도) 문제의 인스턴스로 쉽게 변환 될 수 있습니다. 부울 변수 할당은 직원을 나타내고 제약 조건 절은 "person [x] wants position [y]"제약 조건을 나타냅니다. 근처에 전형적인 예가 있습니다. 하나는 일반적으로 좌석 위치와 손님이 있고 모든 손님이 서로 옆에 앉기를 원하지 않는 "식탁 테이블"문제라고합니다.

물론 PC에는 약 수백 개의 변수와 절이 포함 된 상당히 큰 인스턴스에 대해 정교한 SAT 솔버가 있으며, 문제가 수천에서 "하드"가 아닌 경우도 있습니다.

예를 들어 전문적인 참고 자료는 [1], 수업 연습은 [2]를 참조하십시오. 비둘기가 비둘기 구멍에 할당되어 있고 비둘기보다 구멍이 많거나 적은 SAT 서클에서 잘 연구되는 "비둘기 구멍 문제"와 구조적 유사성이 있습니다. 이 경우 비둘기는 일반적으로 상호 교환 가능한 것으로 간주됩니다. 즉, 저녁 식사 테이블 문제는 더 강한 제약 조건을 가진 비둘기 구멍 문제와 같으며 손님 / 비둘기는 선호도가 필요합니다.

물론 이러한 유형의 문제에 대해서는 제약 조건에 따라 "제한된 솔루션이 존재하지 않을 수 있습니다"라는 점에 유의하십시오.

[1] 저녁 식사 테이블 알고리즘, crato

[2] CS402 프린스턴 HW SAT

[3] 위키피디아의 만족도 문제


trademaximizer를 사용하여 순열을 시도했습니다. 그의 단위 거래를 원하는 사용자로 직원 설정 X를 단위 Y를 . 그러나 소프트웨어는 동일한 품목 (그의 단위)을 거래하는 둘 이상의 사용자를 허용하지 않습니다. 각 항목은 고유해야합니다. 이를 수용하기 위해, 나는 [(Jones)가 Unit-C-James를 Unit-D-Laura 또는 Unit-D-Sergio 또는 Unit-D-Mary로
교환하고 싶어한다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.