У нас есть следующая формула для определения, сколько комбинаций C
мы можем выбрать размером k
из набора n
:
![Combinations Forumla](https://i.stack.imgur.com/y1kem.gif)
У меня естьнаписал алгоритм, который всегда будет давать ответ , если , конечно, ответ попадает в диапазон типа данных (* в моем случае ulong
), разлагая и аннулируя термины в числителе и знаменателе во времяоценка.
Несмотря на то, что довольно быстро попытаться вычислить C
и обнаружить переполнение, если результат слишком велик, было бы лучше, если бы я мог поместить n
и k
в предварительную функциюкоторый оценивает, будет ли ответ больше, чем то, что может удержать ulong
.Это не должно быть точным.Если он оценивает, что данные n
и k
не будут переполнены, но это так, это нормально - но он никогда не должен говорить этого, он будет переполняться, если не будет.В идеале эта функция должна быть очень быстрой, иначе нет смысла ее иметь - я могу также попытаться вычислить непосредственно C и позволить ей переполниться.
Я строил кривую nCk для различных n как функциюиз k, чтобы увидеть, могу ли я найти кривую, которая растет, по крайней мере, так же быстро, как C (n, k), но не расходится слишком далеко в интересующем меня диапазоне (0..2 ^ 64-1) и являетсявычислительно легко оценить.
Мне не повезло.Есть идеи?