Lassen Sie uns eine Kombinationsberechnung mit Python durchführen

Problembewusstsein

In Vorheriger Artikel habe ich die Kombinationsberechnung in Python rekursiv durchgeführt, aber ich dachte, dass es andere Möglichkeiten gibt.

Überprüfung der Kombinationen

Es ist die Kombination, die ich in der Auftragskombination gelernt habe

_nC_r=\frac{n!}{r!(n-r)!}

Es war. Wenn hier "n <r" ist, ist die Kombination "0", dh

_0C_1=0

Ich verspreche "0", wenn es außerhalb der Definition liegt.

Wie eine allmähliche Formel

Dieses Mal möchte ich die Methode zum rekursiven Aufrufen der Funktion mit Python verwenden, um so etwas wie einen allmählichen Ausdruck vorzubereiten.

Zerfall 1: Verringere r

_nC_r=_nC_{r-1}\times\frac{n-r+1}{r}

Beweis

Zunächst aus der Definition

_nC_r=\frac{n!}{r!(n-r)!}=\frac{n!}{r\times(r-1)!\times(n-r)!}=\frac{n!}{(r-1)!\times(n-r)!}\times\frac{1}{r}\\
_nC_{r-1}=\frac{n!}{(r-1)!\times(n-r+1)\times(n-r)!}=\frac{n!}{(r-1)!\times(n-r)!}\times\frac{1}{n-r+1}

Deshalb

r\times_nC_r=(n-r+1)_nC_{r-1}

Teilen Sie beide Seiten durch r, um die Formel anzuzeigen ■

Allmählicher Ausdruck 2: Verringern Sie "n"

_nC_r=_{n-1}C_{r-1}+_{n-1}C_r

Dies ist in Anbetracht von Pascals Dreieck selbsterklärend, aber ich werde nicht zu tief gehen.

Beweis

\begin{eqnarray}
_nC_r+_nC_{r-1} &=& \frac{n!}{r!(n-r)!}+\frac{n!}{(r-1)!(n-r+1)!}\\
&=& \frac{n!\times\{(n-r+1)+r\}}{r!(n-r+1)!}\\
&=& \frac{n!\times(n+1)}{r!(n-r+1)!}=\frac{(n+1)!}{r!(n+1-r)!}\\
&=& _{n+1}C_r
\end{eqnarray}

Schreiben Sie in Python

Allmähliche Gleichung 1

_nC_r=_nC_{r-1}\times\frac{n-r+1}{r}

Basierend auf der Kante, dh der Anfangswerteinstellung

_0C_r=_nC_0=1

Wenn es rekursiv als Funktion für "return" geschrieben wird, sieht es so aus (vorheriger Artikel 83% A9% E3% 83% 95% E3% 82% 92% E6% 8F% 8F% E3% 81% 84% E3% 81% A6% E3% 81% BF% E3% 82% 8B) Gleich wie)

def comb1(n, r):
    if n == 0 or r == 0: return 1
    return comb1(n, r-1) * (n-r+1) / r 

Allmähliche Gleichung 2

_nC_r=_{n-1}C_{r-1}+_{n-1}C_r

Der folgende Anfangssatz basiert auf:

def comb2(n,r):
    if n < 0 or r < 0 or n < r: 
        return 0
    elif n == 0 or r == 0: 
        return 1
    return comb2(n-1,r-1)+comb2(n-1,r)

Der Grund, warum die Anfangswerteinstellung etwas komplizierter ist als die allmähliche Formel 1, ist, dass sich sowohl n als auch r ändern.

Ausprobieren

Bewegen wir es sofort.

>>> comb1(20,5)
15504.0
>>> comb2(20,5)
15504

Überprüfen Sie mit der vorhandenen Scipy-Funktion

>>> import scipy.misc as scm
>>> scm.comb(20, 5)
15504.0

→ Ja, das stimmt ♪ (Es ist überhaupt kein Beweis, aber w)

Die Seite, die ich als Referenz verwendet habe

Recommended Posts

Lassen Sie uns eine Kombinationsberechnung mit Python durchführen
Erstellen Sie ein Lesezeichen in Python
Lassen Sie uns eine GUI mit Python erstellen.
Machen wir einen Spot Sale Service 4 (in Python Mini Hack-a-thon)
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Lassen Sie uns mit Python langsam sprechen
Erstellen Sie ein Webframework mit Python! (1)
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie ein Webframework mit Python! (2)
Berechnen Sie Daten in Python
Kopieren Sie die Liste in Python
Mach ein Janken-Spiel in einer Zeile (Python)
Lassen Sie uns einige Beispiele für die Benachrichtigungsverarbeitung in Python erstellen
Machen Sie mit Python eine Joyplot-ähnliche Handlung von R.
Lassen Sie uns mit SWIG ein Modul für Python erstellen
Mal sehen, wie def in Python verwendet wird
Machen wir einen Discord Bot.
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Berechnung des Scherspielwerts in Python
Erstellen Sie einen einfachen Slackbot mit einer interaktiven Schaltfläche in Python
[Lass uns mit Python spielen] Ein Haushaltsbuch erstellen
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
[Zum Spielen] Versuche Yuma zu einem LINE Bot zu machen (Python)
Machen Sie eine Lotterie mit Python
Stellen Sie Opencv in Python zur Verfügung
Zeichne ein Herz in Python
[Super einfach] Machen wir einen LINE BOT mit Python.
Lassen Sie uns das Umfangsverhältnis mit Python finden
Lassen Sie uns ein Cron-Programm in Java erstellen! !! (TaskScheduler)
Lassen Sie uns mit Python einen Web-Socket-Client erstellen. (Zugriffstoken-Authentifizierung)
Erstellen Sie eine Multiplikationstabelle für jedes Element in einer Tabelle (Python).
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich möchte eine schöne Ergänzung zu input () in Python hinzufügen
Machen wir eine Remote-Rumba [Hardware]
Wahrscheinlich in einer Nishiki-Schlange (Originaltitel: Vielleicht in Python)
[Python] Verwalten Sie Funktionen in einer Liste
Lassen Sie uns eine Remote-Rumba erstellen [Software]
Lassen Sie uns "Python -m Antigravitation" in Python ausführen
Erstellen Sie einen DI-Container mit Python
Machen wir einen Spot Sale Service 2
Zeichnen Sie eine Streudiagrammmatrix mit Python
ABC166 in Python A ~ C Problem
Machen wir einen Blockbruch mit wxPython
Schreiben Sie A * (A-Stern) -Algorithmen in Python
Machen wir einen Spot Sale Service 1
Versuchen wir es mit Fizz Buzz mit Python
Machen Sie die Standardausgabe in Python nicht blockierend
Erstellen Sie eine Binärdatei in Python
Python / Machen Sie ein Diktat aus einer Liste.
[Python] Machen Sie die Funktion zu einer Lambda-Funktion
Erstellen Sie ein Empfehlungssystem mit Python
Löse ABC036 A ~ C mit Python
Schreiben Sie ein Kreisdiagramm in Python