Главная / Алгоритмы и дискретные структуры /
Алгоритмы и структуры данных поиска / Тест 6
Алгоритмы и структуры данных поиска - тест 6
Упражнение 1:
Номер 1
Какие существуют основные операции для отображений Map/Dictionary?
Ответ:
 (1) Insert(v) - вставить значение v в конец словаря 
 (2) Set(k, v) - назначить ключу k значение v 
 (3) Get(k) - получить по ключу k значение v 
 (4) Extract-min - получить ключ для минимального значения 
Номер 2
С помощью каких структур данных можно реализовать Map/Dictionary?
Ответ:
 (1) простого массива 
 (2) хэш-таблиц 
 (3) односвязного или двусвязного списка 
 (4) деревьев поиска 
Номер 3
В каких случаях можно использовать прямую адресацию при реализации отображения?
Ответ:
 (1) когда количество ключей не сильно превосходит количества значений 
 (2) если можно переименовать ключи так, чтобы номера были из компактного сегмента 
 (3) если множество значений небольшое и объекты числовые, но необязательно имеют номера из ограниченного сегмента, переименовывать нет возможности 
 (4) если множество ключей k = {0,..., 264 - 1} 
Упражнение 2:
Номер 1
Какая скорость чтения и записи для отображения, реализованного с помощью прямой адресации?
Ответ:
 (1) O(log N) 
 (2) O(1) 
 (3) O(N) 
Номер 2
Что такое хэш-коллизия?
Ответ:
 (1) совпадение хэш-кодов различных ключей 
 (2) совпадение хэш-кодов для одинаковых значений из множества 
 (3) совпадение хэш-кодов одинаковых ключей 
Номер 3
Какая хэш-функция называется совершенной?
Ответ:
 (1) имеющая время работы операций чтения/записи O(1) 
 (2) не имеющая коллизий 
 (3) не использующая дополнительной памяти для работы 
Упражнение 3:
Номер 1
Для метода цепочек, использующегося при разрешении коллизий в чем заключается основная идея?
Ответ:
 (1) все ключи, имеющие разный хэш-код образуют одну ячейку-список хэш-таблицы 
 (2) все ключи, имеющие одинаковый хэш-код, попадают в одну ячейку-список хэш-таблицы 
 (3) если ячейка с вставляемым хэш-ключем уже занята, то пробуют вставить в следующую, пока не найдут для нее место 
 (4) для поиска места для вставляемого ключа ячейки таблицы просматриваются последовательно, но с некоторым шагом k 
Номер 2
Какие сложности у операций добавления и извлечения для метода цепочек?
Ответ:
 (1) O(L), O(L), L - длина цепочки для текущей хэш-функции 
 (2) O(L), O(L * N), L - длина цепочки для текущей хэш-функции 
 (3) O(L), O(L), L - длина цепочки для текущей хэш-функции 
 (4) O(1), O(L), L - длина цепочки для текущей хэш-функции 
Номер 3
Для метода открытой адресации при разрешении коллизий, какие действия предпринимаются если ячейка с вставляемым хэш-ключем уже занята?
Ответ:
 (1) пробуют вставить в следующую, пока не найдут для нее место 
 (2) перезаписывают ячейку с новым ключем 
 (3) все ключи, имеющие одинаковый хэш-код, образуют одну ячейку-список 
 (4) для поиска места для вставляемого ключа ячейки таблицы просматриваются последовательно, но с некоторым шагом k 
Упражнение 4:
Номер 1
Какая формула задает линейный способ просматривания ячеек хэш-таблицы?
Ответ:
 (1) h(k,j) = (h0(k) + j * h1(k)) mod m 
 (2) h(k,j) = (h0(k) + j) mod m 
 (3) h(k,j) = (h0(k) + j * h0(k)) mod m 
Номер 2
Какая формула задает метод двойного хэширования для просматривания ячеек хэш-таблицы?
Ответ:
 (1) h(k,j) = (h0(k) + j * h1(k)) mod m 
 (2) h(k,j) = (h0(k) + j) mod m 
 (3) h(k,j) = (h0(k) + j * h0(k)) mod m 
Номер 3
Для метода двойного хэширования, использующегося при разрешении коллизий в чем заключается основная идея?
Ответ:
 (1) все ключи, имеющие разный хэш-код образуют одну ячейку-список хэш-таблицы 
 (2) все ключи, имеющие одинаковый хэш-код, попадают в одну ячейку-список хэш-таблицы 
 (3) если ячейка с вставляемым хэш-ключем уже занята, то пробуют вставить в следующую, пока не найдут для нее место 
 (4) для поиска места для вставляемого ключа ячейки таблицы просматриваются последовательно, но с некоторым шагом k 
Упражнение 5:
Номер 1
Какое предположение должно быть выполнено, чтобы была справедлива гипотеза простого равномерного хэширования?
Ответ:
 (1) значение хеш-функции от ключа k является случайной величиной, равномерно распределенной на множестве {0, ..., M1} 
 (2) для различных ключей k1 и k2 хеш-коды h(k1) и h(k2) зависят друг от друга 
 (3) вероятность появления коллизий<= 0.01 
 (4) количество значений не должно превышать 264 - 1 
Номер 2
Пусть мы выполняем запрос Get для некоторого ключа k и пусть перед этим в структуру были вставлены некоторые ключи k1,...,kn. Для каждого ключа ki обозначим через Xi,j случайную величину, равную 1, если h(ki)=h(kj), и 0 в противном случае. Какая будет длина цепочки с индексом i?
Ответ:
 (1) Σ(i=1..n)1/Xi,j 
 (2) Σ(i=1..n)Xi,j 
 (3) Σ(i=1..n)(Xi,j * h(ki)) 
Номер 3
Для независимых, равномерно распределенных на множестве {0, ..., m1} случайных величин для каждого ключа ki обозначим через Xi,j случайную величину, равную 1, если h(ki)=h(kj), и 0 в противном случае. Чему равно матожидание случайной величины?
Ответ:
 (1) EXi,j = 1 если h(ki) ≠ h(kj). EXi,j = 0 если h(ki) = h(kj) 
 (2) EXi,j = 1/m если h(ki) ≠ h(kj). EXi,j = 1 если h(ki) = h(kj) 
 (3) EXi,j = 1/(m2) если h(ki) ≠ h(kj). EXi,j = 0 если h(ki) = h(kj) 
Упражнение 6:
Номер 1
Как вычисляется коэффициент заполнения для равномерно распределенной хэш-функции H: k -> {0,..., N-1}?
Ответ:
 (1) α = N/M 
 (2) α = M/N 
 (3) α = 1 + M/N 
 (4) α = 1 + N/M 
Номер 2
В предположении гипотезы простого равномерного хэширования, чему равно среднее время безуспешного поиска ключа для хэш-функции H: k -> {0,..., N-1}?
Ответ:
 (1) Θ(M/N) 
 (2) Θ(log M/N) 
 (3) Θ(M * N) 
 (4) Θ(M/N + 1) 
Номер 3
Каким значением ограничена вероятность коллизий для двух различных ключей для универсального семейства хэш-функций H: k -> {0,..., N-1}?
Ответ:
 (1) P[h(a) = h(b)] <= 0.5 
 (2) P[h(a) = h(b)] <= 1/N 
 (3) P[h(a) = h(b)] <= 1 
Упражнение 7:
Номер 1
В случае универсального хэширования чему равно среднее время успешного поиска ключа для хэш-функции H: k -> {0,..., N-1}, если k1, ..., kn - все ключи, присутствующие в хеш-таблице?
Ответ:
 (1) Θ(1) 
 (2) Θ(M/N + 1) 
 (3) Θ(M) 
 (4) Θ(N) 
Номер 2
Если использовать универсальное семейство хэш-функций для хранения n ключей, то при размере хэш-таблицы M = n2, какова будет вероятность получить хотя бы одну коллизию?
Ответ:
 (1) не больше 2/3 
 (2) не больше 1/2 
 (3) меньше 1/M 
 (4) меньше 1/N 
Номер 3
Каким должне быть минимальный размер хэш-таблицы, чтобы вероятность получить хотя бы одну коллизию не превосходила 1/2, если n - количество ключей?
Ответ:
 (1) n! 
 (2) n2 
 (3) n3 
 (4) 2n 
 (5) n 
Упражнение 8:
Номер 1
При каких условия можно получить свободную от коллизий хэш-функцию?
Ответ:
 (1) использовать метод открытой адресации 
 (2) если неизвестно с какими ключами предстоит иметь дело 
 (3) выбрать размер хэш-таблицы квадратичным по количеству ключей 
 (4) выбирать хэш-функции из универсального семейства 
Номер 2
Какие характеристики имеет совершенная хэш-функция?
Ответ:
 (1) имеет вероятность получения коллизий <= 1/m2, m - количество ключей 
 (2) просто вычислима, за O(1) в худшем случае 
 (3) линейное в среднем время построения 
 (4) не дает коллизий на ограниченном множестве {k1,...,kn} 
Номер 3
Отметьте верные утверждения, относящиеся к семейству универсальных хэш-функций: Ha,b = ((a*k + b) mod p) mod m, b - произвольный вычет
Ответ:
 (1) p - первое простое число, следующее после m 
 (2) семейство хэш-функций универсально, так как вероятность получить коллизию не превосходит 1/m 
 (3) m - количество ключей 
 (4) среднее время успешного поиска ключа Θ(α + 1) 
 (5) a - произвольный вычет по модулю p 
Упражнение 9:
Номер 1
Как зависит размер памяти, необходимый для реализании метода совершенного хэширования от количества ключей n?
Ответ:
 (1) квадратично 
 (2) линейно 
 (3) константно 
 (4) логарифмически 
Номер 2
За какое в среднем количество проб можно обнаружить хэш-функцию, не дающую коллизий для второго уровня схемы совершенного хэширования?
Ответ:
 (1) O(N) 
 (2) O(1) 
 (3) O(N2) 
 (4) O(log N) 
Номер 3
Пусть на первом уровне схемы совершенного хэширования используется хеш-таблица размера m = n, n - количество ключей. Пусть ni обозначает количество ключей, получивших (на первом уровне) хеш-значение i (0 <= i < m). Тогда если использовать в каждой ячейке первого уровня вышеописанную схему, свободную от коллизий, сколько потребуется дополнительной памяти?
Ответ:
 (1) O(∑ ni) 
 (2) O(∑ ni2) 
 (3) O(n) 
 (4) O(n2) 
Упражнение 10:
Номер 1
Что означает ложно-положительное срабатывание для интерфейса множества с ошибками фильтр Блюма?
Ответ:
 (1) ключ в множестве есть, а операция Contains(k) выдает False 
 (2) операция Contains(k) выдала True, а ключа в множестве нет 
 (3) при попытке удаления ключа (Remove(k)) создается его резервная копия 
 (4) если выполняется не тот запрос к множеству, который был отправлен 
Номер 2
Для фильтра Блюма как изменяется вероятность ложного срабатывания с увеличением размера хранимого множества (числа вставленных элементов)?
Ответ:
 (1) уменьшается 
 (2) увеличивается 
 (3) не изменяется 
Номер 3
Для фильтра Блюма как изменяется вероятность ложного срабатывания если объем памяти, заране заданный пользователем для хранения битового массива, увеличивается?
Ответ:
 (1) увеличивается 
 (2) уменьшается 
 (3) не изменяется 
Упражнение 11:
Номер 1
Какие существуют стандартные операции для интерфейса множества с ошибками, например для фильтра Блюма?
Ответ:
 (1) Remove(k) 
 (2) Insert(k) 
 (3) Contains(k) 
 (4) Get(k) 
Номер 2
Какие допустимы ситуации для односторонней ошибки в интерфейсе множества с ошибками?
Ответ:
 (1) разрешается ложноотрицательное срабатывание, когда ключ в множестве есть, а операция Contains(k) выдает False 
 (2) разрешается ложноположительное срабатывание, при котором операция Contains(k) выдалет True, а ключа в множестве нет 
 (3) запрещается ложноположительное срабатывание 
 (4) запрещается ложноотрицательное срабатывание 
Номер 3
Отметьте верные утверждения, относящиеся к фильтру Блюма
Ответ:
 (1) конструктивно данный фильтр представляет собой булев массив 
 (2) для проверки на принадлежность ключа k вычисляют его хэш-коды h1(k), ... , hs(k), если соответствующие ячейки равны True, то ключ принадлежит множеству 
 (3) в его реализации используется одна хэш-функция 
 (4) для добавления ключа k вычисляются его хеш-коды h1(k), ... , hs(k), после чего в соответствующие ячейки записывается значение True 
 (5) удаление элементов из фильтра Блюма можно реализовать, если он задан таблицей булевых значений 
Упражнение 12:
Номер 1
Как можно проверить, попадает ли ключ k в хэш-таблицу T фильтра Блюма, заданного хэш-функциями h1,...,hs: k -> [0, m-1] или нет?
Ответ:
 (1) вычислить логическое ИЛИ по всем значениям T[hi(k)]. Если оно равно 0 то не попадает, если 1, то попадает 
 (2) вычислить логическое И по всем значениям T[hi(k)]. Если оно равно 0 то не попадает, если 1, то попадает 
 (3) вычислить T[∑ hi(k)]. 0 - не попадает, 1 - попадает 
Номер 2
Как происходит вставка (Insert(k)) ключа k в таблицу T, реализованную фильтром Блюма?
Ответ:
 (1) вычислить хэш-коды h1(k),...,hs(k), после чего в получившиеся индексы ячеек булева массива T записать значение True 
 (2) вычислить сумму ∑ hi(k) и записать в таблицу T, в ячейку с получившимся индексом значение True 
 (3) по хэш-функции h(k) определяется булево значение и вставляется в индекс таблицы T 
 (4) вычислить хэш-коды h1(k),...,hs(k), после чего в соответствующие значения записать ключ k 
Номер 3
Предположим, что мы вставили различные k1,...,kn ключей в хэш-таблицу Блюм-фильтра с помощью хэш-функций h1(k),...,hs(k): k -> [0, m-1]. Какая будет вероятность ложного положительного срабатывания?
Ответ:
 (1) (1 - 1/m)s*n 
 (2) (1 - (1 - 1/m)s*n)s 
 (3) 1 - (1 - 1/m)s*n 
 (4) (1 - (1 - 1/m)n)s 
Номер 4
Для Блюм-фильтра, заданного хэш-функциями h1(k),...,hs(k): k -> [0, m-1], какая будет вероятность того, что после вставки n ключей произвольно выбранный бит будет равен False?
Ответ:
 (1) (1 - 1/m)s*n 
 (2) (1 - 1/m) 
 (3) 1 - (1 - 1/m)s*n 
 (4) (1 - n/m)s) 
Номер 5
Для Блюм-фильтра, заданного хэш-функциями h1(k),...,hs(k): k -> [0, m-1], какая будет вероятность того, что после вставки n ключей одна хэш-функция выдает значение, отличное от произвольно выбранного бита в таблице?
Ответ:
 (1) (1 - 1/m)s*n 
 (2) (1 - n/m) 
 (3) 1 - (1 - 1/m)s*n 
 (4) (1 - 1/m) 
Упражнение 13:
Номер 1
При реализации структуры приближенного множества (Lossy Map) с помощью более блюмового фильтра, как будет работать операция Get(k)?
Ответ:
 (1) выдает по некоторому ключу значение и с большой вероятностью это значение удовлетворяет нашим требованиям 
 (2) может выдать правильное значение, если функция определена в этой точке или если функция неопределена в этой точке, то выдать случайное значение. Или выдает Null, если функция неопределена в этой точке 
 (3) выдает значение, если функция определена в этой точке, либо выдает Null, если функция неопределена в этой точке 
Номер 2
Предположим, что при реализации структуры приближенное множество (Lossy Map) с помощью более блюмового фильтра функция отображает из ключей в один бит. Как можно реализовать такую структуру?
Ответ:
 (1) Такую структуру реализовать нельзя 
 (2) с помощью одного Блюм-фильтра для области определения функции, значению 0 будет выдаваться если функция неопределена в этой точке, 1 если функция определена или неопределена для случая ложноположительного срабатывания 
 (3) С помощью двух множеств: прообраз всех значений 0 и прообраз всех значений 1. Построить два Блюм-фильтра для этих двух множеств 
Номер 3
При реализации структуры приближенное множество (Lossy Map) с помощью двух Блюм-фильтров (использованных для множеств-прообразов 0 и 1) что нужно сделать, чтобы избежать ситуации, когда при запросе Get(k) оба Блюм-фильтра вернули 1?
Ответ:
 (1) такие значения признаются ложноположителными срабатываниями, их количество всегда невелико 
 (2) на образованном такими значениями множестве C изготавливают два более мелких Блюм-фильтра для множеств-прообразов 0 и 1, затем продолжают создание иерархии таких множеств, пока они не перестанут пересекаться 
 (3) признают такие значения равными 0 
 (4) удаляют все такие значения из множества