우리는 각각의 정수 시간과 종료 시간을 시작 가지고, n 개의 작업 집합이 제공됩니다. 주어진 시간에 에서 병렬로 실행되는 최대 작업 수는 얼마입니까?
알고리즘은 O (n log n) 시간으로 실행되어야합니다. 내가 직접 대답을 필요로하지 않지만 어떤 코드 조각이만큼 그들은 Java 또는 스칼라에로 환영 있도록
이
는 학교 과제입니다 (스칼라로 작성하기로 할당.)일부 힌트의 나는 우선 순위 대기열을 활용해야한다고. 설명서를 읽었지만 실제로 사용하는 방법에 대해서는 확신 할 수 없으므로 모든 코드 스 니펫을 환영합니다.
입력 데이터는 예를 들어 Array[Pair[Int,Int]] = Array((1000,2000),(1500,2200))
일 수 있습니다.
우선 순위 대기열의 순서를 설정하는 데 정말로 고심하고 있습니다. 그렇게하지 않으면 다른 사람이 저를 도울 수 있기를 바랍니다.
추 신 : 우선 순위 큐는 PriorityQueue() (ord)로 초기화되어야합니다.
편집 : 우선 순위 대기열을 사용하는 해결책을 생각해 냈지만 모든 답변에 대해 감사드립니다. 너희들이 내가 논리를 알아내는 것을 도왔다!
두 개의 목록 (시작 시간과 종료 시간으로 정렬 된 목록)에 작업이 있고 각각의 "현재"작업에 대한 색인을 유지 관리한다고 가정합니다. 그러면 다음 시작과 다음 끝이 발생할 시간을 알 수 있습니다. 따라서 배열을 동시에 살펴보고 최대 값을 기억해야합니다. 마찬가지로 두 개의 우선 순위 대기열을 사용할 수도 있지만 정렬 된 배열보다 느릴 수 있습니다 (이는 단지 추측이므로 반드시 측정해야합니다). –
@ NicoSchertler 내가 골짜기에 가면 정렬 된 배열이 동시에 선형 시간에 알고리즘을 실행하지 않을 것입니까? – Jonatan
예.하지만 먼저 정렬해야합니다. 따라서 n log n. –