콜 센터에 대한 밀도 보고서를 구현하고 있습니다. 결과는 해당 일 동안 동시 전화 동시 통화의 최대 수를 보여주는 일일 행 테이블로 표시되어야합니다.활성 통화 계산을위한보다 빠른 알고리즘
우리는 UI 뒤에 lib를 만들고 있습니다. 계약서는 해당 날의 호출 수와 두 개의 정수 배열을 받도록 지정합니다. 하나는 시작 시간이고 다른 하나는 각 호출의 종료 시간입니다. 예를 들면 다음과 같습니다.
주어진 날 동안 두 번의 호출이 있습니다. 수신 : 하나는 시간 20에서 30으로 가고 다른 하나는 10에서 20으로 이동합니다. 동시에 최대 통화 수는 1입니다.
한편 다른 날에는 2 회, 10 회에서 45 회까지 수신됩니다 및 15 내지 40에서 다른 호출은 동시에 최대 개수는 웹 서비스 계약이
. 이다
데이터가 다음과 같이 표시됩니다 (해당 날짜에 3 번 통화 한 경우). 10에서 25로 먼저 하나, 30-12에서 두 번째 23
N = 3,
X = {10, 12, 20}
Y = {25, 30, 23}
그리고 20 ~ 세번째는 반환해야합니다 :
3.나는이 솔루션을 구현했습니다
public static int GetMaxDensity(int N, int[] X, int[] Y)
{
int result = 0;
for (int i = 0; i < N; i++)
{
int count = 0, t = X[i];
for (int j = 0; j < N; j++)
{
if (X[j] <= t && t < Y[j])
count++;
}
result = Math.max(count, result);
}
return result;
}
통화 수가 최대 1,000 회 (주말)이지만 근무일 내에 전화 번호가 꽤 크고 계산 시간이 오래 걸립니다 (5 분 초과). 이제는 내 솔루션이 두 개의 중첩 된 사이클을 사용하고있는 것일 수 있지만 복잡한 알고리즘에 대한 경험이 거의 없기 때문에 질문에 답할 수 있습니다.
최대 동시 호출 수 (시간도 호출자)이 있으면이 계산을 수행하는 더 빠른 방법이 될 수 있습니다.
하나의 통화가 10 ~ 40이고 두 번째 통화가 20 ~ 45 인 경우 밀도가 무엇입니까? 나는 2라고 생각 하나? – mprabhat
@mprabhat 예. 20에서 40 사이에서 두 건의 통화가 활성화 되었기 때문입니다. –
방금 코드를 복사하고 50,000 개의 배열로 구성된 5 개의 테스트를 실행했습니다. 각 배열은 무작위로 생성 된 값이며 x는 100보다 작고 y는 해당 x + 100.보다 작습니다. 24, 12, 12, 24, 18 초 후에 나타납니다. 이것은 내 노트북에 있었다. 코드를 정리하여 여기에 게시 할 수 있습니까? 그렇다면 루프가 문제가되지 않을 수도 있습니다. 프로파일 러에서 무엇을 공개 했습니까? – dbrown0708