⚙️ Алгоритмы  ·  20 вопросов  ·  ~45 мин  ·  ⏱ Таймер 45:00  ·  Сложный  · 

Кучи и очереди с приоритетом

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

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выбери один ответ из четырёх. В тесте 20 вопросов и 45 минут. После завершения откроются общий процент, четыре тематические шкалы, правильные ответы и пояснения.
Вопрос 1 из 20
Является ли массив корректной min-кучей?
Python
a = [1, 4, 3, 9, 7, 8, 5]
valid = True
for parent in range(len(a) // 2):
    left = 2 * parent + 1
    right = left + 1
    if left < len(a) and a[parent] > a[left]:
        valid = False
    if right < len(a) and a[parent] > a[right]:
        valid = False
print(valid)
Вопрос 2 из 20
Какие индексы детей узла i=3 в куче длины 10?
Python
i = 3
left = 2 * i + 1
right = 2 * i + 2
print(left, right)
Вопрос 3 из 20
Что гарантирует max-куча?
Вопрос 4 из 20
Какой родитель у узла с индексом 8?
Python
i = 8
parent = (i - 1) // 2
print(parent)
Вопрос 5 из 20
Где может находиться второй по величине элемент max-кучи с различными ключами?
Вопрос 6 из 20
Какой массив получится после вставки 2 в min-кучу?
Python
a = [3, 5, 4, 9, 7, 8]
a.append(2)
i = len(a) - 1
while i > 0:
    p = (i - 1) // 2
    if a[p] <= a[i]:
        break
    a[p], a[i] = a[i], a[p]
    i = p
print(a)
Вопрос 7 из 20
Какой ребёнок должен быть выбран при просеивании вниз max-кучи?
Python
a = [4, 9, 7, 3, 8, 6]
i = 0
left, right = 1, 2
Вопрос 8 из 20
Какова сложность одной вставки в бинарную кучу?
O(\log n)
Вопрос 9 из 20
Почему heapify снизу вверх начинает с индекса n//2−1?
Python
for i in range(n // 2 - 1, -1, -1):
    sift_down(a, i)
Вопрос 10 из 20
Почему построение кучи снизу вверх занимает O(n), а не O(n log n)?
\sum_{h\ge0}\frac{n}{2^{h+1}}h=O(n)
Вопрос 11 из 20
В каком порядке будут извлечены задачи?
Python
import heapq
heap = []
for priority, order, name in [(2,0,'A'), (1,1,'B'), (1,2,'C'), (3,3,'D')]:
    heapq.heappush(heap, (priority, order, name))
out = []
while heap:
    out.append(heapq.heappop(heap)[2])
print(out)
Вопрос 12 из 20
Почему в куче Дейкстры пропускают эту запись?
Python
while heap:
    dist, v = heapq.heappop(heap)
    if dist != best[v]:
        continue
    break
Вопрос 13 из 20
Зачем добавлять номер поступления в элемент (priority, order, task)?
Вопрос 14 из 20
Какое число напечатает код, который хранит противоположные значения в min-куче?
Python
import heapq
values = [4, 9, 2]
heap = []
for x in values:
    heapq.heappush(heap, -x)
print(-heapq.heappop(heap))
Вопрос 15 из 20
Для чего очередь с приоритетом не подходит напрямую?
Вопрос 16 из 20
Какие три наибольших значения останутся в куче?
Python
import heapq
k = 3
heap = []
for x in [5, 1, 9, 3, 8, 7]:
    if len(heap) < k:
        heapq.heappush(heap, x)
    elif x > heap[0]:
        heapq.heapreplace(heap, x)
print(sorted(heap))
Вопрос 17 из 20
Какую кучу размера k нужно поддерживать для k наименьших элементов потока?
Python
def keep_k_smallest(stream, k):
    heap = []
    for value in stream:
        if len(heap) < k:
            push_candidate(heap, value)
        elif value < largest_saved(heap):
            replace_largest(heap, value)
    return heap

# Нужно выбрать тип кучи для heap.
Вопрос 18 из 20
Какова сложность обработки n элементов кучей размера k?
T(n,k)=O(n\log k)
Вопрос 19 из 20
Как получить k-й наибольший элемент из min-кучи размера k после обработки всего потока?
Python
# heap содержит k наибольших элементов
Вопрос 20 из 20
Когда quickselect может быть предпочтительнее кучи?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу