stdlib-js / stdlib-js/stdlib

update efficiency of calculating binomial coefficients

Abierto
#2,442 4 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
JavaScript
Estrellas
6k
Forks
1.3k
Merge medio
1 d 3 h
PR fusionados (30 d)
611

Descripción

I can make a formal PR/Issue, but just sitting on my phone talking with chatGPT trying to figure out how to efficiently calculate binomial coefficients,I was looking at how you solve binomial coefficients in this package; @stdlib/math-base-special-binomcoef, and was wondering if a solution such as this would be better?

```ts
function binomialCoefficientLog(n, k) {
if (k > n) return 0;
if (k === 0 || k === n) return 1;

let logSum = 0;
for (let i = 0; i < k; i++) {
logSum += Math.log(n - i) - Math.log(i + 1);
}

return Math.exp(logSum);
}
```

This basically breaks it down to it's most simplest form (with log for maintaining precision) by stopping the loop once we reach k, so only calculating necessary values. Basically O(k) time complexity and O(1) space complexity.

Obviously error handling would need to be added but in a nutshell this is what I was thinking.

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Start with @stdlib/math-base-special-binomcoef and inspect how it currently calculates binomial coefficients. Compare the proposed O(k) time and O(1) space approach, including precision and error handling, then determine whether a change is warranted. Done means the implementation is improved without losing correctness, with relevant validation for the supported inputs.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
javascript
Área
performance
Tipo de issue
Refactorización
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.