ブール閉包(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)