ブール閉包(boolean closure)のサイズとインデクスの計算

1次元配列にみっしりと二次元の表を納めつつ、 伸縮させても穴が空かない構造の作り方。
ただし、正方形または二等分した直角三角形の表であること。
条件:配列の添え字は1から、x,yは1以上

a)無向グラフ:同じ組み合わせを含める

1:1
2:1 2:2
3:1 3:2 3:3
4:1 4:2 4:3 4:4

size(n) = ((n + 1) * n / 2)
ref(x, y) = size(max(x, y) - 1) + min(x, y)

b)リーグ戦表:同じ組み合わせを排除する

2:1
3:1 3:2
4:1 4:2 4:3

size(n) = ((n + 1) * n / 2) - n
ref(x, y) = size(max(x, y) - 1) + min(x, y)
ただし(x != y)

c)有向グラフ:同じ組み合わせを含める
ただし対角線方向に伸縮するバッファとして

1:1 1:2 1:3 1:4
2:1 2:2 2:3 2:4
3:1 3:2 3:3 3:4
4:1 4:2 4:3 4:4
size(n) = (n * n)
ref(x, y) =
case (x < y) size(y - 1) + x
case (x > y) size(x) - (x - y)
case (x = y) size(x)

d)有向グラフ:同じ組み合わせを排除する
ただし対角線方向に伸縮するバッファとして

1:2 1:3 1:4
2:1 2:3 2:4
3:1 3:2 3:4
4:1 4:2 4:3

size(n) = (n * n) - n
ref(x, y)
case (x < y) size(y - 1) + x
case (x > y) size(x) - ((x - 1) - y)

戻る