给定两个数组,它们都有相同数量的元素,构造所有的哈希映射并返回
Given 2 arrays and both have same number of elements, construct all the hashed maps and return
例如两个数组:
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。
好吧,这不是置换,而是两个向量的乘积。在Python Itertools中,有一个函数product可以处理这个问题。
import itertools as itls
names = ['Tom','Jerry','Sam']
hobbies = ['Eat','Sleep','Laugh']
print list(itls.product(names, hobbies))
结果是:[(‘汤姆’,‘吃’),(‘汤姆’,‘睡眠’),(‘汤姆’,‘笑’),("杰瑞","吃")("杰瑞","睡眠")("杰瑞","笑")("山姆","吃")("山姆","睡眠")("山姆","笑")]
实际上,两个向量的乘积是对vector1中的每个向量和vector2中的每个向量做一些"op",在这种情况下,"op"是组成一个元组。乘积操作相当于:
for i = 0; i<length(vector1); ++i
for j = 0; j<length(vector2); ++j
vector1[i] 'op' vector2[j];
您希望将名称映射到第二个数组的每个可能的排列:
from itertools import permutations
hashmaps = [dict(zip(names, perm)) for perm in permutations(hobbies)]
注意,permutations
返回一个长度为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();
}
function mapFromArrays(source,target){
var targets = permute(target);
var returns = [];
for(var t in targets){
var map = {};
for(var i=0;i<source.length;i++){
map[source[i]] = targets[t][i];
}
returns.push(map);
}
return returns;
}
相关文章:
- react-让一个元素返回两个相邻的<tr>标签
- Javascript可见元素返回未定义
- 如果循环中至少有一个元素返回 false,如何将变量设置为 false
- 从异步调用返回数组,然后为数组的每个元素返回其他异步调用
- jQuery mMenu如何通过单击某些元素返回到上一节
- Ajax 元素返回完整的 html 代码
- Javascript:计算每个表的表行数,并向相应的元素返回一个值
- 激活 .stop() 后,将元素返回到其起始位置
- 访问 iFrame 中的元素返回空值
- Knockout.js 从 observableArray 中提取元素返回 undefined
- 获取 0 的文档元素返回什么
- scrollTop为javascript中的所有文档元素返回0,但滚动事件在body标记上触发
- 从Ajax生成的DOM元素返回id
- 如何在交换后将列表元素返回到其原始样式
- 文本元素返回"undefined"
- 从数组中获取随机元素返回相同的元素
- 从聚合物元素返回简单值
- React:将新插入的子元素返回给父元素以更新状态
- 元素返回NaN作为宽度
- 新添加的DOM元素返回null