З огляду на два непорожні списки цілих чисел, ваше представлення повинно обчислити та повернути дискретну згортку двох. Цікаво, що якщо розглядати елементи списку як коефіцієнти многочленів, то згортання двох списків являє собою коефіцієнти добутку двох многочленів.
Визначення
З огляду на списки A=[a(0),a(1),a(2),...,a(n)]
та B=[b(0),b(1),b(2),...,b(m)]
(встановлення a(k)=0 for k<0 and k>n
та b(k)=0 for k<0 and k>m
), згортання двох визначається як A*B=[c(0),c(1),...,c(m+n)]
деc(k) = sum [ a(x)*b(y) for all integers x y such that x+y=k]
Правила
- Дозволено будь-яке зручне форматування вводу та виводу для вашої мови.
- Вбудовані модулі для згортання, створення матриць згортки, співвідношення та множення поліномів не допускаються.
Приклади
[1,1]*[1] = [1,1]
[1,1]*[1,1] = [1,2,1]
[1,1]*[1,2,1] = [1,3,3,1]
[1,1]*[1,3,3,1] = [1,4,6,4,1]
[1,1]*[1,4,6,4,1] = [1,5,10,10,5,1]
[1,-1]*[1,1,1,1,1] = [1,0,0,0,0,-1]
[80085,1337]*[-24319,406] = [-1947587115,7,542822]
[1,1]*[] = []
, і, можливо, не може утримувати[]*[] = ?
. У порожніх списках згортання недостатньо чітко визначено. Я думаю, ви повинні гарантувати, що вхідні списки непусті.