다음에 신속하게 응답 (O (logn))하기 위해 O (N) 시간 배열의 숫자 시퀀스를 저장하는 프로그램을 만들려고합니다.시퀀스의 두 항목 사이의 최소값
min (int i, int j) : 포지션 i와 j 사이의 시퀀스에서 최소값의 포지션을 반환합니다.
예를 들어 시퀀스가 A = (22, 51, 83, 42, 90, 102, 114, 35)이고 i가 min (3,6) 을 호출하면 42 < 83,90,102이기 때문에 4를 반환합니다.
시퀀스의 값이 정렬되지 않았거나 O (logn)을 얻고 싶기 때문에 빠른 시간을 얻을 수 없다는 것을 알고 있습니다. 이진 트리를 구현할 생각이었습니다.
문제는 내가 필요로하는 일을 min()을 위해 신속하게 액세스 할 수 있도록 이진 트리에 시퀀스의 값을 어떤 방법으로 배치해야하는지 파악할 수 없다는 것입니다.
이것은 간격 트리를 사용하여 해결할 수있는 일반적인 문제입니다. O (n) 시간에 생성 한 다음 O (log n)에서 쿼리를 실행할 수 있습니다. – Ardavel
자바 배열은 0부터 시작하지만 인덱스 3이 값이 '0'인 경우, '83, 42, 90, 102' 83 '이면 1 기반 논리를 사용합니다. 2) Java 범위는 하위 배타적이며 상위 배타적입니다. 그러나 3-6 범위의 값이 4 값인 경우 상위 포함 논리를 사용합니다. – Andreas
왜 이미 정렬했으면 언제 어디서나 배치 할 수 있습니까? 기존 배열을 그대로 사용하고 O (1) 조회에 대한 색인을 사용하십시오 ... –