3.45 show : ZDDの表示

書式

$obj$.show([$switch$])

  $switch$ : string

説明

ZDDオブジェクト$obj$を多様な形式で標準出力に出力する。 出力形式は、Table 3.1に示された値(文字列)を与えることによって切り替える。 $switch$を省略すればアイテムの積和形式で表示する。

Table 3.1: ZDDオブジェクトの表示形式のスイッチ一覧

$switch$の値

機能

(スイッチ無し)

アイテムの積和形での表示

bit

重みの(-2)進数の各桁別アイテム集合の表示

hex

整数値を 16 進数で表現する積和形表示

map

カルノー図で表示。アイテム変数6個まで表示できる

rmap

カルノー図で表示。冗長なアイテム変数は省いて表示

case

整数値ごとに場合分けして積和形表示

  /size

計算結果のBDD節点数(および処理系全体の節点数)を表示

  /count

式に現れる(0 以外の値を持つ)組合せの個数を表示

  /density

集合の濃度(0 以外の値を持つ組合せの比率)を表示

  /value

シンボル変数にすべて数値を代入したときの式の値を表示

  /maxcover

式に含まれる(0 以外の値を持つ)コスト最大の組合せを1つ表示

  /maxcost

コスト最大組合せのコスト値を表示

  /mincover

式に含まれる(0 以外の値を持つ)コスト最小の組合せを1つ表示

  /mincost

コスト最小組合せのコスト値を表示

  /plot

BDDの形を図示する。(使用不可)

decomp

単純直交分解形式での出力

  /export

BDDの形を図示する(否定枝不使用)。$fileName$に指定があれば、指定されたファイルに出力

 

指定されたファイルに出力

例1: 基本例

> require 'zdd'
> a=ZDD::itemset("a")
> b=ZDD::itemset("b")
> c=ZDD::itemset("c")
> f=5*a*b*c - 3*a*b + 2*b*c + c
> f.show
 5 a b c - 3 a b + 2 b c + c
> ZDD::constant(0).show
 0

例2: bit

> require 'zdd'
> a=ZDD::itemset("a")
> b=ZDD::itemset("b")
> c=ZDD::itemset("c")
> f=5*a*b*c - 3*a*b + 2*b*c + c
> f.show
 5 a b c - 3 a b + 2 b c + c

> f.bit
NoMethodError: undefined method `bit' for 5 a b c +  - 3 a b + 2 b c + c:Module
	from (irb):8
	from /Users/hamuro/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'

# "a b c"の重み5の(-2)進数は101となる。
# 1*(-2)^2+0*(-2)^1+1*(-2)^0 = 5
# よって0桁目と2桁目にアイテム集合"a b c"が表示されている。
# "a b"の重み-3の(-2)進数は1101となる。
# 1*(-2)^3+1*(-2)^2+0*(-2)^1+1*(-2)^0 = -3
# よって0,2,3桁目にアイテム集合"a b"が表示されている。

例3: hex

> require 'zdd'
> a=ZDD::itemset("a")
> b=ZDD::itemset("b")
> c=ZDD::itemset("c")
> d=ZDD::itemset("d")

> f=a*b+11*b*c+30*d+4
> f.show
 a b + 11 b c + 30 d + 4
> f.hex
NoMethodError: undefined method `hex' for a b + 11 b c + 30 d + 4 :Module
	from (irb):9
	from /Users/hamuro/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'

例4: map

> require 'zdd'
> a=ZDD::itemset("a")
> b=ZDD::itemset("b")
> c=ZDD::itemset("c")
> d=ZDD::itemset("d")
> f=2*a*b+3*b+4
> f.show
 2 a b + 3 b + 4
> f.map
NoMethodError: undefined method `map' for 2 a b + 3 b + 4 :Module
	from (irb):8
	from /Users/hamuro/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'
# アイテムaが1列目のビット列に、アイテムbが1行目のビット列に対応してアイテム集合が表現されている。
# セルの値は重みを表す。左上のセルはaが0、bが0、すなわち定数項が4であることが示されている。

# 4アイテムでは以下の通り。
> g=a*b + 2*b*c + 3*d + 4
> g.show
 a b + 2 b c + 3 d + 4
> g.map
NoMethodError: undefined method `map' for a b + 2 b c + 3 d + 4 :Module
	from (irb):15
	from /Users/hamuro/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'

例5: rmap

> require 'zdd'
# 4つのアイテムa,b,c,dを宣言
> ZDD::symbol("a")
> ZDD::symbol("b")
> ZDD::symbol("c")
> ZDD::symbol("d")

> f=ZDD::itemset("a b") + 2*ZDD::itemset("b c") + 4
> f.show
 a b + 2 b c + 4

# mapで表示させると以下の通り。
> f.map
NoMethodError: undefined method `map' for a b + 2 b c + 4 :Module
	from (irb):12
	from /Users/hamuro/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'

# rmapで表示させるとdが省かれて表示される。
> f.rmap
NoMethodError: undefined method `rmap' for a b + 2 b c + 4 :Module
	from (irb):15
	from /Users/hamuro/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'

例6: case

> require 'zdd'
> a=ZDD::itemset("a")
> b=ZDD::itemset("b")
> c=ZDD::itemset("c")
> f=5*a*b*c - 3*a*b + 2*b*c + 5*c
> f.show
 5 a b c - 3 a b + 2 b c + 5 c

> f.case
NoMethodError: undefined method `case' for 5 a b c +  - 3 a b + 2 b c + 5 c:Module
	from (irb):8
	from /Users/hamuro/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'

例7: decomp

> require 'zdd'
> a=ZDD::itemset("a")
> b=ZDD::itemset("b")
> c=ZDD::itemset("c")

> f1=(a*b*c)
> f1.show
 a b c
> f1.decomp
NoMethodError: undefined method `decomp' for a b c:Module
	from (irb):8
	from /Users/hamuro/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'
# a,b,cのANDということでa*b*c=a b c

> f2=((a*b*c)+(a*b))
> f2.show
 a b c + a b
> f2.decomp
NoMethodError: undefined method `decomp' for a b c + a b:Module
	from (irb):13
	from /Users/hamuro/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'
# c,1のORにて(c+1)、それとa bとのANDで(a b)*(c+1)=a b c + a b

> f3=((a*b*c)+(a*b)+(b*c))
> f3.show
 a b c + a b + b c
> f3.decomp
NoMethodError: undefined method `decomp' for a b c + a b + b c:Module
	from (irb):18
	from /Users/hamuro/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'
# [ a c ]はaとcによる全組合せ集合、すなわち(a c + a + c)。
# それとbとのANDで b*(a c + a + c) = a b c + a b + b c

> f4=((a*b*c)+(a*b)+(b*c)+(c*a))
> f4.show
 a b c + a b + a c + b c
> f4.decomp
NoMethodError: undefined method `decomp' for a b c + a b + a c + b c:Module
	from (irb):24
	from /Users/hamuro/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'
# [ a b c ]はa,b,cによる全組合せ集合、すなわち(a b c + a b + b c + c a)

関連

export : ZDDの構造をそのままフィアイルに出力する。