Schreiben Sie ein Programm oder eine Funktion, die bei einer Erfolgswahrscheinlichkeit p , einer Zahl n und einer Anzahl von Versuchen m die Chance von mindestens n Erfolgen aus m Versuchen zurückgibt .
Ihre Antwort muss auf mindestens 5 Nachkommastellen genau sein.
Testfälle:
0.1, 10, 100 -> 0.54871
0.2, 10, 100 -> 0.99767
0.5, 13, 20 -> 0.13159
0.5, 4, 4 -> 0.06250
0.45, 50, 100 -> 0.18273
0.4, 50, 100 -> 0.02710
1, 1, 2 -> 1.00000
1, 2, 1 -> 0.00000
0, 0, 1 -> 1.00000
0, 0, 0 -> 1.00000
0, 1, 1 -> 0.00000
1, 1, 0 -> 0.00000
Antworten:
Gelee ,
1514 BytesLiest m , n und p (in dieser Reihenfolge) als Befehlszeilenargumente. Probieren Sie es online aus!
Beachten Sie, dass dieser Ansatz erfordert O (2 m ) Zeit und Speicher, so dass es nicht ist ziemlich effizient genug für den Test Fälle , in denen m = 100 . Auf meiner Maschine dauert der Testfall (m, n, p) = (20, 13, 0,5) ungefähr 100 Sekunden. Der Online-Interpreter benötigt zu viel Speicher.
Wie es funktioniert
quelle
Mathematica, 29 Bytes
Nimmt Eingaben in der Reihenfolge vor
n,m,p
. Mathematica ist so gut, dass es sogar Ihren Code für Sie spielt:BetaRegularized
ist die regulierte unvollständige Beta-Funktion .quelle
R,
3231 Bytesedit - 1 Byte Umschaltung auf Beta-Distribution (nach dem Vorbild von @ Sp3000 Mathematica Answer)
quelle
Python, 57 Bytes
Die rekursive Formel für Binomialkoeffizienten mit Ausnahme des Basisfalls
m==0
gibt an, ob die verbleibende Anzahl der erforderlichen Erfolge nichtn
negativ ist, mitTrue/False
z1/0
. Aufgrund seines exponentiellen Rekursionsbaums bleibt dies bei großen Eingaben stehen.quelle
from functools import lru_cache; f = lru_cache(None)(f)
.Haskell, 73 Bytes
quelle
MATLAB,
7871 Bytes7 Bytes dank Luis Mendo gespart!
Die Arrayfun-Funktion macht keinen Spaß, aber ich habe keinen Weg gefunden, sie loszuwerden ...
quelle
Pyth, 26 Bytes
Probieren Sie es online aus!
Verwendet die kumulative Binomialverteilung.
quelle
Pyth, 20 Bytes
Probieren Sie es online aus!
Hinweis: CG ist eine sehr große Zahl, die der Interpreter nicht verarbeiten kann. Daher wurde die Anzahl der Versuche auf ^ T3 gesenkt, was eintausend ist. Daher führt die Verknüpfung zu einem ungenauen Ergebnis.
Verwendet einen rein probabilistischen Ansatz.
quelle
JavaScript (ES7), 82 Byte
1 Byte mit
reduce
! Gespeichert ! Erläuterung:quelle
Oktave, 26 Bytes
Dies ist eine anonyme Funktion. Um es zu verwenden, weisen Sie es einer Variablen zu.
Probieren Sie es hier aus .
quelle
MATL , 23 Bytes
Die Eingänge sind in der Reihenfolge
m
,n
,p
.Probieren Sie es online aus!
Dies führt eine direkte Berechnung durch, bei der die Terme von
n
bism
der Binomialwahrscheinlichkeits- (Massen-) Funktion summiert werden .quelle
Gelee ,
1817 BytesLiest n , m und p (in dieser Reihenfolge) als Befehlszeilenargumente. Probieren Sie es online aus!
quelle
TI-Basic, 17 Bytes
Präzise bis 10 Dezimalstellen, können mit mehr Code zwischen 0 und 14 Dezimalstellen eingestellt werden.
quelle
Haskell, 54 Bytes
Definiert eine Funktion
(%)
. Nennen wir es wie(%) 0.4 2 3
.quelle
Mathematica, 48 Bytes
Verwendet die Binomialverteilungswahrscheinlichkeitsformel, um die Wahrscheinlichkeit von k Erfolgen für k von n bis m zu berechnen . Behandelt die Randfälle unter Verwendung einer symbolischen Summe, wobei s eine symbolische Variable für die Wahrscheinlichkeit ist, die später durch den tatsächlichen Wert p ersetzt wird . (Da s 0 = 1 ist, aber 0 0 unbestimmt ist.)
quelle