나는 양수 세트를 가지고 있습니다. 세트에 포함되지 않은 숫자가 주어지면, 이 인 다음으로 작은 다음으로 큰 숫자를 찾으려고합니다. 내가 지금 할 수있는 유일한 방법은 세트에서 숫자를 찾을 때까지 1 씩 감소시켜 다음으로 작은 것을 찾은 후 다음으로 큰 것을 찾는 것에 대해 동일한 작업을 수행하는 것입니다.세트에서 다음으로 작은 숫자와 가장 큰 숫자를 찾는 빠른 알고리즘
동기 부여 : 나는 날짜별로 키가있는 해시 맵에 많은 데이터를 가지고 있습니다. 나는 모든 단일 날짜에 대해 데이터 포인트를 가지고 있지 않습니다. 예를 들어 10/01/2000의 데이터가 60이고 10/05/2000의 데이터가 68 인 경우 10/02/2000을 요청하면 선형으로 보간하려고합니다. 나는 62를 가져야한다.
"가장 가까운 (상한 및 하한) 연산이 O (n) 연산"임을 명확히합니다. 정렬되지 않은 배열에서 n 번째 요소를 찾는 것은 O (n) 연산이지만 알고리즘을 이해하는 데 다소 시간이 걸립니다. 그러나 분/초를 찾는 것은 매우 간단합니다. – Thanatos
사용중인 언어로지도를 반복 할 수 있습니다. 반복은 O (n) 연산입니다. 정말 이상한 데이터 구조 나 언어를 사용하지 않는 한 더 비싸게 만들 수 있습니다. Java의 HashMaps는 O (n)에서 반복 될 수 있습니다. – cletus
그는 데이터가 HashMap, 즉 정렬되지 않은 컨테이너에 있다고 씁니다. 크기에 따라 정렬 (O (n log n))은 그가 제시 한 것과 같이 인접한 키를 탐색하는 것과 비교할 때 상당히 비쌉니다 (아래 내 답변 참조). –