■順序と木のはなし
自己紹介
hiro
電気・電子エンジニア
(半導体パッケージのCADオペレータ)
好きなプログラム
 Perl5(log処理、測定多い)
 エクセルVBA(データ処理)
 C(CAD図形処理)
 SAS(統計処理)
はじめに
ソフトウェア
ハードウェア
数学
技術が進み多様化する
中で、自分の分野の知識
だけでなく、他の分野の知
識も知る必要が出てきた
ネットや本の知識だけでは
分野間のつながりや
関係性が見えてこない
知っていることから
やっていけば、わからない
ことも理解できるのでは?
■プログラムにおける数学
ド・モルガンの法則
 A∪B=A∩B   A∩B=A∪B
if(!(a==5 && b==3)){
処理
}
↑直感的にわかりやすい!
メンテする上でもわかりやすい
コードが望ましい
if((a != 5) || (b != 3)){
処理
}
応用事例とイラストでわかる離散数学より
■順序とは
What's 順序
 何が先で、何が後に来るかという物事の相互の関係
 大小、高低、長短などの序列に関わる概念を抽象化したもの
 (weblio辞書から)
辞書式順序
⇒5個の数1,2,3,4,5から異なる2つをとって
小さい順に並べる。10通り
12,13,14,15 ← 1に注目
21,23,24   ← 2に注目
34,35 ← 3に注目
45 ← 4に注目
1 2
3
4
2 1
3
4
5
Tree図
厳密さや正確性にかけますがご容赦ください
■数学における順序の定義
集合Xに定義された順序関係"~”はXの要素a,bに対して"a~b”ま
たはその否定のいづれかが成り立ち次の条件を満たすものをいう。
①a~a
②a~b,b~aならばa=b
③a~b,b~cならばa~c
①a≦a
②a≦b,b≦aならばa=b
③a≦b,b≦cならばa~b
ここで関係"<”の場合は①②から満たさない
検証)実数全体の集合Rで確かめる
a~b⇔a≦bと定めてみる
反射律
反対称律
推移律
 ≦ < 直感的なイメージ
       ⇒ 何か順番を示す関係演算子
厳密さや正確性にかけます,
間違っているところはご指摘ください
ex.)
R={1,1.1,2,3,4,5,6,...}
B
A
A B
■部分集合における順序
集合について~と⊂として
A~B⇔A⊂Bを考えてみる
A⊂B A⊂Bでも
B⊂Aでもない
A={2,3}
B={1,2,3,4,5}
A={1,2,3}
B={3,4,5}
“≦” と ”⊂”で順序の関係が異なる
厳密さや正確性にかけますがご容赦ください
■全順序と半順序
全順序
半順序
①a~a
②a~b,b~aならばa=b
②a~b,b~cならばa~b
④a~bまたはb~aが成り立つ(2つが比較できる)
①②③④を満たす。
実数の大小関係
※複素数全体の集合を辞書式順序として考える
a+biを(a,b)として考える
上記①②③を満たす。
集合の包含関係
整数の整除関係(約数の構造)
血液型の構造?
厳密さや正確性にかけますがご容赦ください
■関係を表すのに便利な道具
関係グラフ
隣接行列
有効グラフ
1234
xyz
1 0 0 1
1 1 0 0
1 0 1 1
集合B
集合A
集合B集合A
a
b c
■半順序
6
2 3
1
O
A B
AB
数字だけでなく、関係を定義すれば
いろいろな事象に順序関係が成り立つ
血液の構造
血液を輸血できる関係図?
約数の構造
6の約数
■直積集合
任意の2つの集合AとBの
直積集合A×B
A×B={(a,b)|a∈A,b∈B}
Aの要素aとBの要素bの組
(a,b)→順序対をすべて集めた集合
n個の集合に拡張できる 集合A
集合B
1 2 3 4 5
23578
■関係
任意の2つの集合AとBの
A={PC1, PC2, PC3}
B={192.168.1.1,
192.168.1.2,
192.168.1.3,}
集合AとBの直積集合は9通り
実際に割り当てると
(PC1, 192.168.1.1)
(PC2, 192.168.1.2)
(PC3, 192.168.1.3)
関係グラフを使って集合A,Bの関係を求める
192.168.1.1
192.168.1.2
192.168.1.3
関係は直積の部分集合
PC1
PC2
PC3
集合A
集合B
PC1 PC2 PC3
123
直積集合
A×B
■直積集合と順序
集合(A,B)の順序対について考える
●(4,6)と(4,2) 順序関係が成り立つ
●(5,5)と(4,8) 比較不能
順序は直積の部分集合
集合A
集合B
1 2 3 4 5 6 7 8
123456
構造
直積集合上は
順序をつけれない
順序
関係
直積
集合
■木構造
種類:
2分探索木:
      ノードからブランチの数が2本以下、最大で2つの子しか持たないツリー構造
   ヒープ:
ALV木:すべての節において、左部分木と右部分木の高さの差が1以内に収まる
B木:
トライ木:
使用例:
   ディレクトリ、プロセスツリー
メリット
データが膨大に増えても、配列やリストに比べ計算量を抑えることができる
■木構造
一般に、m本の辺を持つ順序木の個数はカタラン数になる
               2m+1Cm/(2m+1)
例:辺が3本の場合下記のようになる
形は似ているいるが
順序木で考えると別物
(離散数学のすすめ)
■木構造
一般的に偏った木は、探索効率が悪いのでバランスをとるように
回転させて、バランスを調整する。
整列したデータに単純に2分探索木を使うとリストと変わらなくなる。
A={1,2,3,4,5,6,7,8,...}
a
b
b
a
■k-d木
k-d木
k次元2分木:n個のデータを任意の点(中央
値)下記ではxで分割、次はyで分割を続ける
x-y座標における点集合
無相関
x
y
■k-d木
順序関係を決めにくい
x-y座標における点集合
木構造に展開できる
x
y
x分割
y分割
x分割
前もってわかっているデータに対して、ある範囲の
データを検索するには使える。ただしn次元を考え
ると効率は悪くなるらいしい。
新たにデータを追加する場合は?
は
に
ろ
ぬ
い
る
り
ち
へ
と
ほ
は
へぬ
に
ほ
ち
と
る
り
ろ
い
■順序と構造について
順序をつけれるということは、1次元に落とし込めるということなの
逆に1次元からN次元に変換できないかなと考えてみた。
個人的に、安価な2CADを表示上3次元化したい。
■感想
いろいろ調べてみたら、順序を考えているのに
乱択アルゴリズムという言葉が出てきて興味深かった。
順序の考え方を、自然と使っていたりして興味深かった。
  ex.)回路のネット情報⇒
   そういえば、、、いつも接続するために並び替えている。
厳密さや正確性にかけますがご容赦ください
参考文献
  応用事例とイラストでわかる離散数学(県立図書館)
  大人のための数学無限への飛翔(県立図書館)
数学ガール(県立図書館)
離散数学のすすめ
  アルゴリズムサイエンス複雑さの階層(市立図書館)
アルゴリズムサイエンス計算幾何(市立図書館)
  アルゴリズムとデータ構造(県立図書館)
  WEB+DB_PRESS VOL92
  定本JAVAプログラマのためのアルゴリズムとデータ構造

順序と木の話