Вот тема на эту тему
Кажется, SortedMap
может быть в состоянии помочь вам пройти часть пути, но то, что я проверилдо сих пор я не уверен, что это O (log (n)), каким должен быть поиск:
def searchMap(m: SortedMap[Int,_], k: Int) = {
val left = m to(k) lastKey
val right = m from(k) take(2) lastKey
if (k - left < right - k)
left
else
right
}
На основе определений from
и to
в терминах rangeImpl похоже, что это может быть O (log (n)), но, основываясь на фактической синхронизации, оно кажется линейно растущим для всех вероятных значений n.
Так что я не уверен.