Розв'язник вправ по дискретній математиці/Комбінаторика/Вправи на рекурсію

Розв'язник вправ по дискретній математиці. Комбінаторика. Вправи на рекурсію

ред.

Рекурентним співвідношенням називається вираз, який дозволяє визначити наступні члени послідовності через попередні.

Під розв'язанням рекурентного співвідношення будемо розуміти формулу, яка дозволяє отримати елемент послідовності, що задається рекурсією, по його номеру, без обчислення попередніх елементів.

Наприклад, послідовність Фібоначчі:

an+1=an+an-1, a1=1, a2=1,

має розв'язком формулу Біне:

 

Де золотий перетин  

Лінійне однорідне рекурентне співвідношення з постійними коефіцієнтами

ред.

Лінійним однорідним рекурентним співвідношенням з постійними коефіцієнтами порядку   є рівняння

 

де всі коефіцієнти   постійні.

Ті ж самі коефіцієнти визначають характеристичний многочлен (або "допоміжний многочлен")

 .

Згідно з основною теоремою алгебри існує   коренів рівняння  . Ці корені відіграють вирішальну роль в знаходженні послідовності, яка відповідає заданому рекурентному співвідношенню.

Якщо всі корені   різні, то розв'язок рекурсії має вигляд:

 

де коефіцієнти   визначаються в залежності від значень початкових елементів послідовності  .

У випадку коли однакові корені присутні декілька разів (кратні корені) розв'язок рекурсії має інший вигляд. Якщо   корінь кратності   (для простого кореня  ), тоді

 

де коефіцієнти   визначаються з початкових елементів послідовності.

Алгоритм розв'язання однорідного рекурентного співвідношення

ред.

1. Скласти характеристичний поліном і розв'язати його. Виписати формулу   елемента послідовності в залежності від того чи наявні кратні корені.

2. Застосувати формулу для   елемента, до початкових елементів  , значення яких вже відомі. Таким чином буде отримана система лінійних рівнянь. Розв'язок лінійної системи дозволяє знайти остаточний вираз для  .

В якості прикладу можна зауважити, що послідовність Фібоначчі задається лінійним однорідним рекурентним співвідношенням з постійними коефіцієнтами порядку два. Застосування наведеного методу дає згадану вище формулу Біне.

Приклад розв'язання однорідного рекурентного співвідношення

ред.

Нехай  , початкові значення  . Знайти формулу для обчислення  .

1. Складаємо характеристичний поліном за допомогою наступної підстановки:

 

Тоді, з   отримуємо  .

Знаходимо корені  :  .

Так як корені різні, то тоді розв'язок рекурсії має вигляд:

 

2. Знайдемо невідомі коефіцієнти  . Для цього застосуємо формулу для  , до початкових елементів  , значення яких вже відомі з умови. Таким чином отримаємо систему лінійних рівнянь:

 
 

Розв'язок цієї лінійної системи  . Остаточний вираз для  .

Приклад розв'язання однорідного рекурентного співвідношення з комплексними числами

ред.

Нехай  , початкові значення  . Знайти формулу для обчислення  

1. Нехай   розв'язок даного рівняння і    . Тоді, рівняння   матиме вигляд

 .

Далі, розділимо отримане рівняння на  :

 .

Знайдемо його корені:   Тоді, запишемо формулу для  :

 

2. Знайдемо коєфіцієнти   і   Для цього застосуємо формулу

 

до даних елементів  . Отримаємо систему лінійних рівнянь:

 

Розв'язок цієї лінійної системи:   Остаточний вигляд для  

Приклад розв'язання однорідного рекурентного співвідношення з кратними коренями

ред.

Нехай  , початкові значення  . Знайти формулу для обчислення  .

1. Нехай   розв'язок даного рівняння і  . Тоді, рівняння   матиме вигляд

 .

Далі, розділимо отримане рівняння на  :  . Отримали квадратне рівняння:   Знайдемо його корені:

 

Так як корені   та   збігаються, тоді формула для   має такий вигляд:

 

2. Знайдемо коєфіцієнти   і   Для цього застосуємо формулу   до даних елементів  . Отримаємо систему лінійних рівнянь:

 

Розв'язок цієї лінійної системи:   Остаточний вигляд для  

Алгоритм розв'язання неоднорідного рекурентного співвідношення

ред.

1. Знайти частковий розв'язок неоднорідного рекурентного співвідношення  . Це якраз найскладніше завдання, тому що не існує єдиного алгоритму дій на цьому етапі.

2. Знайти розв'язок однорідного рекурентного співвідношення   у загальному вигляді. Невідомі коефіцієнти будуть обчислені на наступному кроці.

3. Розв'язок неоднорідного рекурентного співвідношення записати у вигляді  . Застосувати формулу для   елемента, до початкових елементів  , значення яких вже відомі. Таким чином буде отримана система лінійних рівнянь. Розв'язок лінійної системи дозволяє знайти остаточний вираз для  .

Приклад розв'язання неоднорідного рекурентного співвідношення

ред.

Нехай  , початкові значення  . Знайти формулу для обчислення  .

1. Знайдемо частковий розв'язок неоднорідного рекурентного співвідношення у вигляді  , де   — константа, яка буде знайдена. Тоді  ,  . Підставимо у рекурентне рівняння:

 
 
 

Отже, частковим розв'язком неоднорідного рекурентного співвідношення буде  

2. Знайдемо розв'язок   однорідного рекурентного співвідношення   у загальному вигляді. Невідомі коефіцієнти будуть обчислені на наступному кроці.

 
 .

Знаходимо корені:  .

Так як корені різні, то тоді розв'язок рекурсії має вигляд:

 

3. Розв'язком неоднорідного рекурентного співвідношення буде  . Знайдемо невідомі коефіцієнти  . Для цього застосуємо формулу для   до початкових елементів  , значення яких вже відомі з умови. Таким чином отримаємо систему лінійних рівнянь:

 
 

Розв'язок цієї лінійної системи  . Остаточний вираз для  .

Додаткові вправи

ред.

Розв'яжіть рекурентні співвідношення:

  •  , початкові значення  .
  •  , початкові значення  .
  •  , початкові значення  .
  •  , початкові значення  . Відповідь:  .
  •  , початкові значення  . Відповідь:  .
  •  , знайдіть загальний розв'язок. Відповідь:  .
  • Нехай   вектор довжини  , який складається з нулів та одиниць. а) Скільки існує таких векторів? б) Скільки існує таких векторів, де нулі не стоять поруч? с) Скільки векторів у яких будь-які два сусідні елемента різні?

Написати програму

ред.

Задача 1

ред.

Рекурсивного обчислення  .

Задача 2

ред.

Рекурсивного обчислення чисел Фібоначчі.

Задача 3

ред.

Розв'язати завдання з leetcode.com (Count Vowels Permutation). Given an integer n, your task is to count how many strings of length n can be formed under the following rules:

  • Each character is a lower case vowel ('a', 'e', 'i', 'o', 'u')
  • Each vowel 'a' may only be followed by an 'e'.
  • Each vowel 'e' may only be followed by an 'a' or an 'i'.
  • Each vowel 'i' may not be followed by another 'i'.
  • Each vowel 'o' may only be followed by an 'i' or a 'u'.
  • Each vowel 'u' may only be followed by an 'a'.

Since the answer may be too large, return it modulo 10^9 + 7.