Skip to main content

combinatorics

Counting principles, permutations, combinations, generating functions, partition theory, and combinatorial algorithms for enumeration and optimization.

Ir a la instalación

Datos de origen

Repositorio
NeuralBlitz/Agent-Gateway
Última actividad en el origen
9 de abril de 2026 a las 10:58
Idioma detectado de SKILL.md
inglés
Estrellas
1
Forks
0

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
Combinatorics
description
Counting principles, permutations, combinations, generating functions, partition theory, and combinatorial algorithms for enumeration and optimization.
license
MIT
compatibility
python>=3.8
audience
mathematicians, computer-scientists, researchers, programmers
category
mathematics
# Combinatorics ## What I Do I provide comprehensive combinatorics tools including counting principles, permutations, combinations, generating functions, partition theory, and combinatorial algorithms for enumeration and optimization problems. ## When to Use Me - Counting and enumeration problems - Algorithm complexity analysis - Cryptographic key space analysis - Lottery and probability calculations - Tournament bracket design - Resource allocation counting ## Core Concepts - **Permutations**: Ordered arrangements, n! - **Combinations**: Unordered selections, binomial coefficients - **Generating Functions**: Power series for counting - **Partitions**: Integer partitions, Ferrers diagrams - **Inclusion-Exclusion**: Counting with overlaps - **Recurrence Relations**: Fibonacci, Catalan numbers - **Pigeonhole Principle**:抽屉原理, counting arguments - **Catalan Numbers**: Dyck paths, tree enumeration ## Code Examples ### Basic Counting ```python from math import comb, perm, factorial def permutations(n, k): return factorial(n) // factorial(n - k) def combinations(n, k): return factorial(n) // (factorial(k) * factorial(n - k)) print(f"P(10, 3) = {permutations(10, 3)}") print(f"C(10, 3) = {comb(10, 3)}") def multinomial(n, *ks): total = factorial(n) for k in ks: total //= factorial(k) return total print(f"Multinomial(6, 2, 2, 2): {multinomial(6, 2, 2, 2)}") ``` ### Inclusion-Exclusion Principle ```python def inclusion_exclusion(sets): n = len(sets) total = 0 for mask in range(1, 1 << n): intersection = None bits = 0 for i in range(n): if mask & (1 << i): bits += 1 intersection = sets[i] if intersection is None else intersection & sets[i] if bits % 2 == 1: total += len(intersection) if intersection else 0 else: total -= len(intersection) if intersection else 0 return total A = {1, 2, 3, 4, 5} B = {3, 4, 5, 6, 7} C = {5, 7, 9, 11} result = inclusion_exclusion([A, B, C]) print(f"|A ∪ B ∪ C| = {result}") ``` ### Catalan Numbers ```python from functools import lru_cache @lru_cache(None) def catalan(n): if n <= 1: return 1 total = 0 for i in range(n): total += catalan(i) * catalan(n - 1 - i) return total @lru_cache(None) def catalan_dp(n): C = [0] * (n + 1) C[0] = 1 for i in range(1, n + 1): C[i] = sum(C[j] * C[i - 1 - j] for j in range(i)) return C[n] for n in range(10): print(f"C({n}) = {catalan(n)}") ``` ### Generating Functions ```python from collections import defaultdict class GeneratingFunction: def __init__(self): self.coeffs = defaultdict(int) self.coeffs[0] = 1 def __add__(self, other): result = GeneratingFunction() for k in set(list(self.coeffs.keys()) + list(other.coeffs.keys())): result.coeffs[k] = self.coeffs[k] + other.coeffs[k] return result def __mul__(self, other): result = GeneratingFunction() for i, a in self.coeffs.items(): for j, b in other.coeffs.items(): result.coeffs[i + j] += a * b return result def coefficient(self, n): return self.coeffs[n] gf = GeneratingFunction() for i in range(10): gf = gf + GeneratingFunction() print(f"Coefficient of x^5: {gf.coefficient(5)}") ``` ### Integer Partitions ```python from functools import lru_cache @lru_cache(None) def partitions(n, max_val=None): if max_val is None: max_val = n if n == 0: return 1 if n < 0 or max_val == 0: return 0 return partitions(n, max_val - 1) + partitions(n - max_val, max_val) def partitions_list(n): result = [[]] for i in range(1, n + 1): new_partitions = [] for p in result: new_partitions.append(p + [i]) result.extend(new_partitions) return [p for p in result if sum(p) == n] print(f"p(5) = {partitions(5)}") parts = partitions_list(5) print(f"All partitions of 5: {parts}") ``` ## Best Practices 1. **Symmetry**: Use combinatorial identities to simplify 2. **Memoization**: Cache recursive counting results 3. **Generating Functions**: Use for complex counting 4. **Dynamic Programming**: Bottom-up for large n 5. **Symmetry**: Exploit for counting optimization ## Common Patterns ```python # Stars and bars theorem def stars_and_bars(n, k): return comb(n + k - 1, k - 1) # Permutation with repetition def permutation_with_repetition(n, *counts): return factorial(n) // product(factorial(c) for c in counts) # Derangements (subfactorial) from functools import lru_cache @lru_cache(None) def derangement(n): if n == 0: return 1 if n == 1: return 0 return (n - 1) * (derangement(n - 1) + derangement(n - 2)) ``` ## Core Competencies 1. Permutation and combination counting 2. Generating functions 3. Inclusion-exclusion principle 4. Catalan and special numbers 5. Partition theory
Ver en GitHub