我有几个哈希映射,我需要生成以下组合:
A: [x->1,y->2,...] B: [x->1,a->4,...] C: [x->1,b->5,...] ...
一些可能的组合:
A+B; A; A+C; A+B+C...
对于每个组合,我需要生成联合散列映射,并在两个散列映射中使用相同的键执行键值对的操作.
我能想到的就是使用二进制计数器并将数字映射到相应的哈希映射:
001 -> A 101 -> A,C ...
虽然这个解决方案有效,但当我有超过100个哈希映射时,模运算很耗时.我是Scala的新手,但我相信必须有更好的方法来实现这一目标吗?
解决方法
好吧,想想你的地图有多少组合:假设你有N个地图.
(the maps individually) + (pairs of maps) + (triples of maps) + ... + (all the maps)
这当然是
(N choose 1) + (N choose 2) + ... + (N choose N-1)
其中N选择M定义为:
N! / (M! * (N-M)!)
对于N = 100和M = 50,N选择M超过100,000,000因此“耗时”实际上并不能解决问题!
哦,这假设排序是无关紧要的 – 即A B等于B A.如果这个假设是错误的,那么你所面临的排列明显多于可见宇宙中的粒子
为什么scala可能会帮助解决这个问题:它的并行集合框架!