.permit()
に含まれるアイテム集合について、中の少なくとも1つのアイテム集合に包含されていれば、その項を選択する。 より正確には、を構成するある項から重みを省いたアイテム集合を、 同じくのアイテム集合をとすると、 を満たすようなが少なくとも一つあれば、に対応する項をから選択する。 ちなみに、条件式をに変えれば restrict関数となる。
> require 'zdd' > a=ZDD::itemset("a") > b=ZDD::itemset("b") > c=ZDD::itemset("c") > d=ZDD::itemset("d") > x=5*a + 3*b + b*c + 2 > y=a + b + d > z=a*c > x.show 5 a + b c + 3 b + 2 > y.show a + b + d > z.show a c # xに含まれる3つのアイテム集合a,bc,b,Φ(重み2の項で空のアイテム集合)のうち、 # yの3つのアイテム集合a,b,dのいずれかに包含されるアイテム集合は # aとbとΦ(空のアイテム集合はいずれのアイテム集合にも含まれると考える)。 # よって、xからa,b,Φの項が選択される。 > x.permit(y).show 5 a + 3 b + 2 # xに含まれる4つのアイテム集合a,bc,b,Φのうち、zのアイテム集合acに含まれるアイテム集合はaとΦ。 # よって、xからaとΦの項が選択される。 > x.permit(z).show 5 a + 2 # xに含まれる3つのアイテム集合a,bc,b,Φのうち、アイテム集合cに含まれるアイテム集合はΦのみ。 # よって、xからΦの項が選択される。 > x.permit(c).show 2
restrict : 上位集合の選択