LINUX.ORG.RU

Повышение квалификации: посоветуйте литературу

 ,


14

6

Добрый день. Умею говнокодить на C++, хочу развиваться и получать больше денег. Иду смотреть вакансии яндекса и вижу вопрос:

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

std::vector

std::list

std::deque

std::set

std::multiset

std::hash_set

сортированный std::vector

сортированный std::list

сортированный std::deque

сортированный std::set

сортированный std::multiset

сортированный std::hash_set

Аргументируйте ответ, прокомментируйте правильность постановки вопроса

И понимаю, насколько я еще ничтожен. Что такое O(ln(n)) я еще понимаю, но какие алгоритмы используются в стандартной библиотеке - могу только догадываться. Хотя, возможно, вопрос на самом деле не сложный и я даже знаю как на него ответить, не углубляясь в детали реализации. Но всё равно хочется поднять свой уровень. В связи с этим посоветуйте литературу, чтобы углубить знания стандартной библиотеки C++ и вообще знания алгоритмов и с этими знаниями смочь устроиться в нормальное место.

Пожалуйста, не предлагайте перейти на другой язык, это слишком долго.

Ну и заодно пусть развернется дискуссия по поводу решения задач от яндекса:

Перемещено mono из talks



Последнее исправление: Hrenomoto (всего исправлений: 1)

Алгоритмы в STL ХОРОШИЕ. По крайней мере, асимптотическая сложность у них наилучшая из возможных.

А теперь прикинь. У тебя есть набор каких-то объектов. Что тебе нужно, чтобы отыскать в этом наборе нужный тебе объект за O(ln n)? Ответ: тебе нужна сортировка или что-то более сильное. Что более сильное? Ну, скажем, хэш-таблица, она тебе даст даже O(1). Кроме того, если уж у тебя есть сортировка, то тебе нужен O(1)-доступ к элементу.

Вот и смотри, кто из этих контейнеров отсортирован (и для кого это вообще имеет смысл), кто даёт O(1)-доступ, кто даёт хэш-таблицу.

Miguel ★★★★★★★★★★★
()
Ответ на: комментарий от Miguel

кто даёт O(1)-доступ, кто даёт хэш-таблицу.

Яндекс троллит соискателей, спрашивает за O(ln n), а не O(ln n) или быстрее. К тому же, по поводу хеша, сложно сказать какая сложность гарантируется, т.к. неизвестно есть ли коллизии и как они обрабатываются.

По поводу multiset - среди эквивалентных элементов упорядочивания нет, непонятно годится ли любой из них, или нужно искать конкретный по другому критерию.

прокомментируйте правильность постановки вопроса

Основной вопрос закопан тут.

no-such-file ★★★★★★★★★★★★★★★★
()
24 января 2015 г.
Ответ на: комментарий от alegz

Сбалансированного дерева хватит.

это и есть «сортировка». Дерево отсортировано by design, т.к. каждый эл-т встаёт на своё место сразу.

«Сбалансированное» не нужно, главное — не вырожденное. (т.е. что-бы число уровней не росло быстрее, чем какой-нить log(N)).

emulek
()
Ответ на: комментарий от alegz

Это и есть «более сильное, чем сортировка».

Miguel ★★★★★★★★★★★
()
Ответ на: комментарий от Miguel

Ну, скажем, хэш-таблица, она тебе даст даже O(1).

О боже, о божечки. Эти нули. Ты понимаешь, что хештаблица - это массив, а хеш она лишь потому, что в массиве индекс должен быть целочисленный. Хеш даёт только индекс с равномерным распределением по твоему ключу.

Дак вот есть две проблемы - проблема хеша - это коллизии и проблема массива - это его длинна, т.е. диапазон индексов. И решение одной проблемы - порождает другую. Т.е. увеличивая ширину хеша - мы увеличиваем длину масива, а тем самым сливаем память в пустоту.

Длину массива можно уменьшить делением массива - на этом основаны все хеш-массивы. Но деление массива покупается за ещё один поиск по подмассиву.

Т.е. это уже не O(1). Длину можно уменьшить коротким хешом, но короткий хеш это коллизии, а коллизии это тот же самый ещё один поиск.

Т.е. в реальном хеше нет единицы, так же как в бревне нет логарифма. То, о чем ты балаболишь - это перфектхеш.

TrueTsarC
()
Ответ на: комментарий от TrueTsarC

Молодец, возьми с полки пирожок. В игнор ты пока не отправляешься по причине недавнозарегистрированности, но комментарий «зазнайка» ты заработал.

Miguel ★★★★★★★★★★★
()
Ответ на: комментарий от Miguel

Эээ, ну практически. :) Только этот умеет шикарной статься на Лоре, пожалуй это и все. :)

BRE ★★
()
Ответ на: комментарий от emulek

Мне реально интересно, почему нулёвая балаболка, которая меня даже под анонимусом не узнаёт, позволяет себе делать такие выводы?

Какбэ любой модератор тебе подтвердит, что я Царь по мылу. Ибо мыло у царьблогов и текущего царя составлено по одному шаблону, только там были номера меньше. А царь мыла с царьблогов нигде не светил.

Ну и обоссанный емулек - первый признак царя.

TrueTsarC
()
Ответ на: комментарий от TrueTsarC

Какбэ любой модератор тебе подтвердит

что ты у модератора отсасал? Извини, я не в курсе. Я жеж не модератор, у меня отсасёшь, я тебе ещё и не то подтверждать буду.

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.