Справочник от Автор24
Поделись лекцией за скидку на Автор24

Рекурсия и динамическое программирование

  • 👀 192 просмотра
  • 📌 164 загрузки
Выбери формат для чтения
Статья: Рекурсия и динамическое программирование
Найди решение своей задачи среди 1 000 000 ответов
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Рекурсия и динамическое программирование» docx
Конспект лекции 17 Рекурсия и динамическое программирование Рекурсия – это способ решения задачи через вызов от задач аналогично исходных элементов, но меньший по масштабу. Крайний случай – это способ решения самых простых задач, где не требуют вызов от всех задач. Факториал является тем случаем, где не надо использовать рекурсию: 1) Реализации: 1) Функция факториала, в результате является целое число. Если у меня крайний случай, то возврат на 1, а иначе- возврат на f(n-1) * n def f(n : int) int: if n == 0: return 1 elif n>0: return f(n-1) * n Скорость вычисления факториала будет прямопропорциональному числу n, которое мы считаем факториал. 2) В чем состоит динамическое программирование? Я создаю массив со значениями функции. Я заложу значение функции 1 и повторю n+1 раз, чтобы заривезировать память под массив. Динамическое программирование состоит в том, что расширяет наши знания по значениях функции. Далее запускается цикл, начиная от 1 до n+1 включительно. Потом мы распечатываем данные на экран. f = [1] + [Nore] * n for i in range ( 1 , n+1): f[i] = f[1-1] * i print(f[n]) 2) Реализации: 1) Мы оформляем функцию насчет расширения значений функции. Крайний случай: утверждаем, что число n больше или равно 0. Начинаем с выделением памяти, это будет массив. Мы потом заревезируем память. Я не хочу создавать пустой список или список содержащий только 0 и 1. Остальное аллоцировать в процессе последовательности. Далее в циклах мы расширяем знания значений функции. def fib2(n : int) int: assert n >= 0 fib = [Nore] * (n+1) fib [:2] = [0,1] for k in range (2, n+1): fib[k] = fib[k-1] + fib[k-2] return fib[n] 2) Сначала оформляет функцию фибаначе, где содержатся целые числа. Крайний случай: утверждаем, что число n больше или равно 0. Теперь мы имеет право написать условие: n меньше или равно 1. F = [Nore] * 10000 def fib(n : int) int: assert (n>=0 and n<10000) if F[n] is Nore: if n<=1: F[n] = n else: F[n] = fib(n-1) + fib(n-2) return F[n] Задача о рюкзаке N штук - количество выборок предметов Асимптотика Полный перебор - O() Жадный алгоритм: M = 3 + 5 = 8 V = 6 + 5 = 11 Дискретная задача о рюкзаке F(i, k) – максимальная стоимость предметов, которая помещается в рюкзак ёмкости k, при этом можно использовать только первые i предметы. Реализация: F = [[0]*(N+1) for I in range (M+1)] for i in range (1, N+1): for k in range (1, M+1): if m[1] <= k: F[k][i] = max(F[k][i-1], v[i] + F[k-m[i]][i-1]) else: F[k][i] = F[k][i-1] F[M][N] - ответ
«Рекурсия и динамическое программирование» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot