Есть ли функция нижней границы на SortedList<K ,V>
? Функция должна возвращать первый элемент, равный или больше указанного ключа. Есть ли другой класс, который поддерживает это?
Ребята - пожалуйста, прочитайте вопрос еще раз. Мне не нужна функция, которая возвращает ключ, если он присутствует. Меня интересует сценарий, когда нет точного соответствия ключей.
Меня интересует время O (log n) . Это означает, что у меня нет проблем с циклом foreach, но я хотел бы иметь эффективный способ сделать это.
Я провел несколько тестов по этому вопросу.
Операторы Linq не оптимизируются ни компилятором, ни машиной времени выполнения, поэтому они проходят через все элементы коллекции и работают медленно O (n). Основываясь на ответе Мехрдада Афшари, приведем бинарный поиск, который работает в O (log n) в коллекции ключей:
public static int FindFirstIndexGreaterThanOrEqualTo<T>(
this IList<T> sortedCollection, T key
) where T : IComparable<T> {
int begin = 0;
int end = sortedCollection.Count;
while (end > begin) {
int index = (begin + end) / 2;
T el = sortedCollection[index];
if (el.CompareTo(key) >= 0)
end = index;
else
begin = index + 1;
}
return end;
}