2014-01-22 41 views
3

如果我有一个数组,names = ['Jon', 'Stewart', 'Oliver'],我想所有3元组和2元组:如何从JavaScript中的数组创建元组?

Jon, Stewart, Oliver 
Jon, Stewart 
Stewart, Oliver 
Oliver, Jon 

我可以使用哪些算法呢?该数组也可以是非常大的(200+项),所以无论我使用的代码本质上应该是异步的。

+0

听起来像(亚马逊/微软/谷歌/脸谱/等)面试问题。 – EkoostikMartin

+0

您可能正在寻找[组合](http://en.wikipedia.org/wiki/Combination);你可以找到很多方法在互联网上以多种语言实现它们。 – maerics

+0

@EkoostikMartin - 哈哈 - 我明白了你的观点。但是,唉,这里不是这种情况。 – Shamoon

回答

3

我想你可能会在这里混淆“异步”。创建元组的过程将始终阻塞。所以可能你想要做的是创建一个算法,它仅在需要时根据一些参数生成元组,然后将其缓存以备后用。

由于您已将此标记为node.js,因此我将假定这是感兴趣的编程语言。基于这个假设,假设你实际上不希望被阻塞,你最好的办法是产生多个进程,并产生创建这些元组的进程。这里是一个非常粗略的示例脚本(强调粗糙):

var cluster = require('cluster'); 
var names = ['Jon', 'Stewart', 'Oliver']; 

if (cluster.isWorker) { 
    var count = +process.env.tupple_count; 
    var tuples = []; 

    // Process tuple here, then return it. 

    process.send(JSON.stringify(tuples)); 
    return; 
} 

cluster.fork({ tupple_count: 2 }).on('message', function(msg) { 
    // Receive tuple here: 
    var tuple = JSON.parse(msg); 
    console.log(tuple); 
}); 

// Go about my life. 

然后,你可以写一个通用算法返回这些。这里有一个很好的链接如何做到这一点:Algorithm to return all combinations of k elements from n