Java

Какие из следующих стандартных контейнеров позволяют найти в них элемент по его значению за O(log(n))?

1.java.util.Vector
2.java.util.ArrayList
3.java.util.LinkedList
4.java.util.TreeSet
5.java.util.HashSet
6.сортированный java.util.Vector
7.сортированный java.util.ArrayList
8.сортированный java.util.LinkedList

Как это понимать "за O(log(n))"? что это вообще такое, секунды или световые годы выраженные в какой то формуле?
Начал писать в комментарии к Алику, думаю, лучше вынесу сюда.
Чтобы найти сложность алгоритма, есть два пути: если ты математик - рассчитай количество операций в алгоритме при объеме входных данных n и найди самый большой член в формуле; а если просто программист, тем более студент - придется заучивать по таблице.
Примеры на практике разных O:
- сложность поиска в массиве (array) по индексу - O(1): какой бы ни был размер массива, а элементы в нем находятся за одну операцию.
- сложность поиска в массиве или списке (list) по значению - O(n): чем больше элементов в массиве, тем дольше придется искать, причем строго пропорционально количеству элементов.
- сложность поиска элемента в дереве - O(log(n)): например, если все элементы разложены по взвешенному двоичному дереву, то придется пройти только по одной ветке, а в ней - логарифм числа элементов по основанию 2.
- сложность сортировки "пузырьком" - O(n^2).
Вот табличка по Java:
github. com/benblack86/java-snippets/blob/master/resources/java_collections.pdf
А вот, например, универсальная (но в Java некоторые коллекции не так называются):
bigocheatsheet. com/
Сергей Алексеев
Сергей Алексеев
89 477
Лучший ответ
Константин Курылёв Спасибо, видимо наш руководитель что то напутал, дав нам этот тест, зачем мне это нужно знать, не понимаю, так просто, для статистики что ли..., по мне так без разницы на сложность алгоритма, главное скорость и производительность, так это я и так знаю, где и какой способ применить. Еще раз спасибо за развернутый ответ, вопрос закрыт.
Что непонятного? Поиск нужного за О*логарифм от размерности массива. Где - О - константа. Просто есть алгоритмы, ищущие за О * размерность массива!
PM
Professional Master
59 355
Константин Курылёв Ничего не понятно, похоже мне еще рано решать такие задачи.
Alisher Abylgaziev *рукалицо*
Какая еще константа? Нафиг давать такие ответы?
Это -- асимптотическая оценка сложности алгоритма, зависимость времени работы алгоритма от количества элементов n, которые он обрабатывает.
Константин Курылёв И как это вычислять, почему бы не указать просто в секундах, обязательно надо какую то математическую приблуду вставить в задачу, чтобы мозг взорвался.

Похожие вопросы