首页 新闻 赞助 找找看

JavaScript代码的小小疑问(51)

0
[已解决问题] 解决于 2015-11-12 11:15

请解释一下下段js代码:

function C(arr, num){
    var r=[];
    (function f(t,a,n){
        if (n==0) return r.push(t);
        for (var i=0,l=a.length; i<=l-n; i++){
            f(t.concat(a[i]), a.slice(i+1), n-1);
        }
    })([],arr,num);
    return r;
}
Coca-code的主页 Coca-code | 初学一级 | 园豆:10
提问于:2015-10-04 15:45
< >
分享
最佳答案
0
function C(arr, num){
    var r=[];
    (function f(t,a,n){
        if (n==0) return r.push(t); // 当n等于0的时候,就将临时的组合推送到结果数组中。
        for (var i=0,l=a.length; i<=l-n; i++){ //这里开始排列。这里是采用递归的方式进行排列的。
            f(t.concat(a[i]), a.slice(i+1), n-1);
        }
    })([],arr,num);
    return r;
}

C([1,2,3,4], 3)
//首先,该函数的功能是实现将arr按照每次num个,进行排列组合。
//比如[1, 2, 3],每次2个,进行排列组合之后就是: [1,2], [1,3], [2,3]
//算法核心是,取第一位和它后面的数字进行一次匹配。
奖励园豆:5
幻天芒 | 高人七级 |园豆:37175 | 2015-11-12 10:54

想js的sort();功能很直白,就是排序,可能应用在商品列表价格排序,升序或降序... ...\

这个C(arr,num);拍出来的数组规律是很规律,但不算升序,也不算降序,如果sort();成为排序函数,那这个叫“组合函数”?用在哪呢?

Coca-code | 园豆:10 (初学一级) | 2015-11-12 11:19

想想js的sort();功能很直白,就是排序,可能应用在商品列表价格,可以排序,升序或降序... ...

但C(arr,num);排出来的数组虽规律,但不算升序,也不算降序,如果sort();称为排序函数,那这个叫“组合函数”?用在哪呢?

Coca-code | 园豆:10 (初学一级) | 2015-11-12 11:20

@Coca-code: 就是一个算法。。

幻天芒 | 园豆:37175 (高人七级) | 2015-11-12 12:11

@幻天芒: 我还是想知道这算法解决什麽问题。

Coca-code | 园豆:10 (初学一级) | 2015-11-13 22:32

@幻天芒: 不为解决问题的学问,是噱头大于内容。。

Coca-code | 园豆:10 (初学一级) | 2015-11-13 22:33

@Coca-code: 完全排列哇,就是数学里面的排列组合问题。

幻天芒 | 园豆:37175 (高人七级) | 2015-11-14 09:08
其他回答(1)
0

重複迴圈直到n=0的時候把t塞給r..

t是什麼不知道

a是什麼不知道

n是什麼不知道

arr可能是個Array吧,也不知道

num可能是個數字,也不知道

什麼都沒有要怎麼解釋..

RosonJ | 园豆:4910 (老鸟四级) | 2015-10-05 14:29

要知道干嘛,代码段什么功能就行

支持(0) 反对(0) Coca-code | 园豆:10 (初学一级) | 2015-10-05 15:28
function C(arr, num){
    var r=[];
    (function f(t,a,n){
        if (n==0)
            return r.push(t);

        for (var i=0; i<=(a.length - n); i++){
            f(t.concat(a[i]), a.slice(i+1), n-1);
        }
    } ([],arr,num));
    return r;
}

var aa = ['aaa', 'bbb', 'ccc', 'ddd', 'eee'];
var nn = 0;

var xx = C(aa, nn);

 

@Coca-code: 

仔細研究一下,蠻好玩的功能,但不知道要怎麼描述...

重複執行上面這段js,nn從0到5都執行一次,然後看看結果的xx

這叫什麼?排列組合嗎?

我也學習了,哈哈

 

剛查到,英文叫"Permutation"

支持(0) 反对(0) RosonJ | 园豆:4910 (老鸟四级) | 2015-10-05 15:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册