给定两个数组,对它们进行二进制重叠的最有效方法是什么?

时间:2019-03-29 19:24:22

标签: arrays ruby

给出:

a = ["thing1", "thing2", "thing3", "thing4", "thing5", "thing6"]
b = ["thing3", "thing4", "thing5"]

我正在寻找最有效的方法来获得此信息:

result #=> [0, 0, 1, 1, 1, 0]

必须有一种比O(n ^ 2)更好的方法。

a.map{|v| b.include?(v) ? 1 : 0}

2 个答案:

答案 0 :(得分:4)

c = b.to_h{|e| [e, true]}
a.map{|e| c[e] ? 1 : 0}

答案 1 :(得分:4)

files=(file1 file2 file3 file4)
for ((i=0; i<${#files[@]}; ++i)); do
  echo "${files[i]}:$(fgrep -vxc -f <(cat "${files[@]:0:i}" "${files[@]:i+1}") <(sort -u "${files[i]}"))"
done

集在后台使用散列来实现,因此集的查找在执行速度方面类似于散列查找。