Мне нужно написать программу на C (для моего задания по дискретной математике), которая находит количество онто-функций из набора A (|A| = m)
в набор B (|B|=n)
и отображает все эти функции. Количество онто-функций, которые я вычислил с помощью кода:
for(k=0; k<n; k++)
x = x + pow( -1, k) * combination( n, n - k ) * pow( ( n - k ), m);
Где комбинация — это функция, которая находит количество возможных комбинаций.
Например, если A = {1,2,3}, B={a,b,c}, то количество онто-функций, вычисляемых по формуле, равно 3^3 - 3(2^3) + 3 = 6. Один из возможных решение f = {(1,a),(2,b),(3,c)} [я знаю, что это решение].
Но моя проблема: как отобразить каждое решение!? Это просто тривиальный пример. Но если значения m и n увеличиваются (при условии, что m>=n), то количество возможных on-функций увеличивается экспоненциально!! Например, если m=7 и n=4, получается 8400 функций!
Я не могу придумать никакого метода для отображения каждой функции, существующей между A и B.