Permutation Rechner
Online Berechnung von P(n,k) für geordnete Anordnungen ohne Wiederholung
Geben Sie die Grundmenge n und optional die Auswahl k ein und klicken Sie auf Berechnen um die Permutation zu ermitteln. Permutationen P(n,k) berechnen die Anzahl der möglichen geordneten Anordnungen von k Elementen aus n verfügbaren Elementen ohne Wiederholung. Bei leerer Eingabe für k wird die vollständige Permutation P(n,n) = n! berechnet.
💡 Permutation
\(P(n,k) = \frac{n!}{(n-k)!} = n \times (n-1) \times \cdots \times (n-k+1)\)
Permutationen verstehen
Eine Permutation ist eine geordnete Anordnung von Elementen einer Menge, bei der die Reihenfolge wichtig ist und jedes Element höchstens einmal verwendet wird. Permutationen werden durch P(n,k) oder ⁿPₖ bezeichnet und berechnen die Anzahl der Möglichkeiten, k Elemente aus einer Menge von n Elementen auszuwählen und anzuordnen. Dies ist fundamental für Wahrscheinlichkeitsrechnung, Kombinatorik und Statistik.
🔄 Definition
Mathematische Formen:
📊 Eigenschaften
- • P(n,0) = 1 (leere Anordnung)
- • P(n,n) = n! (vollständige Permutation)
- • P(n,1) = n
- • Reihenfolge wichtig
- • Ohne Wiederholung
🎯 Anwendungen
- • Rangfolgen und Rankings
- • Sitzordnungen
- • Passwort-Kombinationen
- • Wettkampf-Platzierungen
⭐ Spezialfälle
- • Vollständige Permutation: P(n,n)
- • Partielle Permutation: P(n,k)
- • Zirkuläre Permutation: (n-1)!
- • Mit Wiederholung: nᵏ
Mathematische Eigenschaften
🔄 Grundlegende Eigenschaften
Wichtige mathematische Eigenschaften von Permutationen:
\[\text{Definition: } P(n,k) = \frac{n!}{(n-k)!} = n \times (n-1) \times \cdots \times (n-k+1)\] \[\text{Vollständige Permutation: } P(n,n) = n!\] \[\text{Spezialfälle: } P(n,0) = 1, \quad P(n,1) = n\] \[\text{Beziehung zu Kombinationen: } P(n,k) = k! \times C(n,k)\] \[\text{Rekursion: } P(n,k) = P(n-1,k) + k \times P(n-1,k-1)\]
🔄 Unterschied: Permutation vs. Kombination
Abgrenzung zu Kombinationen:
\[\text{Permutation (Reihenfolge wichtig): } P(n,k) = \frac{n!}{(n-k)!}\] \[\text{Kombination (Reihenfolge unwichtig): } C(n,k) = \frac{n!}{k!(n-k)!}\] \[\text{Beziehung: } P(n,k) = k! \times C(n,k)\] \[\text{Beispiel: } P(5,3) = 60, \quad C(5,3) = 10, \quad 60 = 3! \times 10\]
📊 Wichtige Werte
Häufig verwendete Permutationen:
\[\text{Vollständige Permutationen:}\] \[P(3,3) = 3! = 6\] \[P(4,4) = 4! = 24\] \[P(5,5) = 5! = 120\] \[\text{Partielle Permutationen:}\] \[P(5,2) = \frac{5!}{3!} = 20\] \[P(7,3) = \frac{7!}{4!} = 210\] \[P(10,2) = \frac{10!}{8!} = 90\]
Praktische Anwendungsbeispiele
📝 Beispiel 1: Wettkampf-Platzierungen
Aufgabe: Anzahl möglicher Platzierungen für die ersten 3 Plätze
Gegeben: 8 Teilnehmer in einem Wettbewerb
Berechnung:
\[\text{Anzahl Möglichkeiten} = P(8,3)\] \[P(8,3) = \frac{8!}{(8-3)!} = \frac{8!}{5!} = 8 \times 7 \times 6 = 336\] \[\text{Erklärung:}\] \[\text{1. Platz: 8 Möglichkeiten}\] \[\text{2. Platz: 7 Möglichkeiten}\] \[\text{3. Platz: 6 Möglichkeiten}\]
Interpretation: 336 verschiedene Möglichkeiten für die ersten drei Plätze
📝 Beispiel 2: Sitzordnung am runden Tisch
Aufgabe: Sitzordnungen von 6 Personen am runden Tisch
Szenario: Zirkuläre Anordnung (Rotation egal)
Berechnung:
\[\text{Lineare Anordnung: } P(6,6) = 6! = 720\] \[\text{Zirkuläre Anordnung: } \frac{6!}{6} = \frac{720}{6} = 120\] \[\text{Allgemein für n Personen: } (n-1)!\] \[\text{Mit fixem Platz für eine Person: } (n-1)! = 5! = 120\]
Anwendung: Unterschied zwischen linearen und zirkulären Permutationen
📝 Beispiel 3: Passwort-Sicherheit
Aufgabe: 4-stelliges Passwort aus 10 Ziffern
Gegeben: Ziffern 0-9, keine Wiederholung erlaubt
Berechnung:
\[\text{Ohne Wiederholung: } P(10,4) = \frac{10!}{6!} = 10 \times 9 \times 8 \times 7 = 5{.}040\] \[\text{Mit Wiederholung: } 10^4 = 10{.}000\] \[\text{Sicherheitsfaktor: } \frac{5{.}040}{10{.}000} = 0.504\] \[\text{Bei 26 Buchstaben: } P(26,4) = 26 \times 25 \times 24 \times 23 = 358{.}800\]
Bedeutung: Ohne Wiederholung reduziert sich die Anzahl möglicher Passwörter
Anwendungen in verschiedenen Bereichen
🎯 Kombinatorik
- • Anordnungen ohne Wiederholung
- • Beziehung zu Binomialkoeffizienten
- • Stirling-Zahlen
- • Zyklentypen
📊 Wahrscheinlichkeit
- • Gleichwahrscheinliche Ereignisse
- • Bedingte Wahrscheinlichkeiten
- • Urnenmodelle
- • Sampling ohne Zurücklegen
🎮 Praktische Anwendungen
- • Wettkampf-Rankings
- • Sitzordnungen
- • Spielkarten-Verteilungen
- • Arbeitsplan-Erstellung
💻 Informatik
- • Algorithmen-Design
- • Sortieralgorithmen
- • Suchstrategien
- • Kryptographische Verfahren
Implementierung und Code
💻 Code-Implementierungen
Effiziente Implementierung von Permutationen:
Python:
import math
from itertools import permutations
def permutation_count(n, k=None):
"""Berechnet P(n,k) = n!/(n-k)!"""
if k is None:
k = n # Vollständige Permutation
if k > n or k < 0:
return 0
if k == 0:
return 1
return math.factorial(n) // math.factorial(n - k)
def permutation_direct(n, k):
"""Direkte Berechnung ohne Fakultät"""
if k > n or k < 0:
return 0
if k == 0:
return 1
result = 1
for i in range(n, n - k, -1):
result *= i
return result
def generate_permutations(items, k=None):
"""Generiert alle k-Permutationen einer Liste"""
if k is None:
k = len(items)
return list(permutations(items, k))
# Mit itertools (Python standard library)
from itertools import permutations
result = list(permutations([1, 2, 3, 4], 2))
print(f"P(4,2) Permutationen: {result}")
JavaScript:
function permutationCount(n, k = n) {
if (k > n || k < 0) return 0;
if (k === 0) return 1;
let result = 1;
for (let i = n; i > n - k; i--) {
result *= i;
}
return result;
}
function generatePermutations(arr, k = arr.length) {
if (k === 0) return [[]];
if (k > arr.length) return [];
const result = [];
for (let i = 0; i < arr.length; i++) {
const rest = arr.slice(0, i).concat(arr.slice(i + 1));
const perms = generatePermutations(rest, k - 1);
for (const perm of perms) {
result.push([arr[i], ...perm]);
}
}
return result;
}
C++:
#include <iostream>
#include <vector>
#include <algorithm>
long long permutationCount(int n, int k) {
if (k > n || k < 0) return 0;
if (k == 0) return 1;
long long result = 1;
for (int i = n; i > n - k; --i) {
result *= i;
}
return result;
}
// Mit STL
std::vector<int> items = {1, 2, 3, 4};
std::sort(items.begin(), items.end());
do {
// Verarbeite Permutation
} while (std::next_permutation(items.begin(), items.end()));
🎯 Erweiterte Permutations-Klasse
Umfassende Permutations-Berechnungen:
Python Permutations-Klasse:
import math
from itertools import permutations
from collections import Counter
class PermutationCalculator:
@staticmethod
def simple_permutation(n, k=None):
"""P(n,k) = n!/(n-k)!"""
if k is None: k = n
if k > n: return 0
return math.factorial(n) // math.factorial(n - k)
@staticmethod
def circular_permutation(n):
"""Zirkuläre Permutationen: (n-1)!"""
if n <= 1: return 1
return math.factorial(n - 1)
@staticmethod
def permutation_with_repetition(n, repetitions):
"""Permutationen mit Wiederholungen: n!/(n1! * n2! * ...)"""
total = math.factorial(n)
for count in repetitions:
total //= math.factorial(count)
return total
@staticmethod
def derangement(n):
"""Derangements: !n (Subfakultät)"""
if n == 0: return 1
if n == 1: return 0
return (n - 1) * (PermutationCalculator.derangement(n - 1) +
PermutationCalculator.derangement(n - 2))
@staticmethod
def generate_all_permutations(items, k=None):
"""Generiert alle Permutationen"""
if k is None: k = len(items)
return list(permutations(items, k))
@staticmethod
def lexicographic_rank(permutation, items):
"""Lexikographischer Rang einer Permutation"""
n = len(items)
rank = 0
items_copy = items.copy()
for i in range(n):
pos = items_copy.index(permutation[i])
rank += pos * math.factorial(n - 1 - i)
items_copy.remove(permutation[i])
return rank
# Beispiele
calc = PermutationCalculator()
print(f"P(7,3) = {calc.simple_permutation(7, 3)}") # 210
print(f"Zirkulär 5 Personen: {calc.circular_permutation(5)}") # 24
print(f"AABBCC Permutationen: {calc.permutation_with_repetition(6, [2, 2, 2])}") # 90
print(f"Derangement von 4: {calc.derangement(4)}") # 9
# Alle Permutationen von [1,2,3] mit k=2
perms = calc.generate_all_permutations([1, 2, 3], 2)
print(f"P(3,2) Permutationen: {perms}") # [(1,2), (1,3), (2,1), (2,3), (3,1), (3,2)]
🎯 Anwendungs-Simulator
Simulation praktischer Permutations-Probleme:
Python Anwendungs-Simulator:
import random
import math
from itertools import permutations
class PermutationSimulator:
@staticmethod
def tournament_simulator(participants, podium_places=3):
"""Simuliert Turnier-Platzierungen"""
n = len(participants)
total_arrangements = math.factorial(n) // math.factorial(n - podium_places)
print(f"Turnier mit {n} Teilnehmern:")
print(f"Mögliche Top-{podium_places} Platzierungen: {total_arrangements}")
# Beispiel-Platzierung generieren
shuffled = participants.copy()
random.shuffle(shuffled)
podium = shuffled[:podium_places]
print(f"Beispiel-Platzierung: {podium}")
return total_arrangements
@staticmethod
def password_security_analysis(alphabet_size, password_length, allow_repetition=False):
"""Analysiert Passwort-Sicherheit"""
if allow_repetition:
total_combinations = alphabet_size ** password_length
method = "mit Wiederholung"
else:
if password_length > alphabet_size:
return 0 # Unmöglich ohne Wiederholung
total_combinations = math.factorial(alphabet_size) // math.factorial(alphabet_size - password_length)
method = "ohne Wiederholung"
print(f"Passwort-Analyse ({method}):")
print(f"Alphabet-Größe: {alphabet_size}")
print(f"Passwort-Länge: {password_length}")
print(f"Mögliche Kombinationen: {total_combinations:,}")
# Brute-Force Zeit schätzen
attempts_per_second = 1000000 # 1 Million Versuche/Sekunde
seconds = total_combinations // (2 * attempts_per_second) # Durchschnittlich die Hälfte
hours = seconds // 3600
days = hours // 24
years = days // 365
if years > 0:
print(f"Geschätzte Brute-Force Zeit: {years:,} Jahre")
elif days > 0:
print(f"Geschätzte Brute-Force Zeit: {days:,} Tage")
elif hours > 0:
print(f"Geschätzte Brute-Force Zeit: {hours:,} Stunden")
else:
print(f"Geschätzte Brute-Force Zeit: {seconds:,} Sekunden")
return total_combinations
@staticmethod
def seating_arrangement(people, round_table=False):
"""Berechnet Sitzordnungen"""
n = len(people)
if round_table:
arrangements = math.factorial(n - 1) if n > 0 else 1
table_type = "runder Tisch"
else:
arrangements = math.factorial(n)
table_type = "linearer Tisch"
print(f"Sitzordnung ({table_type}):")
print(f"Personen: {people}")
print(f"Mögliche Anordnungen: {arrangements:,}")
return arrangements
# Beispiel-Simulationen
simulator = PermutationSimulator()
# Turnier-Simulation
teilnehmer = ["Alice", "Bob", "Charlie", "David", "Eva"]
simulator.tournament_simulator(teilnehmer, 3)
# Passwort-Analyse
simulator.password_security_analysis(26, 4, False) # 4 Buchstaben ohne Wiederholung
simulator.password_security_analysis(36, 6, True) # 6 Zeichen mit Wiederholung
# Sitzordnung
personen = ["Anna", "Ben", "Clara", "Daniel"]
simulator.seating_arrangement(personen, False)
simulator.seating_arrangement(personen, True)
💡 Wichtige Eigenschaften von Permutationen:
- Reihenfolge wichtig: P(n,k) berücksichtigt die Anordnung der Elemente
- Ohne Wiederholung: Jedes Element wird höchstens einmal verwendet
- Beziehung zu Kombinationen: P(n,k) = k! × C(n,k)
- Spezialfälle: Vollständige, partielle und zirkuläre Permutationen
🔄 Anwendungsgebiete von Permutationen:
- Kombinatorik: Anordnungen, Rankings, geordnete Auswahlen
- Wahrscheinlichkeit: Gleichwahrscheinliche Ereignisse, Urnenmodelle
- Praktische Anwendungen: Wettkämpfe, Sitzordnungen, Passwort-Sicherheit
- Informatik: Algorithmen-Design, Sortierung, 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