Algorithm 集合操作计算映射

Algorithm 集合操作计算映射,algorithm,set,Algorithm,Set,假设我们有两个集合,A={'A','b','c'},b={1,2,3},还有另一个集合c包含来自A和b的项目组合。例如:c={'A',1',('A',2),('A',3),('c',1),('b',2)} 从A获取所有项目的最佳方法是什么?A映射集合C中集合B的所有项目? 在上面的示例C中,结果是{'a'}您可以创建列表的字典/哈希集:HashSet: map(C): 对于c中的每个c=(a,b): emit(a,b)//a是键 减少(a,列表): 计数=0 对于列表中的每个b: 计数+=1 如

假设我们有两个集合,A={'A','b','c'},b={1,2,3},还有另一个集合c包含来自A和b的项目组合。例如:c={'A',1',('A',2),('A',3),('c',1),('b',2)}

从A获取所有项目的最佳方法是什么?A映射集合C中集合B的所有项目?


在上面的示例C中,结果是{'a'}

您可以创建列表的字典/哈希集:
HashSet:

map(C):
对于c中的每个c=(a,b):
emit(a,b)//a是键
减少(a,列表):
计数=0
对于列表中的每个b:
计数+=1
如果计数==B.size():
发射(a)
注意:


此解决方案假定
C
是一个集合,它是
AxB
的子集,如果不是这样,则需要进行一些修改-但同样的想法仍然成立。

为什么不在
哈希集中增加一个计数器?如果这些是集合,我们保证没有重复。
histogram = {} //empty dictionary/hash set
for ((a,b) in C):
    if (a is not a key in histogram):
        histogram.put(a,[])
    histogram[a].append(b)
for each key a in histogram:
    if (histogram[a].size() == B.size()):
        yield a
map(C):
  for each c=(a,b) in C:
      emit(a,b)//a is the key
reduce(a,list<B>):
  count = 0
  for each b in list:
      count += 1
  if count == B.size():
      emit(a)