/
を
で除した値を計算する。 詳細は以下の例に示す。
重み付き積和集合xの定数cによる除算x/cは、 xの各項(アイテム集合)の重み(頻度)をcで整数除算した商を重みに持つアイテム集合が計算される。
> require 'zdd'
> a=ZDD::itemset("a")
> b=ZDD::itemset("b")
> x=13*a+3*b
> x.show
13 a + 3 b
# aの項:13/5の商は2であるから2a。bの項:3/5の商は0であるから0bとなり表示されない。
> (x/5).show
2 a
# aの項:13/5の余りは3であるから3a。bの項:3/5の余りは3であるから3bとなる。
> (x%5).show
3 a + 3 b
# 除数の5に商を掛けて余りを足せば元の値xに戻る。
> (5*(x/5)+(x%5)).show
13 a + 3 b
重み付き積和集合xのアイテム集合vによる除算x/vは、xの各項をvで除する演算である。 通常の多項式と同様に考えれば良い。
> require 'zdd'
> a=ZDD::itemset("a")
> b=ZDD::itemset("b")
> c=ZDD::itemset("c")
> x=7*a*b+5*b*c
> y=7*a*b+5*b*c+2*c
> x.show
7 a b + 5 b c
> y.show
7 a b + 5 b c + 2 c
# 7ab/bの商は7a。5bc/bの商は5c。
> (x/b).show
7 a + 5 c
# 7ab/bの余りは0。5bc/bの余り0。
> (x%b).show
0
# 7ab/3bの商は2a。5bc/3bの商は1c。2c/3bの商は0となり表示されない。
> (y/(3*b)).show
2 a + c
# 7ab/3bの余りはab。5bc/3bの余りは2bc。2c/3bの余りは2c。
> (y%(3*b)).show
a b + 2 b c + 2 c
# 除数の3bに商を掛けて余りを足せば元の値yに戻る。
> (3*b*(y/(3*b))+(y%(3*b))).show
7 a b + 5 b c + 2 c
2つの重み付き積和集合x,yの除算x/yは次のように計算される。 除数yの各項を
としたとき
を全ての
について求める。 得られた
全てに共通して含まれるアイテム集合(項)について、 重みの絶対値が最小の項を商Qと定義する。 通常の多項式とは異なることに注意する。
> require 'zdd'
> a=ZDD::itemset("a")
> b=ZDD::itemset("b")
> c=ZDD::itemset("c")
> d=ZDD::itemset("d")
> x=2*a*b+4*a*c+a*d-2*b*c+3*b*d
> y=a+b
> x.show
2 a b + 4 a c + a d - 2 b c + 3 b d
> y.show
a + b
# x/yおよびx%yは以下のように計算される。
# Q1=(x/a)=2b +4c +d +0 +0 = 0 +2b +4c +d
# Q2=(x/b)=2a +0 +0 -2c +3d = 2a +0 -2c +3d
# Q1,Q2で共通のアイテム集合はcとdであり、それぞれで絶対値が最小の項は-2cとdである。
# よって求める商は以下の通りとなる。
> (x/y).show
- 2 c + d
# x%yについてはx-(y*Q)を計算すればよい。
> (x%y).show
2 a b + 6 a c + 2 b d
# 除数yに商を掛けて余りを足せば元の値xに戻る。
> (y*(x/y)+(x%y)).show
2 a b + 4 a c + a d - 2 b c + 3 b d
% : 剰余演算子
* : 乗算演算子