2012-03-05 2 views
0

아주 간단한 문제가 발생했습니다. 학생에게 할당해야하는 정수 값 (예 : 시간 슬롯)이 있다고 가정합니다. 각 학생은 타임 슬롯 배정 요청을 보내고 무작위로 배정됩니다.시간 슬롯 할당 - 설계 및 접근법

내가 acieving 생각하고 있었는데 그와 다음 :

Random r = new Random(); 
int slot = possibleSlots.removeAt(r.next(possibleSlots.size())); 
allocatedSlots.put(slot, student); 

는 다음과 같은 접근 방식에 대한 일반적인 시나리오로 적합 STH 다음과 같습니다

List<Integer> possibleSlots; 
Map<Integer, Student> allocatedSlots; 

이제 각 요청에 대해 내가 STH 같은 할 것 무작위로 슬롯을 할당하고 누가 어떤 슬롯을 가지고 있는지 또는 가능한 슬롯 목록을 사용하지 않고 더 나은 방법이 있는지에 대한 정보를 유지하고 있습니까?

답변

1

슬롯이 부족하지 않은지 확인해야 할 수 있습니다.

당신은 아마 필요

r.nextInt(possibleSlots.size()) 

는 정수 인덱스를 필요로하기 때문이다.

각 할당마다 새로운 랜덤이 필요하지 않습니다. 하나만 만들고 다시 사용할 수 있습니다.

그렇지 않으면 단 한 개의 스레드 만 있으면 합리적입니다. 위의 방법은 추가 작업없이 스레드로부터 안전하지 않습니다.

1

실제 슬롯 목록을 유지하지 않고 무작위 슬롯 목록을 생성하려면 순서와 결합 된 일종의 전역 고유 식별자 사용을 고려할 수 있습니다.

예를 들어 각 학생에게 UUID.randomUUID()을 할당 할 수 있습니다. 그런 다음 그들이 어떤 순서인지 알아야 할 때 자연스러운 순서에 따라 UUID를 비교하십시오.

UUID는 통계적으로 전 세계적으로 고유하므로 두 학생이 같은 것을 얻지는 않습니다. 그리고 주문을 했으므로 작성 시간에 걱정할 필요없이 나중에 언제든지 목록을 작성할 수 있습니다.