Префиксы и суффиксы.pptx
- Количество слайдов: 13
Префиксы и суффиксы. Наибольшая возрастающая подпоследовательность. Здесь может быть ваша реклама
Последовательность – это набор элементов некоторого множества произвольной природы. Мы будем рассматривать такие последовательности, элементы которых сравнимы между собой.
Последовательности Виды последовательностей: • Монотонные (возрастающие, убывающие, невозрастающие) Например: 1 2 3 4 5 или a b c f z • Немонотонные (неупорядоченные) Например: 1 2 6 5 2 7 1
Что такое подпоследовательность? Подпоследовательностью называется любая последовательность, которую можно получить, удаляя элементы из исходной.
Что такое префикс последовательности? Рассмотрим последовательность 1 2 3 4 5, тогда префиксами этой последовательности будут: 1; 1 2 3; 1 2 3 4 5. И того – 5 префиксов, иначе говоря префикс – это такая последовательность D, которая содержит в себе первые d элементов исходной последовательности, в том же порядке.
Что такое суффикс последовательности? Суффикс, в отличии от префикса вмещает не первые d элементов, а последние. Т. е. для строки 1 2 3 4 5 у нас есть 5 суффиксов: 5; 4 5; 3 4 5; 2 3 4 5; 1 2 3 4 5.
Задача про загадочные числа Рассмотрим такую задачу: Для заданной последовательности найти все такие числа k, что сумма первых k элементов равняется сумме последних k элементов. Решение: Обозначим исходный массив, как А. Введём ещё два массива B, где Bi – сумма элементов в префиксе длины i и С, где Сi – сумма элементов в суффиксе длины i. Очевидно что эти массивы имеют одинаковую размерность, теперь осталось просто пройтись по ним и вывести все i, такие что, Bi равно Ci.
Задача про сумму Дана последовательность, и поступают запросы на то, какова сумма элементов от l до r
Решение задачи про сумму Обозначим наш исходный массив через А. Теперь введём массив B, в котором будем хранить сумму элементов в каждом префиксе. Очевидно теперь, что сумма на отрезке от l до r равна B[r] – B[l-1], ведь чтобы перейти к значению B[i] от B[i-1] мы прибавляли значение элемента в позиции i.
Нахождение наибольшей возрастающей подпоследовательности Дана последовательность, нужно найти максимальную подпоследовательность, каждый элемент которой больше предыдущего.
Нахождение наибольшей возрастающей подпоследовательности Решение за n^2. Для каждого элемента будем хранить максимальную длину возрастающей подпоследовательности, заканчивающейся в нём. Т. е. перебираем элемент и для него перебираем такие предыдущие, которые меньше текущего, смотря ответ для них. На основании этого находим значение для текущего элемента.
Нахождение наибольшей возрастающей подпоследовательности Решение за nlogn. Теперь давайте поступим не так, как на прошлом слайде. Будем хранить для каждой длины подпоследовательности минимальный последний элемент. Пускай эти значения записаны в массив В. Очевидно, что значения в этом массиве отсортированы по возрастанию, т. к. последовательности возрастающие. Теперь мы можем найти нужное значение, пройдя бинарным поиску по этому массиву. Пройдём по нашему массиву и для каждого значения элемента найдём такое Bi, что оно меньше Acur. Где i – длина последовательности, заканчивающейся в текущем элементе Тогда нужно будет обновить значение в Bi+1: min(Bi+1, Acur); Acur – текущий элемент.
Восстановление подпоследовательности Нужно в каждом элементе хранить номер элемента после которого мы его поставили. А потом восстанавливать подобно динамике.
Префиксы и суффиксы.pptx