>

문제는 다음과 같습니다. 직원 이름 E, 직원의 키와 몸무게가 각 직원 E에 대해 데이터 스트림을 감안할 때 키가 크고 체중이 E보다 큰 직원 그룹을 찾습니다.

분명히 O (n ^ 2)에서는 무차별적일 수 있습니다. 그래도 이것이 최선입니까? 더 잘 할 수 있다면 알고리즘은 무엇입니까?


  • 답변 # 1

    포인트 (height_i, weight_i) 를 그리면  모든 직원 i 에 대한 2D 비행기 , 직원 i의 쿼리는 2D 직교 범위 쿼리가됩니다. 즉,이 사각형 내에서 점을 찾는 것  그리고 height_i < height <= height_max .

    wiki [1]에서 시간 복잡도 weight_i < weight <= weight_max 의 알고리즘을 가질 수 있습니다  어디 O(n log log n + k)  출력 크기입니다.

    편집 : 최악의 경우 k   k 의 순서 일 수 있습니다

    1 : https://en.wikipedia.org/wiki/Range_searching#Orthogonal_range_searching

  • 답변 # 2

    입력을 키나 몸무게로 정렬하면 각 항목에 대한 후속 항목 만 검사 할 수 있습니다 n^2 를 할 수 있습니다.   (l-1) + (l-2) + (l-3) + ... + 1 대신 비교 . 그러나 이것은 여전히 ​​이차적입니다. ruakh가 의견에서 지적했듯이 출력 크기는 이것이 우리가 할 수있는 최선이라고 말합니다 (정렬 목록의 모든 사람이 더 짧고 모든 후속 사람보다 무게가 작은 경우를 상상하십시오).

    l * (l - 1)

관련 자료

  • 이전 java - orgbouncycastleoperatoroperatorcreationexception - 서명자를 작성할 수 없음 : 서명 (제공자 : bc)에 대해 구성된 클래스를 찾을 수 없습니다
  • 다음 android - 발리를 사용하여 네트워크 전화를 걸 수 없습니다