헝가리안 알고리즘_최종 채택X - 100-hours-a-week/12-marong-Wiki GitHub Wiki

📍 순환 구조 및 헝가리안 알고리즘 적용

1. 필터링 단계

  • 과거 매칭 이력 존재하는 경우 매칭 제외
  • 상대방과 좋아하는 음식과 싫어하는 음식이 같을 경우 후보군에서 제외

2. 비용 부여 및 비용 행렬 설정 단계

  • 매칭 시기에 따라 비용을 부여하고, 궁합이 맞지 않는 MBTI일수록 추가적으로 비용 부여

3. 헝가리안 알고리즘 실행 단계

  • 해당 비용 기반으로 헝가리안 알고리즘에 따른 비용의 전역적 최적화를 목표로한 1:1 매칭

4. 클러스터링을 통한 알고리즘 실행 분산 단계

시간복잡도가 O(n^3)

  • 사용자가 더욱 많아지면 클러스터를 분류해서 클러스터 내에서 헝가리안 알고리즘을 적용하여 매칭을 하는 것을 고려해야 함

📍 해결 전략

  • K-means, Spectral Clustering 등으로 n명의 사용자를 군집화 (30~50명 단위)
  • 군집 내부에서만 헝가리안 알고리즘 적용, 주차 순환 방식으로 군집 간 교차 매칭 유도 가능 → 클러스터링을 통해 시간복잡도에 따른 문제를 완화할 수 있음

클러스터링 기준 -> 더욱 고민해야할 이슈 10,000명 기준으로 클러스터 내 인원을 200명 이하로 분할하면 단일 코어로도 충분히 해결 가능!


📍 클러스터 방식에 대한 예상 시간 시나리오

클러스터 수 클러스터당 인원수 연산량 (O(n³)) 단일 코어 처리 시간 10코어 병렬 처리 시간 50코어 병렬 처리 시간
1 10,000명 1 × 10¹² 10,000초 ≈ 2.8시간 1,000초 ≈ 16.6분 200초 ≈ 3.3분
10 1,000명 10 × (1 × 10⁹) = 1 × 10¹⁰ 100초 10초 2초
50 200명 50 × (8 × 10⁶) = 4 × 10⁸ 4초 0.4초 0.08초
100 100명 100 × (1 × 10⁶) = 1 × 10⁸ 1초 0.1초 0.02초

📍 Dummy를 어디 추가하냐에 따라 Dummy와 매칭된 사람의 수행 역할 조절 가능

  1. Dummy를 열(=마니띠)로 추가 → dummy와 매칭된 사람은 마니또만 수행, 마니띠 없음

  2. Dummy를 행(=마니또)로 추가 → dummy와 매칭된 사람은 마니띠만 수행, 마니또 없음


❌ 채택하지 않은 이유

헝가리안 알고리즘을 사용하면 랜덤 비용의 개념을 통해 마니또 매칭의 재미를 더할 수 있음 구체적으로 각 요소별 비용 부여에서 noise를 도입하여 어떤 주에는 단순하게 성향, 좋아하는 음식, 싫어하는 음식, 취미에 따라 최적화가 이루어지지 않을 수 있는 오락적 요소를 가미할 수 있음

  • 헝가리안 알고리즘도 결국엔 1:1 매칭이라 낙오자가 발생
  • OR 양방향 매칭이 가능하긴 하지만 전체 유저 수가 홀수인 경우 Dummy를 추가해서 Dummy와 매칭되는 경우에는 마니또 혹은 마니띠 역할만 가능하도록

→ 완벽한 순환 구조가 아니기 때문에 채택하지 않음