Javascript 给定两个数组,并且它们都有相同数量的元素,构造所有哈希映射并返回

Javascript 给定两个数组,并且它们都有相同数量的元素,构造所有哈希映射并返回,javascript,python,arrays,hashmap,hungarian-algorithm,Javascript,Python,Arrays,Hashmap,Hungarian Algorithm,例如,两个阵列: var names = ['Tom','Jerry','Sam']; var hobbies = ['Eat','Sleep','Laugh']; 是否有一个函数可以将两个数组构造为映射,如: {'Tome':'Eat','Jerry':'Sleep','Sam':'Laugh'} {'Tome':'Sleep','Jerry':'Eat','Sam':'Laugh'} {'Tome':'Laugh','Jerry':'Eat','Sam':'Laugh'} 还有另外3个。

例如,两个阵列:

var names = ['Tom','Jerry','Sam'];
var hobbies = ['Eat','Sleep','Laugh'];
是否有一个函数可以将两个数组构造为映射,如:

{'Tome':'Eat','Jerry':'Sleep','Sam':'Laugh'}
{'Tome':'Sleep','Jerry':'Eat','Sam':'Laugh'}
{'Tome':'Laugh','Jerry':'Eat','Sam':'Laugh'}
还有另外3个。。。 对于给定的两个数组,返回的映射号应为A33=6。 通过javascript或python,任何人都可以做到这一点。 有什么想法吗



在网上搜索之后,这是一个分配问题,解决这个问题的方法叫做匈牙利方法。现在,我正在寻找一个通过javascript或python实现的匈牙利算法。

您希望将名称映射到第二个数组的每个可能排列:

from itertools import permutations

hashmaps = [dict(zip(names, perm)) for perm in permutations(hobbies)]

请注意,返回的列表是
N长度,即使长度非常小,也会非常大。

我从这个链接得到了答案

之后,可按如下方式执行该方法:

function permute(input) {
var permArr = [],
usedChars = [];
function main(){
    var i, ch;
    for (i = 0; i < input.length; i++) {
        ch = input.splice(i, 1)[0];
        usedChars.push(ch);
        if (input.length == 0) {
            permArr.push(usedChars.slice());
        }
        main();
        input.splice(i, 0, ch);
        usedChars.pop();
    }
    return permArr;
}
return main();
函数排列(输入){
var permArr=[],
usedChars=[];
函数main(){
varⅠ,ch;
对于(i=0;i
}

函数MapFromArray(源、目标){
var目标=排列(目标);
var返回=[];
for(目标中的var t){
var-map={};

对于(var i=0;i这不是置换,而是两个向量的乘积。在Python Itertools中,有一个函数乘积可以处理这个问题

import itertools as itls
names = ['Tom','Jerry','Sam']
hobbies = ['Eat','Sleep','Laugh']
print list(itls.product(names, hobbies))
结果是:[('Tom','Eat'),('Tom','Sleep'),('Tom','Laugh'),('Jerry','Eat'),('Jerry','Sleep'),('Jerry','Laugh'),('Sam','Eat'),('Sam','Sleep'),('Sam','Laugh')]

实际上,两个向量的乘积就是对向量1和向量2的每一个进行一些“运算”,在这种情况下,“运算”就是生成一个元组。乘积运算相当于:

for i = 0; i<length(vector1); ++i
    for j = 0; j<length(vector2); ++j
        vector1[i] 'op' vector2[j];

对于i=0;iYou可以再使用一个标记并指定另一种语言!看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码员编写代码,但他们通常只在海报已经尝试自己解决问题时才提供帮助。展示这一努力的一个好方法是包括code到目前为止,您已经编写了示例输入(如果有)、预期输出和实际获得的输出(控制台输出、堆栈跟踪、编译器错误-任何适用的)。您提供的详细信息越多,您可能会收到越多的答案。感谢以上两方面,我对编程不太熟悉,数学和逻辑能力差,英语表达也不好。我正在学习巴库留提供的代码。这对我帮助很大。
for i = 0; i<length(vector1); ++i
    for j = 0; j<length(vector2); ++j
        vector1[i] 'op' vector2[j];