Subfakultät Rechner
Online Berechnung der Derangements !n für fixpunktfreie Permutationen
Geben Sie eine natürliche Zahl n ein und klicken Sie auf Berechnen um die Subfakultät zu ermitteln. Die Subfakultät !n ist die Anzahl der Derangements - Permutationen von n Objekten, bei denen kein Objekt an seiner ursprünglichen Position bleibt. Dies ist das berühmte Hutproblem und findet Anwendung in kombinatorischen Modellen der Statistik, Informatik und Spieltheorie.
💡 Subfakultät
\(!n = n! \sum_{i=0}^{n} \frac{(-1)^i}{i!} \approx \frac{n!}{e}\)
Die Subfakultät verstehen
Die Subfakultät !n ist die Anzahl der Derangements von n Objekten - das sind Permutationen, bei denen kein Objekt an seiner ursprünglichen Position bleibt. Diese Funktion entsteht aus dem berühmten Hutproblem: Wie viele Möglichkeiten gibt es, n Hüte an n Personen zurückzugeben, sodass niemand seinen eigenen Hut erhält? Die Subfakultät findet breite Anwendung in kombinatorischen Modellen der Statistik, Informatik und Spieltheorie, wenn Fixpunkte ausgeschlossen sind.
🎭 Definition
Mathematische Formen:
📊 Eigenschaften
- • !0 = 1, !1 = 0
- • !n ≈ n!/e für große n
- • Rekursive Beziehung
- • Inklusions-Exklusions-Prinzip
- • Fixpunktfreie Permutationen
🎯 Anwendungen
- • Hutproblem
- • Fixpunktfreie Permutationen
- • Spieltheorie
- • Wahrscheinlichkeitstheorie
⭐ Beziehungen
- • !n ≈ n!/e
- • !n = ⌊n!/e + 1/2⌋
- • Rencontres-Problem
- • Euler-Zahlen-Verallgemeinerung
Mathematische Eigenschaften
🎭 Grundlegende Eigenschaften
Wichtige mathematische Eigenschaften der Subfakultät:
\[\text{Definition: } !n = n! \sum_{i=0}^{n} \frac{(-1)^i}{i!}\] \[\text{Rekursion: } !n = (n-1)(!(n-1) + !(n-2)) \text{ für } n \geq 2\] \[\text{Alternative: } !n = n \cdot !(n-1) + (-1)^n\] \[\text{Basis: } !0 = 1, \quad !1 = 0\] \[\text{Asymptotik: } !n \approx \frac{n!}{e} \text{ für große } n\]
🔄 Inklusions-Exklusion-Prinzip
Herleitung über Inklusions-Exklusion:
\[\text{Anzahl Permutationen mit Fixpunkten: } \sum_{k=1}^{n} (-1)^{k+1} \binom{n}{k} (n-k)!\] \[\text{Fixpunktfreie Permutationen: } !n = n! - \sum_{k=1}^{n} (-1)^{k+1} \binom{n}{k} (n-k)!\] \[= n! \sum_{k=0}^{n} \frac{(-1)^k}{k!}\] \[\text{Rundungsformel: } !n = \left\lfloor \frac{n!}{e} + \frac{1}{2} \right\rfloor\]
📊 Wichtige Werte
Häufig verwendete Subfakultäten:
\[!0 = 1\] \[!1 = 0\] \[!2 = 1\] \[!3 = 2\] \[!4 = 9\] \[!5 = 44\] \[!6 = 265\] \[!7 = 1{.}854\] \[!10 = 1{.}334{.}961\]
Praktische Anwendungsbeispiele
📝 Beispiel 1: Das klassische Hutproblem
Aufgabe: n Personen geben ihre Hüte ab
Gegeben: 4 Personen mit verschiedenen Hüten
Berechnung:
\[\text{Anzahl Möglichkeiten, dass niemand seinen Hut erhält} = !4\] \[!4 = 4! \sum_{i=0}^{4} \frac{(-1)^i}{i!}\] \[= 24 \left(1 - 1 + \frac{1}{2} - \frac{1}{6} + \frac{1}{24}\right)\] \[= 24 \times \frac{3}{8} = 9\]
Interpretation: Von 24 möglichen Hutverteilungen sind 9 völlig falsch
📝 Beispiel 2: Briefumschlag-Problem
Aufgabe: Briefe in falsche Umschläge
Szenario: 5 Briefe und 5 adressierte Umschläge
Berechnung:
\[\text{Wahrscheinlichkeit völlig falscher Zuordnung} = \frac{!5}{5!}\] \[\frac{!5}{5!} = \frac{44}{120} = \frac{11}{30} \approx 0.367\] \[\text{Asymptotisch: } \lim_{n \to \infty} \frac{!n}{n!} = \frac{1}{e} \approx 0.368\]
Anwendung: Etwa 36.8% aller Permutationen sind fixpunktfrei
📝 Beispiel 3: Rencontres-Problem
Aufgabe: Kartenspiel ohne Treffer
Gegeben: 52 Karten werden einzeln aufgedeckt
Berechnung:
\[\text{Wahrscheinlichkeit für keine Übereinstimmung} \approx \frac{1}{e}\] \[\text{Erwartete Anzahl Übereinstimmungen} = 1\] \[\text{Varianz der Übereinstimmungen} = 1\] \[\text{Für große } n: P(\text{keine Treffer}) \to \frac{1}{e} \approx 0.368\]
Bedeutung: Überraschend konstante Wahrscheinlichkeit unabhängig von n
Anwendungen in verschiedenen Bereichen
🎯 Kombinatorik
- • Fixpunktfreie Permutationen
- • Inklusions-Exklusions-Prinzip
- • Rencontres-Problem
- • Fibonacci-Verallgemeinerungen
🎲 Wahrscheinlichkeit
- • Zufällige Permutationen
- • Matching-Probleme
- • Coupon-Collector-Problem
- • Extremwertstatistik
🎮 Spieltheorie
- • Symmetrische Spiele
- • Kartenspiele
- • Zuteilungsprobleme
- • Faire Aufteilung
💻 Informatik
- • Algorithmenanalyse
- • Datenstrukturen
- • Kryptographie
- • Randomisierte Algorithmen
Implementierung und Code
💻 Code-Implementierungen
Effiziente Implementierung der Subfakultät:
Python:
import math
def subfactorial(n):
"""Berechnet die Subfakultät !n (Derangements)"""
if n < 0:
raise ValueError("n muss >= 0 sein")
if n == 0 or n == 1:
return 1 if n == 0 else 0
# Rekursive Methode
return (n - 1) * (subfactorial(n - 1) + subfactorial(n - 2))
def subfactorial_iterative(n):
"""Iterative Implementierung"""
if n == 0: return 1
if n == 1: return 0
prev_prev = 1 # !0
prev = 0 # !1
for i in range(2, n + 1):
current = (i - 1) * (prev + prev_prev)
prev_prev, prev = prev, current
return prev
def subfactorial_formula(n):
"""Mit Inklusions-Exklusions-Formel"""
if n == 0: return 1
factorial_n = math.factorial(n)
sum_term = sum((-1)**i / math.factorial(i) for i in range(n + 1))
return int(factorial_n * sum_term)
def subfactorial_approximation(n):
"""Näherung für große n"""
if n == 0: return 1
return round(math.factorial(n) / math.e)
JavaScript:
function subfactorial(n) {
if (n < 0) throw new Error("n muss >= 0 sein");
if (n === 0) return 1;
if (n === 1) return 0;
let prev2 = 1, prev1 = 0;
for (let i = 2; i <= n; i++) {
let current = (i - 1) * (prev1 + prev2);
prev2 = prev1;
prev1 = current;
}
return prev1;
}
C++:
#include <iostream>
#include <vector>
long long subfactorial(int n) {
if (n < 0) throw std::invalid_argument("n must be >= 0");
if (n == 0) return 1;
if (n == 1) return 0;
long long prev2 = 1, prev1 = 0;
for (int i = 2; i <= n; ++i) {
long long current = (i - 1) * (prev1 + prev2);
prev2 = prev1;
prev1 = current;
}
return prev1;
}
🎯 Hutproblem-Simulator
Simulation des klassischen Hutproblems:
Python Hutproblem-Simulator:
import random
import math
class HatProblemSimulator:
@staticmethod
def subfactorial(n):
"""Exakte Subfakultät"""
if n == 0: return 1
if n == 1: return 0
prev2, prev1 = 1, 0
for i in range(2, n + 1):
current = (i - 1) * (prev1 + prev2)
prev2, prev1 = prev1, current
return prev1
@staticmethod
def simulate_hat_problem(n, trials=100000):
"""Simuliert das Hutproblem"""
derangements = 0
for _ in range(trials):
# Zufällige Permutation
permutation = list(range(n))
random.shuffle(permutation)
# Prüfe auf Fixpunkte
is_derangement = all(permutation[i] != i for i in range(n))
if is_derangement:
derangements += 1
return derangements
@staticmethod
def analyze_convergence(max_n=10, trials=10000):
"""Analysiert Konvergenz zu 1/e"""
print("n\tExakt\tSimulation\tVerhältnis\t1/e")
print("-" * 50)
for n in range(2, max_n + 1):
exact = HatProblemSimulator.subfactorial(n)
simulated = HatProblemSimulator.simulate_hat_problem(n, trials)
exact_ratio = exact / math.factorial(n)
simulated_ratio = simulated / trials
print(f"{n}\t{exact}\t{simulated}\t{exact_ratio:.4f}\t{1/math.e:.4f}")
# Verwendung
simulator = HatProblemSimulator()
print(f"!5 = {simulator.subfactorial(5)}")
print(f"Simulation für n=5: {simulator.simulate_hat_problem(5)}")
simulator.analyze_convergence()
🎯 Statistische Analyse
Asymptotische Eigenschaften und Approximationen:
Python Statistische Analyse:
import math
import numpy as np
import matplotlib.pyplot as plt
class DerangementAnalysis:
@staticmethod
def subfactorial(n):
if n == 0: return 1
if n == 1: return 0
prev2, prev1 = 1, 0
for i in range(2, n + 1):
current = (i - 1) * (prev1 + prev2)
prev2, prev1 = prev1, current
return prev1
@staticmethod
def rounding_formula(n):
"""Rundungsformel: round(n!/e)"""
return round(math.factorial(n) / math.e)
@staticmethod
def probability_no_fixed_points(n):
"""Wahrscheinlichkeit für keine Fixpunkte"""
return DerangementAnalysis.subfactorial(n) / math.factorial(n)
@staticmethod
def error_analysis(max_n=15):
"""Fehleranalyse der Rundungsformel"""
print("n\tExakt\tRundung\tFehler\tP(keine Fixpunkte)")
print("-" * 60)
for n in range(1, max_n + 1):
exact = DerangementAnalysis.subfactorial(n)
rounded = DerangementAnalysis.rounding_formula(n)
error = abs(exact - rounded)
prob = DerangementAnalysis.probability_no_fixed_points(n)
print(f"{n}\t{exact}\t{rounded}\t{error}\t{prob:.6f}")
print(f"\n1/e ≈ {1/math.e:.6f}")
# Analyse durchführen
analysis = DerangementAnalysis()
analysis.error_analysis()
# Konvergenz visualisieren
n_values = range(1, 21)
probabilities = [analysis.probability_no_fixed_points(n) for n in n_values]
target = [1/math.e] * len(n_values)
plt.figure(figsize=(10, 6))
plt.plot(n_values, probabilities, 'bo-', label='P(!n/n!)')
plt.plot(n_values, target, 'r--', label='1/e ≈ 0.368')
plt.xlabel('n')
plt.ylabel('Wahrscheinlichkeit')
plt.title('Konvergenz der Derangement-Wahrscheinlichkeit zu 1/e')
plt.legend()
plt.grid(True)
plt.show()
💡 Wichtige Eigenschaften der Subfakultät:
- Derangements: !n zählt Permutationen ohne Fixpunkte
- Hutproblem: Klassisches kombinatorisches Problem
- Asymptotik: !n ≈ n!/e für große n
- Wahrscheinlichkeit: P(keine Fixpunkte) → 1/e ≈ 0.368
🎭 Anwendungsgebiete der Subfakultät:
- Kombinatorik: Fixpunktfreie Permutationen, Inklusions-Exklusions-Prinzip
- Wahrscheinlichkeit: Zufällige Permutationen, Matching-Probleme
- Spieltheorie: Symmetrische Spiele, Kartenspiele, Zuteilungsprobleme
- Informatik: Algorithmenanalyse, randomisierte Algorithmen, Kryptographie
acos - Arkuskosinus
acot - Arkuskotangens
acsc - Arkuskosekans
asec - Arkussekans
asin - Arkussinus
atan - Arkustangens
atan2 - Arkustangens von y/x
cos - Kosinus
cot - Kotangens
csc - Kosekans
sec - Sekans
sin - Sinus
sinc - Kardinalsinus
tan - Tangens
hypot - Hypotenuse
deg2rad - Grad in Radiant
rad2deg - Radiant in Grad
Hyperbolik
acosh - Arkuskosinus hyperbolikus
asinh - Areasinus hyperbolikus
atanh - Arkustangens hyperbolikus
cosh - Kosinus hyperbolikus
sinh - Sinus hyperbolikus
tanh - Tangens hyperbolikus
Logarithmus
log - Logarithmus zur angegebene Basis
ln - Natürlicher Logarithmus zur Basis e
log10 - Logarithmus zur Basis 10
log2 - Logarithmus zur Basis 2
exp - Exponenten zur Basis e
Aktivierung
Softmax
Sigmoid
Derivate Sigmoid
Logit
Derivate Logit
Softsign
Derivate Softsign
Softplus
Logistic
Gamma
Eulersche Gamma Funktion
Lanczos Gamma-Funktion
Stirling Gamma-Funktion
Log Gamma-Funktion
Beta
Beta Funktion
Logarithmische Beta Funktion
Unvollstaendige Beta Funktion
Inverse unvollstaendige Beta Funktion
Fehlerfunktionen
erf - Fehlerfunktion
erfc - komplementäre Fehlerfunktion
Kombinatorik
Fakultät
Semifakultät
Steigende Fakultät
Fallende Fakultät
Subfakultät
Permutationen und Kombinationen
Permutation
Kombinationen
Mittlerer Binomialkoeffizient
Catalan-Zahl
Lah Zahl