Комбинаторная задача
От: uncommon Ниоткуда  
Дата: 14.11.18 05:42
Оценка:
Сколько разлчиных решений в целых неотрицательных числах имеет уравнение:
x1 + x2 + ... + xN = K


где все xi ограниченны некоторым числом L, которое не превосходит K:
0 <= xi <= L, для i из [1,N]
0 <= L <= K


Если L=K, то задача решается просто: это биноминальный коэффициент CKN+K-1. А как найти решение для любого L?
Re: Комбинаторная задача
От: Chorkov Россия  
Дата: 14.11.18 12:11
Оценка: 7 (2)
Здравствуйте, uncommon, Вы писали:

U>Сколько разлчиных решений в целых неотрицательных числах имеет уравнение:

U>
U>x1 + x2 + ... + xN = K
U>


U>где все xi ограниченны некоторым числом L, которое не превосходит K:

U>
U>0 <= xi <= L, для i из [1,N]
U>0 <= L <= K
U>


U>Если L=K, то задача решается просто: это биноминальный коэффициент CKN+K-1. А как найти решение для любого L?


Пусть Q(N,K,L) решение исходной задачи.
Обозначим A(N,K,L) — чесло решений задачи с ограничением
  x1 + x2 + ... + xN <= K
  0 <= xi <= L

тогда Q(N,K,L) = A(N,K,L) — A(N,K-1,L)

При отсутствии ограничения по L ( L>=K )
A(N,K,inf) = CKN+K

Введем параметр "превышение" P({xi}) = Σi=1..N xi / (L+1)
(где деление — целочисленное). Суть: число переменных в множестве {xi}, значения которых превышают L. Если значение превышает 2L+1, учитываем с весом 2, ...
Если P({xi})==0, значит xi <= L

Каждому решению с заданным превышением p, можно сопоставить решение с p=0 :
x'i == xi % (L+1)

Причем одному решению x'i соответствует Np/p! решений xi, с заданным превышением p.

Таким образом ответ:
A(N,K,L) =CKN+K - Σp=1..K/(L+1)  Np/p! * A(N,K-p*(L+1), L)
Q(N,K,L) = A(N,K,L) - A(N,K-1,L)


Учитывая, что в рекурсивной формуле на всех шагах фигурируют одни и те же значения K, сложность вычисления равна O( K/(L+1) ), если запоминать уже посчитанные значения A.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.