2. Основы алгоритмов Flashcards

1
Q

Какая наилучшая сложность может быть у функции, капитализирующей первый символ в строке?

A

O(N) — строки в C# менять нельзя, поэтому придется создать новую, скопировав символы исходной

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Какие известные вам структуры данных позволяют получить значение по ключу за O(1)?

A

Array, List, Dictionary, Hashtable

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Как можно посчитать сумму элементов массива без циклов и библиотечных функций?

A

С помощью рекурсии. Сумма пустого массива — 0. Сумма непустого — это первый элемент + сумма оставшейся части массива.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Сортировка пузырьком. Опишите идею, временную и ёмкостную сложность алгоритма.

A

Последовательно каждое значение в массиве передвигается к началу (всплывает) до нужной позиции. Временная сложность O(n²), ёмкостная — O(1)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Сортировка слиянием. Опишите идею, временную и ёмкостную сложность алгоритма.

A

Массив разбивается на две примерно равные части, каждая сортируется этим же алгоритмом, затем отсортированные части объединяются. Временная сложность O(n log n). Емкостная — O(n)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Быстрая сортировка. Опишите идею, временную и ёмкостную сложность алгоритма.

A

Выбирается элемент разделитель, после чего элементы массива переставляются так, чтобы слева оказались элементы меньшие разделителя, а справа большие. Дальше на каждой из двух частей вызываем сортировку рекурсивно. Временная сложность O(n²), но в среднем случае O(n log n). Ёмкостная — O(n) на хранение данных на стеке при рекурсивных вызовах.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Можно ли найти элемент в отсортированном массиве быстрее, чем за линейный просмотр?

A

Да, с помощью бинарного поиска.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Идея и временная сложность бинарного поиска

A

Сравнивать элемент из середины массива с искомым и в зависимости от результата сравнения искать в левой или правой половине массива. Временная сложность O(log n)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Дайте определение временной сложности алгоритма

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Дайте определение ёмкостной сложности алгоритма

A

Это функция, которая размеру входных данных ставит в соответствие точную верхнюю грань количества дополнительной памяти, которое требуется алгоритму на входах заданного размера.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Почему быстрая сортировка называется быстрой?

A

Несмотря на то, что ее сложность O(n²), в среднем она работает быстрее, чем сортировка слиянием и многие другие сортировки.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Зачем нужна O-нотация для описания временной сложности алгоритма?

A

“Количество элементарных операций” в определении сложности в реальности очень условное понятие. Процессоры устроены сложно и даже одна и та же операция может иметь разную стоимость в зависимости от ситуации. Поэтому точное значение сложности не имеет смысла, а проще работать с оценкой сложности.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Чем Θ(n) отличается от O(n)?

A

Θ — это точная оценка асимптотики, а O — лишь оценка сверху.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Какова сложность добавления элемента в начало List?

A

O(n). List реализован поверх массива. Для вставки нового элемента в начало, придется сдвинуть вправо все элементы List на одну позицию.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly