복붙노트

[REDIS] 사용자 매칭 알고리즘

REDIS

사용자 매칭 알고리즘

이 문제 그래서 우리는 다른 온라인 사용자와 일치하는 사용자가 있습니다. 그러나 한 경기에 불과 아니다. 사용자가 보았고, 또 다른 5의 사용자에 대한 사용자 요청을 표시 할 경우에 다시 도시하지 않아야하는 것에 표시되어있는 선택 가능한 5 다른 사용자의 선택이 주어진다. 더 많은 사람들이 과정에서 온라인으로 올 수 있습니다.

문제는 내가 각 사용자에 대한 방법은 레디 스와 다른 사용자의 선택에 표시하고 싶은,하지만 알고리즘이 찾고있는 메신저 무엇 대부분이다. 나는 가능하면 레디 스를 사용하여, 가장 빠른 방법으로이를 구현하기 위해 노력하고있어하지만 필요할 경우 또한 데이터베이스에 전화를 걸 수 있습니다.

나의 현재 솔루션은 다음과 같이 잘하면 사람이 O (N) 호출에서이 문제를 개선하기 위해 몇 가지 조언을 것입니다.

그래서 각 사용자는 user_ids의 볼 세트를 가질 필요가있다. 우리는 onlineusers의 레디 스리스트 (큐)를 가질 수있다. 우리가 그것을 저장, 사용자의 볼 세트에없는 하나를 찾을 때까지 우리가 왼쪽에서 사용자를 poppping 계속 경우, 본 사용자에게 추가 다음 오른쪽에 밀어 넣습니다. 우리가 그 5를 일단 그런 다음 우리는 다시 이미 볼 수 있었다 우리가 떨어져 튀어 왼쪽 사람을 밀어 떠났다.

이것은 내가 우리가에서이 하나의 사용자 선택하는 5 사용자를 찾으려면 O (N) 각 시간 그러나 생각할 수있는 최고입니다. 그것은 사용자가 엄청난 금액을 보았다 전체 목록을 보여주고 있는지 (안 가능성이 있지만) 가능성이 있습니다.

도움이 더 나은 이해합니다. naiive 접근 방식은 모든 단일 사용자가 한 세트의 형태로 모든 온라인 사용자의 사본을 포함하는 것입니다. 그래서 우리는 단지 5 개 임의 세트 구성원을 팝. 하지만이 작동하지 않을 수 있기 때문에 프로그래머 공간이 부족하고, 사용자가 온라인 상태가 각 사용자의 온라인 사용자에 추가해야 할 것마다. 또는 삭제 그들은 오프라인으로 가서 그 작업은 O (N)가 O에서 N 사용자를 위해 수행하는 고려 (1) 때

사람이 다른 사용자와 사용자에 맞게 어떤 조언이 있습니까?

해결법

  1. ==============================

    1.종류의 데이터를 우리가 얘기하는에 대해 알 수있는 좋은 것입니다. 얼마나 많은 사용자가 존재 하는가? 평균에서 온라인으로 얼마나 많은 것인가? 어떻게 모든 사용자 (스파 스 대 밀도)에 비해 "본 사용자"의 비율은?

    종류의 데이터를 우리가 얘기하는에 대해 알 수있는 좋은 것입니다. 얼마나 많은 사용자가 존재 하는가? 평균에서 온라인으로 얼마나 많은 것인가? 어떻게 모든 사용자 (스파 스 대 밀도)에 비해 "본 사용자"의 비율은?

    알고리즘의 수정 첫 번째 팝업하지만 온라인 사용자의 설정에서 임의의 요소를 선택하지 마십시오. 이 균형을 개선해야하며,이 두 세트의 비율에 따라 상각 복잡성 도움이 될 수 있습니다!

    대체 알고리즘 (더 구조화, 여전히 나쁜 최악의 경우를, 좋은해야 드문 드문 보이는 경우)

    데이터는 거대하고 볼 경우 데이터에 따라,이 드문 드문 매우 잘 작동합니다!

  2. from https://stackoverflow.com/questions/31668037/user-matching-algorithm by cc-by-sa and MIT license