2016-10-14 3 views
0

저는 두 명의 사용자간에 쌍을 생성하고 회의에서 일정을 잡을 수있는 쌍으로 구성된 시스템을 구축 중입니다. 선택은 내가 어려움을 겪고있는 기준을 기반으로합니다. 기준은 이전의 일치가 쌍 사이에 존재할 수 없다는 것입니다.목록에서 이미 역사적으로 존재하지 않는 쌍을 생성하십시오.

내 입력은 이메일 주소가 포함 된 n 크기 목록입니다. 이 목록은 쌍으로 분할되어야합니다. 제한 사항은이 일치가 이전에 발생하지 않았기 때문입니다. 예를 들어, 내 목록 내가 데이터베이스 테이블을 동시에 사용자 ID의 몇

list = {1,5,6,634,533,515,61,53} 

포함됩니다 그래서

이전 쌍은 존재 여기서

previous_pairs 
--------------------- 
id  date     status 
1  2016-10-14 12:52:24.214 1 
2  2016-10-15 12:52:24.214 2 
3  2016-10-16 12:52:24.214 0 
4  2016-10-17 12:52:24.214 2 

previous_pair_users 
--------------------- 
id  userid 
1  1 
1  5 
2  634 
2  553 
3  515 
3  61 
4  53 
4  1 

어떤 것 이 문제를 해결하기위한 좋은 접근법? 내 테스트 솔루션은 지금 두 명의 무작위 사용자를 뽑아 이전 일치를 확인하는 것입니다. 일치하는 항목이 없으면 새로운 임의의 항목 (가능한 경우)을 팝하고 잘못된 사용자 중 하나를 목록으로 다시 보냅니다. 두 사람이 마지막이라면 아무렇게나 맞을 것입니다. 이것은 이미 "기존"쌍으로 내 목록을 기반으로 발생할 수없는 일치를 예측해야하기 때문에 나에게 좋지 않습니다.

이 절차를 수행하는 것과 관련하여 나를 어떻게 데려 갈 수 있는지 알고 계십니까? Java 8 스트림은 재미있어 보이며이를 해결할 수있는 방법 일 수도 있지만 불행히도 매우 익숙합니다.

+0

위의 예에서 1 : 515는 유효한 출력입니다 (그리고 많은 다른 쌍도 유효합니다 ...)? – Amit

+0

두 명의 사용자가 이전 쌍을 가지고 있다면 지금 쌍을 만들 가능성이 더 높습니까? 또는 덜 가능성? –

+0

그래서 이전에 쌍이 발생했다면 다시는 발생할 수 없습니다. –

답변

0

이 솔루션은 여기에 이전 경기 MySQL을 사용하여 GROUP_CONCAT 기능이 포함 된 튜플과 목록 만드는 것이었다 : 그 후

SELECT group_concat(MatchProfiles.ProfileId) FROM Matches 
INNER JOIN MatchProfiles ON Matches.MatchId = MatchProfiles.MatchId 
GROUP BY Matches.MatchId 

old_matches = ((42,52),(12,52),(19,52),(10,12)) 

을 나는 후보자를 선택하고 내 pop_random를 사용하여 튜플의 새로운 목록을 생성을() 두 목록은 내가 어떤 중복을 찾기 위해 교차로에서 보면 완료

new_matches = ((42,12),(19,48),(10,36)) 

duplicates = list(set(new_matches) & set(old_matches)) 

복제본을 가지고있는 경우 단순히 랜덤 화기를 다시 실행하면 불가능할 때까지 X가 시도합니다.

많은 수의 숫자를 가질 때 이것이 그리 효과적이지는 않지만 데이터 세트가 그렇게 크지 않기 때문에 충분히 좋을 것이라고 생각합니다.

관련 문제