folgendes verwirrt mich:
ich habe eine eingabe von einem probability array der länge 40 und insgesamt (wenn ich richtig geguckt habe) eine laufzeit in laudannotation von O(probilities.length * Max(kombis.length,probilites.length²))
Also ich sehe da auf den ersten Blick verschachtelte Schleifen mit einer Tiefe von 4 Ebenen.
An deiner Stelle würde ich erstmal einen Profiler benutzen oder manuell an wichtigen Stellen (z.B. am Anfang jedes Durchlaufs einer Schleife) Timestamps ausgeben. Damit kannst du das Problem viel besser analysieren und eingrenzen.