状態数の数え上げについて
Posted: 2014年8月30日(土) 10:47
fはx,y,zの3つの変数を持つ関数とします。
ただし、x,y,zはぞれぞれ整数で0≦x,y,z≦Nとします。
ここで、x,yが等しくzを0≦z≦Nの範囲で変えたものを1セットの状態として状態の数(状態数)を数えていきます。
ただし、任意のzにおいて、x,yが異なっていてもfの出力結果が等しいものを同一とみなします。
例えばN=1の時
f[0,0,0]=0、f[0,0,1]=0…(1)
f[0,1,0]=0、f[0,1,1]=1…(2)
f[1,0,0]=1、f[1,0,1]=1…(3)
f[1,1,0]=0、f[1,1,1]=1…(4)
と言う結果が得られたとすると、本来状態数は4ですが、(2)と(4)の出力結果はz=0の時0、z=1の時1を出力するので同一とみなし、状態数は3です。
N=2の時は
f[0,0,0]=0、f[0,0,1]=0、f[0,0,2]=0…(1)
f[0,1,0]=0、f[0,1,1]=0、f[0,1,2]=1…(2)
f[0,2,0]=1、f[0,2,1]=1、f[0,2,2]=2…(3)
f[1,0,0]=1、f[1,0,1]=1、f[1,0,2]=1…(4)
f[1,1,0]=1、f[1,1,1]=1、f[1,1,2]=0…(5)
f[1,2,0]=1、f[1,2,1]=1、f[1,2,2]=2…(6)
f[2,0,0]=2、f[2,0,1]=2、f[2,0,2]=2…(7)
f[2,1,0]=1、f[2,1,1]=1、f[2,1,2]=0…(8)
f[2,2,0]=1、f[2,2,1]=1、f[2,2,2]=2…(9)
と言う結果が得られたとすると、本来状態数は9ですが、(3)と(6)と(9)はz=0,1で1を、z=2で2を出力し、また(5)と(8)はz=0,1で1を、z=2で0を出力するので同一とみなし状態数は6となります。
このように状態数を数え上げるプログラムを作りたいのですがどのように作ればいいのか分かりません。
分かりづらいかもしれませんが宜しくお願いします。
ただし、x,y,zはぞれぞれ整数で0≦x,y,z≦Nとします。
ここで、x,yが等しくzを0≦z≦Nの範囲で変えたものを1セットの状態として状態の数(状態数)を数えていきます。
ただし、任意のzにおいて、x,yが異なっていてもfの出力結果が等しいものを同一とみなします。
例えばN=1の時
f[0,0,0]=0、f[0,0,1]=0…(1)
f[0,1,0]=0、f[0,1,1]=1…(2)
f[1,0,0]=1、f[1,0,1]=1…(3)
f[1,1,0]=0、f[1,1,1]=1…(4)
と言う結果が得られたとすると、本来状態数は4ですが、(2)と(4)の出力結果はz=0の時0、z=1の時1を出力するので同一とみなし、状態数は3です。
N=2の時は
f[0,0,0]=0、f[0,0,1]=0、f[0,0,2]=0…(1)
f[0,1,0]=0、f[0,1,1]=0、f[0,1,2]=1…(2)
f[0,2,0]=1、f[0,2,1]=1、f[0,2,2]=2…(3)
f[1,0,0]=1、f[1,0,1]=1、f[1,0,2]=1…(4)
f[1,1,0]=1、f[1,1,1]=1、f[1,1,2]=0…(5)
f[1,2,0]=1、f[1,2,1]=1、f[1,2,2]=2…(6)
f[2,0,0]=2、f[2,0,1]=2、f[2,0,2]=2…(7)
f[2,1,0]=1、f[2,1,1]=1、f[2,1,2]=0…(8)
f[2,2,0]=1、f[2,2,1]=1、f[2,2,2]=2…(9)
と言う結果が得られたとすると、本来状態数は9ですが、(3)と(6)と(9)はz=0,1で1を、z=2で2を出力し、また(5)と(8)はz=0,1で1を、z=2で0を出力するので同一とみなし状態数は6となります。
このように状態数を数え上げるプログラムを作りたいのですがどのように作ればいいのか分かりません。
分かりづらいかもしれませんが宜しくお願いします。