Efficient algorithm to get the combinations of all items in object

前端 未结 4 1832
别跟我提以往
别跟我提以往 2021-01-05 02:01

Given an array or object with n keys, I need to find all combinations with length x.
Given X is variable. binomial_coefficient(n,x)

4条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-01-05 02:28

    You could use an iterative and recursive approach with stress on the length of the array and the still needed items.

    Basically combine() takes an array with the values to combine and a size of the wanted combination results sets.

    The inner function c() takes an array of previously made combinations and a start value as index of the original array for combination. The return is an array with all made combinations.

    The first call is allways c([], 0), because of an empty result array and a start index of 0.

    function combine(array, size) {
    
        function c(part, start) {
            var result = [], i, l, p;
            for (i = start, l = array.length; i < l; i++) {
                p = part.slice(0);                       // get a copy of part
                p.push(array[i]);                        // add the iterated element to p
                if (p.length < size) {                   // test if recursion can go on
                    result = result.concat(c(p, i + 1)); // call c again & concat rresult
                } else {
                    result.push(p);                      // push p to result, stop recursion
                }
            }
            return result;
        }
    
        return c([], 0);
    }
    
    console.log(combine(["a", "b", "c", "d"], 3));
    .as-console-wrapper { max-height: 100% !important; top: 0; }

提交回复
热议问题