2009-12-02 3 views
4

저는 지역 학교를위한 간단한 계획 도구로 사용될 필요가있는 작은 소프트웨어 응용 프로그램을 작성하고 있습니다. 해결해야 할 '문제'는 상당히 기본입니다. 즉 교사는 모든 아이들의 부모와 이야기해야합니다. 그러나 일부 어린이들은 물론 다른 그룹에 속한 형제 자매가 있으므로 대화가 부모님과 오후 6시에 한 번씩, 그리고 오후 10시에 또 하나씩하는 상황을 피하기 위해 서로 옆에 일정을 잡아야합니다. 따라서 간단히 말해서 n 어린이가 있으며, 일부 어린이는 1 명 이상의 형제 또는 자매를두고 있으며,이 어린이들의 모든 대화가 서로 나란히 계획됩니다.계획 도구를위한 알고리즘

이제는 문제를 극도로 쉽게 해결할 수 있지만 다른 한편으로는 이것이 매우 복잡한 문제 일 수 있다는 느낌이 들었습니다. 알고리즘은 일종의 알고리즘으로 해결할 수 있습니다. 우아하게. 하지만 내가 맞습니까? 거기 있니? Hungarian 알고리즘을 살펴 보았지만이 특정 문제에는 적용되지 않습니다.

편집 : 모든 회담에 같은 시간이 걸린다는 점을 잊어 버렸습니다.

감사합니다.

답변

3

매우 간단하다고 생각합니다.

첫 번째 그룹 그들은 부모를 공유하기 때문에 함께 속한 아이들입니다. 그룹에 속한 어린이들을 연속적으로 계획하고 나머지는 무작위로 계획하십시오.

그것을 추상화하고 문제를 쉽게 만드는 또 다른 방법은 부모 관점에서 바라 보는 것입니다. 형제와 자매를 "자식"으로보고 더 많은 시간을줍니다. 그런 다음 부모님을 무작위로 예약 할 수는 있지만 시간이 더 걸릴 수 있습니다 (자녀가 여러 명 있기 때문에).

+0

이것은 첫 번째 아이디어이기도합니다. 그러나 나는 아직도 당신이 이런 식으로 문제를 겪을 수 있다는 느낌을 계속 갖고 있습니다. 그러나 다시, 아마도 나는 틀 렸습니다. 먼저 종이에 써야 할 것 같습니다. 어쨌든 +1하십시오! – Razzie

+0

문제가 생기지 않도록하십시오. 내가 생각할 수있는 유일한 것은 부모가 이틀 동안 돌아와야한다는 것입니다. 하지만 일부 조건문으로이를 수정할 수 있습니다. 또한, 나는이 알고리즘이 너무 단순해서 공식적인 방법 마술로는 증명할 수 없다고 생각합니다. – Henri

1

이 정렬은 "백팩 알고리즘"유형의 문제라고 느낍니다. 가족 구성원을 그룹화 한 다음 슬롯을 적절하게 채워야합니다.

Google "백팩 알고리즘"을 사용하면 헤드 스핀을 만들기에 충분한 글을 볼 수있을뿐만 아니라 훌륭한 코딩 솔루션을 얻을 수 있습니다.

+2

여기서 배낭 문제는 적용 할 수 없습니다. 아마도 모든 회의에 충분한 시간이 있거나 회의 시간이 줄어들 것입니다. 그렇지 않은 경우에도 수업 시간에 단 한 명의 자녀를 둔 많은 수의 학부모가 항상 쉽게 채울 수 있습니다. –

+0

내가 배낭 문제에 대해 생각한 이유는 이것이 실제 세계이기 때문에 특정 교사/행정관에게 다른 아이들에게 체중을 적용 할 수있는 추가 비즈니스 규칙이있을 가능성이 있기 때문입니다. 나는 그것이 하나의 아이들과 함께 나머지 지역을 채우는 것보다 더 복잡해 질 수도 있다고 상상한다. –

+0

Keving, 나도 내가 생각하기에 동의하는 경향이있다. 우스운 일은, 나는 잘 모르겠다. 그래서 나는 종이에 무엇인가를 써야 할 수도있다. 동료도 배낭 알고리즘을 언급했다. (나는 배낭 알고리즘이라고 생각했다.) +1 – Razzie

1

각 활동이 시작 시간과 종료 시간을 가진 "활동"으로 축소 될 수 있다고 생각합니다. 컴퓨터 과학에서 공부 한 활동 선택 알고리즘을 사용할 수 있습니다. 욕심 많은 접근법을 기반으로하며 O (n) (여기서 n은 활동 수)에서 해결할 수 있습니다. 자세한 내용은 here을 참조하십시오. 형제 자매 문제를 같은 유형의 활동으로 줄이려면 여기에서 사전 처리를해야 할 필요가 있습니다.

+0

링크를 이용해 주셔서 감사합니다. 빠른 시선은 그것이 적어도 내 문제와 관련이 있다고 말해줍니다. 나는 그것을 읽을 것이다. +1 – Razzie

3

선언적 제약 조건 언어에서 문제를 정의한 다음 문제를 해결하도록하는 방법이 있습니다. 마지막으로이 작업을 수행 할 때 ECLiPSe을 사용했습니다.이 언어는 제약 조건에 따라 문제 공간을 정의한 다음 해당 제약 조건을 충족시키는 허용 가능한 값을 찾을 수있게 해주는 멋진 언어입니다. 예를 들어

, 난 당신이 제약 조건의 두 클래스 믿습니다 : 교사는 같은 가족에 한 번에
  • 모든 학생들을 하나 회의를 할 수

    1. 을 연속 슬롯이 있어야합니다

    ECLiPSe에서 이들을 정의하면 요구 사항을 충족하는 각 학생의 값이 계산됩니다. 이 방법을 사용하면 필요할 때 쉽게 구속 조건을 추가 할 수 있습니다.예를 들어, Y 슬롯에 티치를 사용할 수 없다거나 교사가 교대 근무를해야한다고 말하기는 쉽습니다.

  • +0

    와우, 나는 ECLiPSe에 대해 몰랐다. 정말 재밌어 보인다! 나는 그것을 시도 할 수 있습니다! – Razzie