⚙️ Алгоритмы  ·  20 вопросов  ·  ~40 мин  ·  ⏱ Таймер 40:00  ·  Средний  ·  👥 1 прошёл

Сложность алгоритмов и O-нотация

Быстрый взгляд на вложенные циклы часто обманывает: один из них может сокращаться, другой выполняться последовательно, а рекурсия — расходовать память даже без дополнительных массивов. Тест предлагает считать реальные операции, выводить асимптотику, сравнивать время и память и находить практическую границу между решениями.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выбери один ответ из четырёх. В тесте 20 вопросов и 40 минут. После завершения откроются общий процент, четыре тематические шкалы, правильные ответы и пояснения.
Вопрос 1 из 20
Сколько раз увеличится c при n = 5?
1+2+\dots+n=\frac{n(n+1)}{2}
Python
n = 5
c = 0
for i in range(1, n + 1):
    for j in range(i):
        c += 1
print(c)
Вопрос 2 из 20
Какое значение c будет напечатано?
Python
n = 6
c = 0
for i in range(n):
    j = i
    while j < n:
        c += 1
        j += 3
print(c)
Вопрос 3 из 20
Алгоритм последовательно сравнивает искомый ключ с элементами массива и останавливается при первом совпадении. Для массива длины n сколько сравнений возможно в худшем случае?
C_{worst}(n)=n
Вопрос 4 из 20
Какая пара «число вызовов touch — число увеличений hits» будет напечатана?
Python
touch_calls = 0

def touch(x):
    global touch_calls
    touch_calls += 1
    return x % 2 == 0

hits = 0
for i in range(8):
    if touch(i):
        hits += 1
    if i > 4 and touch(i - 1):
        hits += 1

print(touch_calls, hits)
Вопрос 5 из 20
Динамический массив увеличивает вместимость вдвое при заполнении. Почему append обычно считают амортизированно O(1), хотя отдельное расширение копирует много элементов?
Вопрос 6 из 20
Какова временная сложность в зависимости от n?
Python
total = 0
for i in range(n):
    for j in range(i, n):
        total += a[j]
Вопрос 7 из 20
Какой порядок роста у этого фрагмента?
Python
s = 0
for x in data:
    s += x

for i in range(len(data)):
    for j in range(i):
        s += data[j]
Вопрос 8 из 20
Что на самом деле утверждает запись f(n) = O(n²)?
Вопрос 9 из 20
Какова сложность фрагмента?
n\lfloor\log_2 n\rfloor
Python
count = 0
for i in range(n):
    x = n
    while x > 1:
        x //= 2
        count += 1
Вопрос 10 из 20
Рекуррентность T(n)=2T(n/2)+n описывает разбиение на две половины и линейное слияние. Каков порядок роста?
T(n)=2T(n/2)+n
Вопрос 11 из 20
Какое изменение уменьшит дополнительную память с O(n) до O(1), сохранив разворот списка?
Python
def reversed_copy(a):
    result = []
    for i in range(len(a) - 1, -1, -1):
        result.append(a[i])
    return result
Вопрос 12 из 20
Какая оценка дополнительной памяти у функции при сбалансированном делении?
Python
def search(a, left, right, x):
    if left > right:
        return -1
    mid = (left + right) // 2
    if a[mid] == x:
        return mid
    if a[mid] < x:
        return search(a, mid + 1, right, x)
    return search(a, left, mid - 1, x)
Вопрос 13 из 20
Для поиска повторяющихся значений разработчик заменил двойной цикл на проход с хеш-множеством. Что изменилось в типичном случае?
Вопрос 14 из 20
Какова пиковая дополнительная память относительно n?
Python
def prefixes(a):
    out = []
    current = []
    for x in a:
        current = current + [x]
        out.append(current)
    return out
Вопрос 15 из 20
Граф содержит 100 000 вершин и около 200 000 рёбер. Какое представление обычно разумнее по памяти?
Вопрос 16 из 20
Сколько раз выполнится тело while при n = 1000?
Python
n = 1000
k = 1
steps = 0
while k < n:
    k *= 10
    steps += 1
print(steps)
Вопрос 17 из 20
Каков порядок роста числа выполнений count += 1?
\Theta((\log_2 n)^2)
Python
count = 0
i = 1
while i < n:
    j = 1
    while j < n:
        count += 1
        j *= 2
    i *= 2
Вопрос 18 из 20
Алгоритм A работает за 1000n операций, B — за n². Какое утверждение корректно?
Вопрос 19 из 20
Начиная с какого целого n второй алгоритм выполняет больше базовых операций, если считать модели буквально?
Python
def cost_a(n):
    return 50 * n

def cost_b(n):
    return n * n
Вопрос 20 из 20
Какой порядок функций от медленной к быстрой при n→∞?

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

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

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

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