算法 设备分配的问题

thxagain · 2016年11月15日 · 最后由 thxagain 回复于 2016年11月16日 · 6548 次阅读

已经得到待分配的设备 id 数组:[2,3,4]

目前已有两个设备 id 数组:[1,2,3][4,5,6]代表每组中已经使用过的设备

要求是找到一组 id,满足:在已有的设备 id 数组中均没有出现过,例如:第一组分配 4 号设备,第二组分配 2 或 3 号设备


再比如待分配的设备 id 数组是:[1,2,3]

已有的两个已经使用过的设备 id 数组分别为[1,2][2,1]

那么现在就找不到一组能满足条件的 id 了


实际项目中遇到的问题,想请教下大家解决这个问题的编程思路。


更新后

def assign_device(r, a, b)
  (r - a).each do |a1|
    b1 = (r - b - [a1]).sample
    return [a1, b1] if b1
  end
  return
end

r = [2, 3, 4]
a = [1, 2, 3]
b = [4, 5, 6] 
assign_device(r, a, b)  # [4, 3] OR [4, 2]

#1 楼 @zlx_star

Hi 我查了一下 .sample方法,是随机取一个,那么应该会有这种可能:随机取的 a1,导致 b1 为 nil,最终没有输出。

但是实际情况是存在解的,只能重复运行多次方法,才能知道。

#2 楼 @thxagain 你说的是对的,你可以循环处理可能的 a1,然后查找是否存在对应的 b1。

#3 楼 @zlx_star 👍 更新后的代码看起来是 OK 的

#4 楼 @thxagain [2, 3] 不会出现?

([2, 3, 4] | ([1, 2, 3] & [4, 5, 6] )).sample(2)

#5 楼 @mimosa

[2,3] 不应该出现啊,因为数组 a 中是[1,2,3],出现过的就不能分配了,所以无论分配 2 或 3 都不行。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号