diff --git a/src/algorithms/math/integer-partition/integerPartition.js b/src/algorithms/math/integer-partition/integerPartition.js index 283d9a400e..d2658d4cf3 100644 --- a/src/algorithms/math/integer-partition/integerPartition.js +++ b/src/algorithms/math/integer-partition/integerPartition.js @@ -17,9 +17,10 @@ export default function integerPartition(number) { partitionMatrix[0][numberIndex] = 0; } - // Let's fill the first row. It represents the number of way of how we can form - // number zero out of numbers 0, 1, 2, ... Obviously there is only one way we could - // form number 0 and it is with number 0 itself. + // Let's fill the first column. It represents the number of ways we can form + // number zero out of numbers 0, 0 and 1, 0 and 1 and 2, 0 and 1 and 2 and 3, ... + // Obviously there is only one way we could form number 0 + // and it is with number 0 itself. for (let summandIndex = 0; summandIndex <= number; summandIndex += 1) { partitionMatrix[summandIndex][0] = 1; } @@ -35,7 +36,18 @@ export default function integerPartition(number) { } else { // The number of combinations would equal to number of combinations of forming the same // number but WITHOUT current summand number plus number of combinations of forming the - // previous number but WITH current summand. + // number but WITH current summand. + // Example: number of ways to form number 4 using summands 1, 2 and 3 is the sum of + // {number of ways to form 4 with sums that begin with 1 + + // number of ways to form 4 with sums that begin with 2 and include 1} + + // {number of ways to form 4 with sums that begin with 3 and include 2 and 1} + // Taking these sums to proceed in descending order of intergers, this gives us: + // With 1: 1+1+1+1 -> 1 way + // With 2: 2+2, 2+1+1 -> 2 ways + // With 3: 3 + (4-3) <= convince yourself that number of ways to form 4 starting + // with 3 is == number of ways to form 4-3 where 4-3 == + // Helper: if there are n ways to get (4-3) then 4 can be represented as 3 + first way, + // 3 + second way, and so on until the 3 + nth way. So answer for 4 is: 1 + 2 + 1 = 4 ways const combosWithoutSummand = partitionMatrix[summandIndex - 1][numberIndex]; const combosWithSummand = partitionMatrix[summandIndex][numberIndex - summandIndex];