INTRODUCTION TO ALGORITHMS

Size: px
Start display at page:

Download "INTRODUCTION TO ALGORITHMS"

Transcription

1 関根渓 ( 情報知識ネットワーク研究室 B4) INTRODUCTION TO ALGORITHMS 33. Computational Geometry 33.3 Finding the convex hull 33.4 Finding the closest pair of points

2 CONTENTS 33.3 凸包の構成 (Finding the convex hull) 33.4 最近点対の発見 (Finding the pair of closest points)

3 CONTENTS 33.3 凸包の構成 (Finding the convex hull) 凸包 (convex hull) とは? 凸包を計算するアルゴリズム

4 凸包 (convex hull) とは? 点集合 Q の凸包とは Q の各点がその境界上にあるような最小の凸多角形 P のこと Q の凸包を CH(Q) と表現 0 Q={,,p2,,2} 直感的には 集合の各点を板から飛び出ている釘とし それら全ての釘を取り囲むきつい輪ゴムが作る形状が凸包 2 1 p9 p8 p6 p5 p7 p4 p2 点集合 Q とその凸包 CH(Q)

5 凸包 (convex hull) とは? 凸包ではない例 例 1: 境界線外に点が存在 0 例 2: 凸多角形ではない p9 p7 p8 p6 p5 p4 p2 2 Q={,,p2,,2} 1 p9 p7 p8 p6 p5 p4 p2

6 CONTENTS 33.3 凸包の構成 (Finding the convex hull) 凸包 (convex hull) とは? 凸包を計算するアルゴリズム

7 凸包を計算する様々なアルゴリズムの紹介 1. 逐次添加法 (incremental method) 2. 分割統治法 (divided-and-conquer method) 3. 枝刈り探索法 (prune-and-search method) 4. Graham スキャン (Graham s scan) 5. Jarvis の行進法 (Jarvis s march)

8 逐次添加法 (incremental method) 点を左から右の順にソートし ソート列 <,,,pn> 求める. i 番目の段階で, 左から i-1 個目の凸包 CH({,,,pi}) を作る. 実行時間は O(nlogn) である. イメージとしては i=2 CH({,,,pi}) の頂点がスタックに積まれていく凸包を構成する点は最小で 3 点 ( 三角形 ) なので, 最初は,p2, が PUSH される Q={,,p2,,2} p2 p2 p4 p5 p6 p7 stack

9 逐次添加法 (incremental method) 点を左から右の順にソートし ソート列 <,,,pn> 求める. i 番目の段階で, 左からi-1 個目の凸包 CH({,,,pi}) を作る. 実行時間はO(nlogn) である. イメージとしては i=3 と CH({,,,p2}) の接線を求め, CH({,,,}) の辺とし, 辺に挟まれる境界線を取り除く この手続きをスタックの命令で表すと, 水平軸方向において, 接点と参照点の間にある点全てをスタックから POP し, 参照点を PUSH する, ということになる Q={,,p2,,2} p2 p2 p4 p5 p6 p7 stack

10 逐次添加法 (incremental method) 点を左から右の順にソートし ソート列 <,,,pn> 求める. i 番目の段階で, 左から i-1 個目の凸包 CH({,,,pi}) を作る. 実行時間は O(nlogn) である. イメージとしては i=3 が PUSH される Q={,,p2,,2} p2 p2 p4 p5 p6 p7 stack

11 逐次添加法 (incremental method) 点を左から右の順にソートし ソート列 <,,,pn> 求める. i 番目の段階で, 左から i-1 個目の凸包 CH({,,,pi}) を作る. 実行時間は O(nlogn) である. イメージとしては i=3 p4 と CH({,,,}) の接線を求め, CH({,,,p4}) の辺とし, 辺に挟まれる境界線を取り除く Q={,,p2,,2} p2 p2 p4 p5 p6 p7 stack

12 1. 逐次添加法 (incremental method) 点を左から右の順にソートし ソート列 <,,,pn> 求める. i 番目の段階で, 左から i-1 個目の凸包 CH({,,,pi}) を作る. 実行時間は O(nlogn) である. イメージとしては i=4 p4 が PUSH される Q={,,p2,,2} p2 p4 p2 p4 p5 p6 p7 stack

13 1. 逐次添加法 (incremental method) 点を左から右の順にソートし ソート列 <,,,pn> 求める. i 番目の段階で, 左から i-1 個目の凸包 CH({,,,pi}) を作る. 実行時間は O(nlogn) である. イメージとしては i=5 p5 と CH({,,,p4}) の接線を求め, CH({,,,p5}) の辺とし, 辺に挟まれる境界線を取り除く Q={,,p2,,2} p2 p4 p2 p4 p5 p6 p7 stack

14 逐次添加法 (incremental method) 点を左から右の順にソートし ソート列 <,,,pn> 求める. i 番目の段階で, 左から i-1 個目の凸包 CH({,,,pi}) を作る. 実行時間は O(nlogn) である. イメージとしては i=5 境界線上の点である と p4 が POP され, p5 が PUSH される Q={,,p2,,2} p2 p5 p2 p4 p5 p7 p6 stack

15 逐次添加法 (incremental method) 点を左から右の順にソートし ソート列 <,,,pn> 求める. i 番目の段階で, 左から i-1 個目の凸包 CH({,,,pi}) を作る. 実行時間は O(nlogn) である. イメージとしては i=6 p6 と CH({,,,p5}) の接線を求め, CH({,,,p6}) の辺とし, 辺に挟まれる境界線を取り除く Q={,,p2,,2} p2 p5 p2 p4 p5 p7 p6 stack

16 逐次添加法 (incremental method) 点を左から右の順にソートし ソート列 <,,,pn> 求める. i 番目の段階で, 左から i-1 個目の凸包 CH({,,,pi}) を作る. 実行時間は O(nlogn) である. イメージとしては i=6 境界線上の点である p5 が POP され, p6 が PUSH される Q={,,p2,,2} p2 p6 p2 p4 p5 p7 p6 stack

17 逐次添加法 (incremental method) 点を左から右の順にソートし ソート列 <,,,pn> 求める. i 番目の段階で, 左から i-1 個目の凸包 CH({,,,pi}) を作る. 実行時間は O(nlogn) である. イメージとしては i=7 p7 と CH({,,,p6}) の接線を求め, CH({,,,p7}) の辺とし, 辺に挟まれる境界線を取り除く Q={,,p2,,2} p2 p6 p2 p4 p5 p7 p6 stack

18 逐次添加法 (incremental method) 点を左から右の順にソートし ソート列 <,,,pn> 求める. i 番目の段階で, 左から i-1 個目の凸包 CH({,,,pi}) を作る. 実行時間は O(nlogn) である. イメージとしては i=7 p7 が PUSH されて 処理が終了 Q={,,p2,,2} p2 p7 p6 p2 p4 p5 p6 p7 stack

19 逐次添加法 (incremental method) 点を左から右の順にソートし ソート列 <,,,pn> 求める. i 番目の段階で, 左から i-1 個目の凸包 CH({,,,pi}) を作る. 実行時間は O(nlogn) である. イメージとしては Q={,,p2,,2} p2 i=7 大きな問題点が発生!! p7 が PUSH されて 処理が終了 p7 p6 p2 p4 p5 p6 p7 stack

20 逐次添加法 (incremental method) その問題点とは? スタックに積まれている点は, それが凸包の頂点であるということしか表していない つまりどの点とどの点を結べば凸包が作れるのかわからない そこで 解決法として以下のような技法が挙げられる p2 赤線 : 上部凸包黄線 : 下部凸包 線分 p7 を境界線として点集合を二つの部分集合に分割, それぞれの部分集合に対する凸包 ( 上部凸包 下部凸包 ) を逐次添加法で求める 線分 p7 p4 p7 上部凸包の頂点を含むスタックを S1 下部凸包の頂点を含むスタックを S2 とすると, p5 p6 これらは水平座標について左から右の順に頂点を含んでいるため,S2 を逆順にソートしたものを S1 と組み合わせて出力すれば, 凸包の頂点が時計回りに出力されることとなる

21 逐次添加法 (incremental method) 接点の選び方 接点はその時凸包の頂点となっている点のうちのどれかであるスタックに積まれている順にそれが接点であるかを調べていく i=5 例 : 3 p2 1 p4 接点ではないのでスタックから POP 2 接点ではないのでスタックから POP p4 p5 p6 p7 3 4 p2 stack 接点なのでそのまま 接点なのでそのまま 一度スタックに PUSH された点が POP されるのは高々 1 回であるから, アルゴリズム全体の POP の回数は n-3 回未満である つまり凸包の更新は全体で n-3(pop 回数 )+2n( 接点の選択 )=O(n) 時間しかかからない

22 逐次添加法 (incremental method) 計算量の吟味凸包の更新には全体で O(n) ( 前項より ) 左から右の順に点をソートするのに O(nlogn) ( マージソート等 ) PUSH 命令には O(n) したがって, 逐次添加法の計算量はソーティングに依存することとなり, 全体で O(nlogn) となる 以上から, Exercise 逐次添加法を用いて n 点の凸包を O(nlogn) 時間で計算する方法を示せ. は示された.

23 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する. イメージ的には

24 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する. イメージ的には 1 n 点の集合を 2 つの部分集合に分割

25 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する. イメージ的には 2 1

26 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

27 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

28 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

29 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する. 2 つの凸包 ( または直線 ) の上部接線を求め それらを辺として一つに統合する 3 2 1

30 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する. 2 つの凸包 ( または直線 ) の上部接線を求め それらを辺として一つに統合する 3 2 1

31 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

32 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

33 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

34 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

35 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

36 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

37 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

38 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

39 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

40 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

41 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

42 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

43 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

44 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

45 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

46 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

47 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

48 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

49 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

50 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

51 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

52 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する

53 分割統治法 (divide-and-conquer method) Θ(n) 時間で n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の凸包を再帰的に計算し, 巧妙な方法を用いてこれらの凸包を O(n) 時間で統合する.

54 分割統治法 (divide-and-conquer method) 上部接線の求め方 q4 r3 左の凸包の最右点 q3 右の凸包の最左点 r5 を線で結ぶ Us: 線分 (q3,r5) とすると r5 r4 Us は r5 において接線である q3 において接線ではない q3 r6 Us: 線分 (q4,r5) とする r2 q5 q2 r1 q1

55 分割統治法 (divide-and-conquer method) 上部接線の求め方 q4 r3 Us: 線分 (q4,r5) とすると Us は q4 において接線である r5 において接線ではない r4 Us: 線分 (q4,r4) とする r5 q3 r6 r2 q5 q2 r1 q1

56 分割統治法 (divide-and-conquer method) 上部接線の求め方 q4 r3 Us: 線分 (q4,r4) とすると Us は q4 において接線である r5 において接線ではない r4 Us: 線分 (q4,r3) とする r5 q3 r6 r2 q5 q2 r1 q1

57 分割統治法 (divide-and-conquer method) 上部接線の求め方 q4 r3 Us: 線分 (q4,r3) とすると Us は q4 において接線である ( 傾き Us> 直線 q4q5) r3 において接線である ( 傾き Us 直線 >r3r2) r4 よって q4r3 は上部接線であり, 凸包の辺 r5 q3 r6 r2 q5 q2 r1 q1

58 分割統治法 (divide-and-conquer method) 下部接線の求め方 上部接線を求めた方法で 下方向に頂点を辿ることで求まる q4 r3 r5 r4 q3 r6 r2 q5 q2 r1 q1

59 枝刈り探索法 (prune-and-search method) 9.3 節の最悪線形時間の中央値発見アルゴリズムとよく似ている. 凸包の上側部分 ( 上部チェイン ) だけが残るまで残りの点のうちの一定割合を繰り返し捨てることによって凸包の上側部分を求める. 次に, 同じ方法で下部チェインを求める. 凸包が h 個の頂点を含んでいるとき O(nlogh) 時間しかかからない. Q={,,p2,,2} 0 赤線 : 上部チェイン黄線 : 下部チェイン 2 1 p9 p8 p6 p5 p7 p4 p2 点集合 Q とその凸包 CH(Q)

60 凸包を計算するということ 計算幾何問題には凸包の計算から始めるものが多い例 : 最遠点対 (farthest pair problem) 平面上の n 点集合が与えられたときの互いの距離が最大となるような2 点のこと これら2 点は必ず凸包の頂点となる ( 練習問題 より ) n 点集合

61 凸包を計算するということ 計算幾何問題には凸包の計算から始めるものが多い例 : 最遠点対 (farthest pair problem) 平面上の n 点集合が与えられたときの互いの距離が最大となるような2 点のこと これら2 点は必ず凸包の頂点となる ( 練習問題 より ) n 点集合 最遠点対 証明は省くが, 凸 n 角形の最遠点対は O(n) 時間で計算可能 n 個の入力点の凸包を O(nlogn) 時間で計算し, 求められた凸多角形の頂点の最遠点を求めれば, 任意の n 点集合の最遠点対を O(nlogn) 時間で計算できる

62 これから紹介するアルゴリズムについて Graham スキャン (Graham s scan) 実行時間 :O(nlogn) Jarvis の行進法 (Jarvis s march) 実行時間 :O(nh) ( ただし hは凸包の頂点数 ) Q の頂点のうちどれを凸包の頂点として持つか どれを捨てるかを判定する 凸包の頂点を反時計回りの順に出力 ある参照点に関する偏角順に点を処理する 回転走査 と呼ばれる技法を用いる

63 回転走査 ある参照点についての偏角の順に点を処理する 1 参照点 p

64 回転走査 ある参照点についての偏角の順に点を処理する 2 参照点 p

65 回転走査 ある参照点についての偏角の順に点を処理する 3 参照点 p

66 回転走査 ある参照点についての偏角の順に点を処理する 4 参照点 p

67 回転走査 ある参照点についての偏角の順に点を処理する 5 参照点 p

68 回転走査 ある参照点についての偏角の順に点を処理する 6 参照点 p

69 回転走査 ある参照点についての偏角の順に点を処理する 7 参照点 p

70 Graham スキャン (Graham s scan) 候補点をスタック S で管理しながら凸包問題を解く 入力集合 Q の各点はいったんスタックに入れられ,CH(Q) の頂点でない点は最終的にはスタックから取り除かれる アルゴリズム終了の時点で, スタックはCH(Q) の頂点だけを, 境界面上での反時計回りの出現順に含む Graham s scan 終了時のスタック 入力集合 Q={,,p2,,2} p6 p7 p6 p7 p4 p5 p2 p2 stack

71 Graham スキャン (Graham s scan) 手続き GRAHAM-SCAN 入力 : 点集合 Q ただし Q 3 TOP(S): スタックSの一番上の点を返す関数 Line 1 NEXT-TO-TOP(S): スタックSの上から二番目の点を返す関数集合 Qのy 座標最小の点をとする複数あれば最左のものをとする アルゴリズム GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, or the leftmost such point in case of a tie 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) 5 PUSH(p 2,S) 6 for i 3 to m 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S

72 Graham スキャン (Graham s scan) 手続き GRAHAM-SCAN 入力 : 点集合 Q ただし Q 3 TOP(S): スタックSの一番上の点を返す関数 NEXT-TO-TOP(S): スタックSの上から二番目の点を返す関数ソートしたものを <,p2,.,pm> とする アルゴリズム Line 2 Q の残りの点を の周りの反時計回りの偏角順に 複数の点が同じ偏角をもつときは から最遠となるもの以外は取り除く GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, or the leftmost such point in case of a tie 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) 5 PUSH(p 2,S) 6 for i 3 to m 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S

73 Graham スキャン (Graham s scan) 手続き GRAHAM-SCAN 入力 : 点集合 Q ただし Q 3 TOP(S): スタックSの一番上の点を返す関数 NEXT-TO-TOP(S): スタックSの上から二番目の点を返す関数 アルゴリズム GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, or the leftmost such point in case of a tie 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) 5 PUSH(p 2,S) 6 for i 3 to m Line 3-5,,p2 をスタックに PUSH 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S

74 Graham スキャン (Graham s scan) 手続き GRAHAM-SCAN 入力 : 点集合 Q ただし Q 3 TOP(S): スタック S の一番上の点を返す関数 NEXT-TO-TOP(S): スタック S の上から二番目の点を返す関数 アルゴリズム GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, or the leftmost such point in case of a tie 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 Line 6-9 for ループ部分列 <,p4,.,pm> の各点について一度ずつ繰り返す目的は, 点 piを処理した後, スタックSが底から先頭に向けて CH({,,,2}) の頂点を反時計周り の順に含むようにすること (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) 5 PUSH(p 2,S) 6 for i 3 to m 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S

75 Graham スキャン (Graham s scan) 手続き GRAHAM-SCAN 入力 : 点集合 Q ただし Q 3 TOP(S): スタック S の一番上の点を返す関数 NEXT-TO-TOP(S): スタック S の上から二番目の点を返す関数 アルゴリズム Line 7-8 while ループ凸包の頂点を形成しないことがわかったときに, そのような点をスタックから取り除く GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, 凸包を反時計回りに回るとき, 各頂点で左に曲がるはず or the leftmost such point in case of a tie 2 let <p 1, p 2,, p m > be the ループで左折しない点を見つけたら remaining points in Q,, その度に頂点をスタッ sorted by polar angle クから取り除く in counterclockwise order around p 0 (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) 5 PUSH(p 2,S) 6 for i 3 to m 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S

76 Graham スキャン (Graham s scan) 手続き GRAHAM-SCAN 入力 : 点集合 Q ただし Q 3 TOP(S): スタックSの一番上の点を返す関数 NEXT-TO-TOP(S): スタックSの上から二番目の点を返す関数 アルゴリズム GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, or the leftmost such point in case of a tie 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) 5 PUSH(p 2,S) 6 for i 3 to m 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S

77 Graham スキャン (Graham s scan) 動作例 入力集合 Q( 未ソート )

78 Graham スキャン (Graham s scan) 動作例 集合 Q に含まれる点のうち, y 座標の最も小さい点を とする

79 Graham スキャン (Graham s scan) 動作例 0 P0 に対する偏角の順に残りの点をソートする 1 p9 p8 p7 p6 p5 2 p4 p2

80 Graham スキャン (Graham s scan) 動作例 0,,p2 を S に PUSH 1 p9 p7 p6 p5 2 p8 p4 p2 p2 stack S

81 Graham スキャン (Graham s scan) 動作例 0 i=3 NEXT-TO-TOP(S)= TOP(S)=p2 pi= p2 は右回り p2 を POP 1 p9 p7 p6 p5 2 p8 p4 p2 p2 stack S

82 Graham スキャン (Graham s scan) 動作例 0 i=3 NEXT-TO-TOP(S)= TOP(S)=p2 pi= p2 は右回り p2 を POP 1 p9 p7 p6 p5 2 p8 p4 p2 stack S

83 Graham スキャン (Graham s scan) 動作例 0 i=3 NEXT-TO-TOP(S)= TOP(S)= pi= は左回り を PUSH 1 p9 p7 p6 p5 2 p8 p4 p2 stack S

84 Graham スキャン (Graham s scan) 動作例 0 i=3 NEXT-TO-TOP(S)= TOP(S)= pi= は左回り を PUSH 1 p9 p7 p6 p5 2 p8 p4 p2 stack S

85 Graham スキャン (Graham s scan) 動作例 0 i=4 NEXT-TO-TOP(S)= TOP(S)= pi=p4 p4 は左回り p4 を PUSH 1 p9 p7 p6 p5 2 p8 p4 p2 stack S

86 Graham スキャン (Graham s scan) 動作例 0 i=4 NEXT-TO-TOP(S)= TOP(S)= pi=p4 p4 は左回り p4 を PUSH 1 p9 p7 p6 p5 2 p8 p4 p2 p4 stack S

87 Graham スキャン (Graham s scan) 動作例 0 i=5 NEXT-TO-TOP(S)= TOP(S)=p4 pi=p5 p4p5 は右回り p4 を POP p5 1 p9 p7 p6 2 p8 p4 p2 p4 stack S

88 Graham スキャン (Graham s scan) 動作例 0 i=5 NEXT-TO-TOP(S)= TOP(S)=p4 pi=p5 p4p5 は右回り p4 を POP p5 1 p9 p7 p6 2 p8 p4 p2 stack S

89 Graham スキャン (Graham s scan) 動作例 0 i=5 NEXT-TO-TOP(S)= TOP(S)= pi=p5 p5 は左回り p5 を PUSH p5 1 p9 p7 p6 2 p8 p4 p2 stack S

90 Graham スキャン (Graham s scan) 動作例 0 i=5 NEXT-TO-TOP(S)= TOP(S)= pi=p5 p5 は左回り p5 を PUSH p5 1 p9 p7 p6 2 p8 p4 p2 p5 stack S

91 Graham スキャン (Graham s scan) 動作例 0 i=6 NEXT-TO-TOP(S)= TOP(S)=p5 pi=p6 p5p6 は左回り p6 を PUSH p5 1 p9 p7 p6 2 p8 p4 p2 p5 stack S

92 Graham スキャン (Graham s scan) 動作例 0 i=6 NEXT-TO-TOP(S)= TOP(S)=p5 pi=p6 p5p6 は左回り p6 を PUSH p5 1 p9 p7 p6 2 p8 p4 p6 p5 stack S p2

93 Graham スキャン (Graham s scan) 動作例 0 i=7 NEXT-TO-TOP(S)=p5 TOP(S)=p6 pi=p7 p5p6p7 は左回り p7 を PUSH p6 p5 1 p9 p7 2 p8 p4 p6 p5 stack S p2

94 Graham スキャン (Graham s scan) 動作例 0 i=7 NEXT-TO-TOP(S)=p5 TOP(S)=p6 pi=p7 p5p6p7 は左回り p7 を PUSH p6 p5 1 p9 p7 2 p8 p4 p7 p6 p5 stack S p2

95 Graham スキャン (Graham s scan) 動作例 0 i=8 NEXT-TO-TOP(S)=p6 TOP(S)=p7 pi=p8 p6p7p8 は左回り p8 を PUSH p7 p6 p5 1 p9 2 p8 p4 p7 p6 p5 stack S p2

96 Graham スキャン (Graham s scan) 動作例 0 i=8 NEXT-TO-TOP(S)=p6 TOP(S)=p7 pi=p8 p6p7p8 は左回り p8 を PUSH p6 p5 1 p9 p7 p8 p7 p6 p5 stack S 2 p8 p2 p4

97 Graham スキャン (Graham s scan) 動作例 0 i=9 NEXT-TO-TOP(S)=p7 TOP(S)=p8 pi=p9 p7p8p9 は右回り p8 を POP p6 p5 1 p9 p7 p8 p7 p6 p5 stack S 2 p8 p2 p4

98 Graham スキャン (Graham s scan) 動作例 0 i=9 NEXT-TO-TOP(S)=p7 TOP(S)=p8 pi=p9 p7p8p9 は右回り p8 を POP p6 p5 p9 1 p7 2 p8 p4 p7 p6 p5 stack S p2

99 Graham スキャン (Graham s scan) 動作例 0 i=9 NEXT-TO-TOP(S)=p6 TOP(S)=p7 pi=p9 p6p7p9 は右回り p7 を POP p6 p5 1 p9 p7 2 p8 p4 p7 p6 p5 stack S p2

100 Graham スキャン (Graham s scan) 動作例 0 i=9 NEXT-TO-TOP(S)=p6 TOP(S)=p7 pi=p9 p6p7p9 は右回り p7 を POP p6 p5 1 p9 p7 2 p8 p4 p6 p5 stack S p2

101 Graham スキャン (Graham s scan) 動作例 0 i=9 NEXT-TO-TOP(S)=p5 TOP(S)=p6 pi=p9 p5p6p9 は右回り p9 を PUSH p6 p5 p9 1 p7 2 p8 p4 p6 p5 stack S p2

102 Graham スキャン (Graham s scan) 動作例 0 i=9 NEXT-TO-TOP(S)=p5 TOP(S)=p6 pi=p9 p5p6p9 は右回り p9 を PUSH p6 p5 p9 1 p7 2 p8 p4 p9 p6 p5 stack S p2

103 Graham スキャン (Graham s scan) 動作例 0 i=10 NEXT-TO-TOP(S)=p6 TOP(S)=p9 pi=0 p6p90 は右回り p9 を POP p6 p5 p9 1 p7 2 p8 p4 p9 p6 p5 stack S p2

104 Graham スキャン (Graham s scan) 動作例 0 i=10 NEXT-TO-TOP(S)=p6 TOP(S)=p9 pi=0 p6p90 は右回り p9 を POP p6 p5 p9 1 p7 2 p8 p4 p6 p5 stack S p2

105 Graham スキャン (Graham s scan) 動作例 0 i=10 NEXT-TO-TOP(S)=p5 TOP(S)=p6 pi=0 p5p60 は右回り p6 を POP p5 p9 p6 1 p7 2 p8 p4 p6 p5 stack S p2

106 Graham スキャン (Graham s scan) 動作例 0 i=10 NEXT-TO-TOP(S)=p5 TOP(S)=p6 pi=0 p5p60 は右回り p6 を POP p5 p9 p6 1 p7 2 p8 p4 p2 p5 stack S

107 Graham スキャン (Graham s scan) 動作例 0 i=10 NEXT-TO-TOP(S)= TOP(S)=p5 pi=0 p50 は右回り p5 を POP 1 p9 p7 p6 p5 2 p8 p4 p2 p5 stack S

108 Graham スキャン (Graham s scan) 動作例 0 i=10 NEXT-TO-TOP(S)= TOP(S)=p5 pi=0 p50 は右回り p5 を POP 1 p9 p7 p6 p5 2 p8 p4 p2 stack S

109 Graham スキャン (Graham s scan) 動作例 0 i=10 NEXT-TO-TOP(S)= TOP(S)= pi=0 0 は左回り 0 を PUSH 1 p9 p7 p6 p5 2 p8 p4 p2 stack S

110 Graham スキャン (Graham s scan) 動作例 0 i=10 NEXT-TO-TOP(S)= TOP(S)= pi=0 0 は左回り 0 を PUSH 1 p9 p7 p6 p5 2 p8 p4 p2 0 stack S

111 Graham スキャン (Graham s scan) 動作例 0 i=11 NEXT-TO-TOP(S)= TOP(S)=0 pi=1 01 は左回り 1 を PUSH 1 p9 p7 p6 p5 2 p8 p4 p2 0 stack S

112 Graham スキャン (Graham s scan) 動作例 0 i=11 NEXT-TO-TOP(S)= TOP(S)=0 pi=1 01 は左回り 1 を PUSH 1 p9 p7 p6 p5 2 p8 p4 1 0 stack S p2

113 Graham スキャン (Graham s scan) 動作例 0 i=12 NEXT-TO-TOP(S)=0 TOP(S)=1 pi=2 01 は右回り 1 を POP 1 p9 p7 p6 p5 2 p8 p4 1 0 stack S p2

114 Graham スキャン (Graham s scan) 動作例 0 i=12 NEXT-TO-TOP(S)=0 TOP(S)=1 pi=2 01 は右回り 1 を POP 1 p9 p7 p6 p5 2 p8 p4 p2 0 stack S

115 Graham スキャン (Graham s scan) 動作例 0 i=12 NEXT-TO-TOP(S)= TOP(S)=0 pi=2 01 は左回り 2 を PUSH 1 p9 p7 p6 p5 2 p8 p4 p2 0 stack S

116 Graham スキャン (Graham s scan) 動作例 0 i=12 NEXT-TO-TOP(S)= TOP(S)=0 pi=2 01 は左回り 2 を PUSH 1 p9 p7 p6 p5 2 p8 p4 2 0 stack S p2

117 Graham スキャン (Graham s scan) 動作例 0 以上で凸包が計算された スタック S は確かに, 凸包の頂点を反時計回りの順に含んでいる 1 p9 p7 p6 p5 2 p8 p4 2 0 stack S p2

118 Graham スキャン (Graham s scan) 補足説明 Ⅰ 偏角の大小比較 p2 p2 の に関する偏角が, の に関する偏角より大きい が p2 に対して時計回りの方向にある p2 が正 このように大小比較してソートすれば良い

119 Graham スキャン (Graham s scan) 補足説明 Ⅱ 右折, 左折の判定 p2がどちら回りなのか? 左折 右折 p2 が に関して時計回りか反時計回りかを判定すれば良い (33.1 節 p936 参照 ) p2 p2 p2 が に対して時計回りの時 右折反時計回りの時 左折

120 Graham スキャン (Graham s scan) 補足説明 Ⅱ 右折, 左折の判定 右折 例 : 右折の時 p2 (p2-) (-)>0 に対して p2 は時計回り p2 は右折

121 Graham スキャン (Graham s scan) 定理 33.1 Graham スキャンの正当性 Q 3 である点集合 Q について GRAHAM-SCAN を実行し, 終了したとき, スタック S はボトムからトップまで確かに CH(Q) の頂点を反時計回りに含んでいる. Proof ( 以下 ホワイトボードを交えながら説明する ) 2 行目より後, 点列 <,p2,,pm> を得る. i=2,3,,m に対して, 部分集合 Qi={,, pi} を定義する. Q-Qm に含まれる点は, に関する偏角が同じであるため取り除かれた点であり, それらの点は CH(Q) に入らず,CH(Qm)=CH(Q) である. よって, これは GRAHAM-SCAN が終了するとき, スタック S がボトムからトップまで反時計回りの順に CH(Qm) の頂点が積み重なるように構成されている, ということを示すのに十分である.,,pm が CH(Q) の頂点であると同時に,,,pi は全て CH(Qi) の頂点であるということに注意しよう.

122 Graham スキャン (Graham s scan) この証明には以下に示す ループの不変の性質を用いる : 6-9 行目のループの繰り返しの毎回のスタートにおいて, スタック S は確かにボトムからトップまで CH(Qi-1) の頂点を反時計回りの順に含むように構成されている.( 以下で証明 ) Initialization 最初に 6 行目を実行するとき, スタック S は確かに Q2=Qi-1 の頂点から構成され 3 点からなるこの集合は自身の凸包を形成するので, この不変の性質は成り立つ さらに, 頂点はボトムからトップまで反時計回りに現れる. Maintenance for ループの繰り返しに入ったとき, スタック S のトップは点 pi-1 であり, この点はこれ以前の繰り返しの終わり ( もしくは最初の繰り返しの前,i=3 のとき ) に PUSH されたものである. 7-8 行目の while ループが実行されたあとの, ただし 9 行目の pi がプッシュされる前の S のトップの点を pj とし,pk が S 上において pj の下にある点であるとする. この瞬間においては pj が S のトップの点であり, まだ pi を S にプッシュしておらず,S は確かに for ループの j の時の繰り返しの後に含んでいたのと同じ点を含んでいる.

123 Graham スキャン (Graham s scan) ループの繰り返しによって,S は確かに CH(Qj) の頂点を含んでおり, それらはボトムからトップに反時計回りの順に現れる. piがプッシュされる直前に注目することを続けよう. 図 33.8(a) で触れているように,pi の に関する偏角は pj のそれよりも大きいため, pkpjpi は左回り ( そうでなければ pj をPOPしなければならなかっただろう ) であり, S が確かに CH(Qj) の頂点を含んでいるので, 一度 pi をプッシュすると, スタックSは確かにCH(Qj {pi}) の頂点を, 今まで通りボトムからトップまで反時計回りの順に含むようになる. pj pk (a) pi の に関する偏角は pj のそれよりも大きく, 角 pkpjpi は左回りであるために, pi を CH(Q) に加えることで, 確かに CH(Qj {pi}) の頂点を得る. pi p2 図 33.8(a)

124 Graham スキャン (Graham s scan) さて,CH(Qj {pi}) が CH(Qi) と同じ点集合であることを示そう. ある点 pt を for ループの i 番目の繰り返しの間にPOPされた点であり, pr は pt がPOPされたときスタックSにおいて pt のすぐ下にある点と考える (pr は pj かもしれない ). prptpi は左回りではなく,pt の に関する偏角は pr のそれよりも大きい. 図 33.8(b) にあるように,pt は,pr,pi が形成する三角形の内部に, もしくは三角形の横になくてはならない ( しかしそれは三角形の頂点ではない ). pj pk pi pr (b) もし角 prptpi は左回りでないなら, pt は,pr,pi によって形成される三角形の内部, または横に存在することになり,CH(Qi) の頂点にはならない. pt p2 図 33.8(b)

125 Graham スキャン (Graham s scan) pt は Qi の他の 3 点によって形成される三角形の内部に存在するので, CH(Qi) の頂点とはなり得ないのは明らかである. よって pt は CH(Qi) の頂点ではないので, CH(Qi-{pt})=CH(Qi) を得る. pj pk pi pr (b) もし角 prptpi は左回りでないなら, pt は,pr,pi によって形成される三角形の内部, または横に存在することになり,CH(Qi) の頂点にはならない. pt p2 図 33.8(b)

126 Graham スキャン (Graham s scan) Pi を for ループにおける i 番目の繰り返しの間に POP された点の集合とする. Pi の全ての点に equality(33.1 節 ) が適用できるので, 繰り返しそれを適用することで CH(Qi-Pi)=CH(Qi) を示すことができる. ただし Qi-Pi=Qj {pi} であり, それゆえ CH(QjU{Pi})=CH(Qi-Pi)=CH(Qi)=CH(Qi) と結論付けることができる. ひとたび pi が PUSH されると, スタック S は確かにボトムからトップまで CH(Qi) の頂点を反時計回りの順に含むようになるということを示した. i をインクリメントすることによって次の繰り返しを維持するためのループの不変の性質が発生する. Termination ループが終了するとき,i=m+1 となり, したがってループの不変の性質はスタック S が確かに CH(Qm) の, つまり CH(Q) の頂点が反時計回りの順に格納されていることを意味する. これで証明は完了である.

127 Graham スキャン (Graham s scan) 計算量の吟味 n= Q として, グラハムスキャンが O(nlogn) 時間で終了するということを示す. GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, or the leftmost such point in case of a tie 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) 5 PUSH(p 2,S) 6 for i 3 to m 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S

128 Graham スキャン (Graham s scan) 計算量の吟味 n= Q として, グラハムスキャンが O(nlogn) 時間で終了するということを示す Line 1. Θ(n) 時間かかる GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, or the leftmost such point in case of a tie 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) 5 PUSH(p 2,S) 6 for i 3 to m 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S

129 Graham スキャン (Graham s scan) Line 2 偏角のソートするのにマージソートもしくはヒープソートを用い 計算量の吟味, 角度比較に33.1 節のcross-product-methodを用いるので,O(nlogn) 時間かかる n= Q として, グラハムスキャンが O(nlogn) 時間で終了するということを示す. ( 偏角が同じになる最遠点を除いてすべて取り除くのはトータルでO(n) 時間 ) GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, or the leftmost such point in case of a tie Θ(n) 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) 5 PUSH(p 2,S) 6 for i 3 to m 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S

130 Graham スキャン (Graham s scan) 計算量の吟味 n= Q として, グラハムスキャンが O(nlogn) 時間で終了するということを示す. GRAHAM-SCAN(Q) 1 let Line p be the point in Q with the minimum y-coordinate, O(1) 時間かかる or the leftmost such point in case of a tie Θ(n) 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 O(nlogn) (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) 5 PUSH(p 2,S) 6 for i 3 to m 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S

131 Graham スキャン (Graham s scan) Line 6-9 m n-1 なので計算量の吟味,for ループの実行回数は高々 n-3 回 PUSHにはO(1) 時間かかるから, 各繰り返しは7-8 行目の whileループを除けば n= Q として, グラハムスキャンが O(nlogn) 時間で終了するということを示す. O(1) 時間かかるよって while ループを除けば,for ループ全体はO(n) 時間かかる GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, or the leftmost such point in case of a tie 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) 5 PUSH(p 2,S) 6 for i 3 to m O(1) Θ(n) O(nlogn) 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S

132 Graham スキャン (Graham s scan) 計算量の吟味 n= Q として, グラハムスキャンが O(nlogn) 時間で終了するということを示す. GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, or the leftmost such point in case of a tie Θ(n) 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 O(nlogn) (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) O(1) 5 PUSH(p 2,S) 6 for i 3 to m 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) O(n) ( ただし while ループは除く ) 10 return S? では,While ループの計算量はどうなるのか?

133 Line 行目の検査がO(1) 時間かかるので,POPの各呼び出しにはO(1) 時間かかる m n-1 m-2 n-3 より,while ループにかかる時間はアルゴリズム全体でO(n) 凸包を計算するアルゴリズム Graham スキャン (Graham s scan) 計算量の吟味 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 結論から言えば,while ループにかかる時間は O(n) となる これを示すのに, 集計法 (aggregation method) を用いる i=0,1,,m に対するそれぞれの点 pi はスタックに一度しか積まれない 各 PUSH 命令に対し,POP 命令は高々 1 回しか実行されない 少なくとも 3 点,,pm はスタックから決して POP されることはない 実際は高々 m-2 回の POP 命令が全体で実行される While ループの各繰り返しは POP 命令を 1 回実行 全体で高々 m-2 回の while ループの繰り返しが存在

134 Graham スキャン (Graham s scan) 計算量の吟味 n= Q として, グラハムスキャンが O(nlogn) 時間で終了するということを示す. GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, or the leftmost such point in case of a tie Θ(n) 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 O(nlogn) (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) O(1) 5 PUSH(p 2,S) 6 for i 3 to m 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S O(n) ( ただし while ループは除く ) O(n) ( 全体で )

135 Graham スキャン (Graham s scan) 計算量の吟味 n= Q として, グラハムスキャンが O(nlogn) 時間で終了するということを示す. GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, or the leftmost such point in case of a tie Θ(n) 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 O(nlogn) (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) 4 PUSH(p 1,S) O(1) 5 PUSH(p 2,S) 6 for i 3 to m 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S O(n) (6-9 行目全体で )

136 Graham スキャン (Graham s scan) 計算量の吟味 n= Q として, グラハムスキャンが O(nlogn) 時間で終了するということを示す. GRAHAM-SCAN(Q) 1 let p 0 be the point in Q with the minimum y-coordinate, or the leftmost such point in case of a tie 2 let <p 1, p 2,, p m > be the remaining points in Q, sorted by polar angle in counterclockwise order around p 0 (if more than one point has the same angle, remove all but the one that is farthest from p 0 ) 3 PUSH(p 0,S) O(nlogn) 4 PUSH(p 1,S) 5 PUSH(p 2,S) 6 for i 3 to m 7 do while the angle formed by points NEXT-TO-TOP(S), TOP(S), and p i makes nonleft turn 8 do POP(S) 9 PUSH(p i, S) 10 return S 結局,GRAHAM-SCAN 全体の計算量はソートの実行時間に依存 O(nlogn)

137 Graham スキャン (Graham s scan) 候補点をスタック S で管理しながら凸包問題を解く 入力集合 Q の各点はいったんスタックに入れられ,CH(Q) の頂点でない点は最終的にはスタックから取り除かれる アルゴリズム終了の時点で, スタックはCH(Q) の頂点だけを, 境界面上での反時計回りの出現順に含む Graham s scan 終了時のスタック 入力集合 Q={,,p2,,2} p6 p7 p6 p7 p4 p5 p2 p2 stack

138 Jarvis の行進法 (Jarvis s march) パッケージ包装 (package wrapping) ( またはギフト包装 (gift wrapping)) という技法により凸包を計算 イメージ図 : 物体 X 包装紙

139 Jarvis の行進法 (Jarvis s march) パッケージ包装 (package wrapping) ( またはギフト包装 (gift wrapping)) という技法により凸包を計算 イメージ図 : 包装紙

140 Jarvis の行進法 (Jarvis s march) パッケージ包装 (package wrapping) ( またはギフト包装 (gift wrapping)) という技法により凸包を計算 イメージ図 : 包装紙

141 Jarvis の行進法 (Jarvis s march) パッケージ包装 (package wrapping) ( またはギフト包装 (gift wrapping)) という技法により凸包を計算 イメージ図 : 包装紙

142 Jarvis の行進法 (Jarvis s march) パッケージ包装 (package wrapping) ( またはギフト包装 (gift wrapping)) という技法により凸包を計算 イメージ図 : Complete!! h を CH(Q) の頂点数として,O(nh) 時間で実行可能 h が o(logn) であるとき,Graham スキャンよりも漸近的に速い 包装紙

143 Jarvis の行進法 (Jarvis s march) より形式的には CH(Q) の頂点の系列 H={,, ph-1} を求める. 点集合 Q の中で最も y 座標が小さい点を とする. は に関して偏角最小の点,p2 は に関して偏角最小の点, は としていく. y 座標が最大の点 pk に到達したとき 凸包の右側チェインが完成. 左側チェインを構成するために,pk に関して負の x 軸からの偏角が最小の点として pk+1 を選択. これを に戻ってくるまで続ける. 左側チェイン 右側チェイン H={,, p4} p4 p2

144 Jarvis の行進法 (Jarvis s march) 動作例 入力集合 Q

145 Jarvis の行進法 (Jarvis s march) 動作例 集合 Q に含まれる点のうち, y 座標の最も小さい点を とする

146 Jarvis の行進法 (Jarvis s march) 動作例 に関する各点の偏角を比較

147 Jarvis の行進法 (Jarvis s march) 動作例 に関する負の偏角が最小である点を次の頂点とする

148 Jarvis の行進法 (Jarvis s march) 動作例 に関する偏角が最小である点を次の頂点とする

149 Jarvis の行進法 (Jarvis s march) 動作例 に関する各点の偏角を比較

150 Jarvis の行進法 (Jarvis s march) 動作例 に関する偏角が最小である点を次の頂点とする

151 Jarvis の行進法 (Jarvis s march) 動作例 に関する偏角が最小である点を次の頂点とする p2

152 Jarvis の行進法 (Jarvis s march) 動作例 p2 に関する各点の偏角を比較 p2

153 Jarvis の行進法 (Jarvis s march) 動作例 p2 に関する偏角が最小である点を次の頂点とする p2

154 Jarvis の行進法 (Jarvis s march) 動作例 p2 に関する偏角が最小である点を次の頂点とする p2

155 Jarvis の行進法 (Jarvis s march) 動作例 右側チェイン y 座標が最大の点 に到達右側チェインが完成 p2

156 Jarvis の行進法 (Jarvis s march) 動作例 右側チェイン に関する各点の負の偏角を比較 p2

157 Jarvis の行進法 (Jarvis s march) 動作例 右側チェイン に関する負の偏角が最小である点を次の頂点とする p2

158 Jarvis の行進法 (Jarvis s march) 動作例 右側チェイン に関する負の偏角が最小である点を次の頂点とする p2 p4

159 Jarvis の行進法 (Jarvis s march) 動作例 右側チェイン p4 に関する各点の負の偏角を比較 p2 p4

160 Jarvis の行進法 (Jarvis s march) 動作例 右側チェイン p4 に関する負の偏角が最小である点を次の頂点とする p2 p4

161 Jarvis の行進法 (Jarvis s march) 動作例 右側チェイン p4 に関する負の偏角が最小である点を次の頂点とする p2 p4

162 Jarvis の行進法 (Jarvis s march) 動作例 左側チェイン右側チェイン に到達左側チェインが完成 p2 p4

163 Jarvis の行進法 (Jarvis s march) 動作例 点集合 Q の凸包が計算された p2 p4

164 Jarvis の行進法 (Jarvis s march) Jarvis の行進法を左右のチェインを別々に構成するのではなく実行することも可能 このような実行方法では, 選ばれた最後の凸包の辺を覚えておき, 凸包の辺の角度の列が真に増加列であることが必要になる (0 から 2π の範囲で ) 別々にチェインを構成する利点 角度を明示的に計算する必要がない 計算量の吟味 偏角の比較は 33.1 節の技法を用いると O(1) 時間でできる ある参照点に関する n 個の点の偏角の最小値は O(n) 時間で計算可能 アルゴリズム全体は O(nh) 時間で計算可能

165 CONTENTS 33.4 最近点対の発見 (Finding the pair of closest points) 最近点対とは? 最近点対を計算するアルゴリズム

166 CONTENTS 33.4 最近点対の発見 (Finding the pair of closest points) 最近点対とは? 最近点対を計算するアルゴリズム

167 最近点対 (pair of closest points) とは? n 2 点の集合 Q の中の,2 点間のユークリッド距離が最小である組 n 点集合 Q,p2 のユークリッド距離 : x 1 x (y 1 y 2 ) 2 (x1,y1) p2(x2,y2) 最近点対 交通制御システムで, 衝突を検出すること等に応用されている

168 CONTENTS 33.4 最近点対の発見 (Finding the pair of closest points) 最近点対とは? 最近点対を計算するアルゴリズム

169 凸包を計算する様々なアルゴリズムの紹介 1. 腕力法 (brute-force method) 2. 分割統治法 (divided-and-conquer method)

170 最近点対を計算するアルゴリズム 腕力法 (brute-force method) 力づくで強引な方法 単に全ての n 2 =Θ(n2 ) 通りの点対を調べる 参照点 ある参照点と他の点全ての距離を計算し, 最小値を保持しながら参照点を変えていく とてつもなく時間がかかる

171 最近点対を計算するアルゴリズム 分割統治法 (divide-and-conquer algorithm) アルゴリズム全体の計算量を T(n) とすると,T(n)=2T(n/2)+O(n) T(n)=O(nlogn) ( 口頭で説明 ) 点集合全体を分割し,2 つの部分集合をつくる それらの部分集合の最近点対を再帰的に計算

172 分割統治法 (divide-and-conquer method) n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の最近点対を再帰的に計算する. 求める最近点対は, 再帰呼び出しで見つかった点対 または, 部分集合の一方に 1 点を, もう一方に 1 点を持つ点対である. イメージ的には 分割 n 点集合 右側の最近点対 左側の最近点対 2 つの部分集合の片方ずつに 1 つずつ要素を持つ最近点対

173 分割統治法 (divide-and-conquer method) n 点の集合を, 左から n/2 個の点からなる集合と右から n/2 個の点からなる集合の 2 つに分割し, これらの部分集合の最近点対を再帰的に計算する. 求める最近点対は, 再帰呼び出しで見つかった点対 または, 部分集合の一方に 1 点を, もう一方に 1 点を持つ点対である. イメージ的には n 点集合 求めるべき最近点対 アルゴリズム全体の計算量を T(n) とすると,T(n)=2T(n/2)+O(n) T(n)=O(nlogn)

174 分割統治法 (divide-and-conquer method) 具体的には 部分集合 P P =5 毎回の再帰呼び出しで部分集合 P Q を入力とする X[0],Y[1] 部分集合 P の全ての点を含む配列 X と Y を用いる X は x 座標が昇順にソートされている Y は y 座標の昇順にソートされている X[1],Y[4] X[0],Y[1] X[4],Y[2] 再起呼び出しの段階でソートは行わない ソートを行うと実行時間の再起式は T(n)=2T(n/2)+O(logn) T(n)=O(nlog 2 n) となってしまう X[2],Y[0] O(nlogn) とするためにはソーティングを実行せずに整列性を維持することが必要 そこでプリソーティング (presorting) という考え方を用いる ( 後ほど説明 )

175 分割統治法 (divide-and-conquer method) アルゴリズムの動作 ( 入力は P,X,Y) P 3 のとき 腕力法により P 2 個の点すべての点対を調べて最も近い点対を返す P >3 のとき 再起呼び出しにより分割統治法を実行

176 分割統治法 (divide-and-conquer method) アルゴリズムの動作 ( 入力は P,X,Y) 分割 点集合 P X[2],Y[8] X[8],Y[9] X[5],Y[7] X[7],Y[6] X[4],Y[5] X[6],Y[4] X[0],Y[2] X[1],Y[0] X[3],Y[3] X[9],Y[1]

177 分割統治法 (divide-and-conquer method) アルゴリズムの動作 ( 入力は P,X,Y) 分割 点集合 P を 2 つの集合 P L と P R に分割 集合 P L 集合 P R X[2],Y[8] X[8],Y[9] X[5],Y[7] X[7],Y[6] X[4],Y[5] X[0],Y[2] X[1],Y[0] X[3],Y[3] X[6],Y[4] X[9],Y[1]

178 分割統治法 (divide-and-conquer method) アルゴリズムの動作 ( 入力は P,X,Y) 分割 垂直線 l 集合 P L 集合 P R 点集合 P を 2 つの集合 P L と P R に分割 P L の点は全て直線 l の左に P R の点は全て直線 l の右にくるような垂直線 l を求める X[2],Y[8] X[8],Y[9] X[5],Y[7] X[7],Y[6] X[4],Y[5] X[0],Y[2] X[1],Y[0] X[3],Y[3] X[6],Y[4] X[9],Y[1]

179 分割統治法 (divide-and-conquer method) アルゴリズムの動作 ( 入力は P,X,Y) 分割 垂直線 l 集合 P L 集合 P R 配列 X を X L と X R に分割し, それぞれ P L と P R の点を x 座標の昇順に含むようにする X L [2],Y L [4] X R [0],Y R [3] X R [3],Y R [4] 同様に配列 Y を Y L と Y R に分割し, それぞれ P L と P R の点を y 座標の昇順に含むようにする X R [2],Y R [2] X L [4],Y L [3] X R [1],Y R [1] X L [0],Y L [1] X L [3],Y L [2] X L [1],Y L [0] X R [4],Y R [0]

180 分割統治法 (divide-and-conquer method) アルゴリズムの動作 ( 入力は P,X,Y) 統治 垂直線 l 集合 P L 集合 P R P を P L と P R に分割後, 再帰呼び出しを 2 回行う ( 簡単のためこれ以上の分割を省略 ) 1 回目 ( 入力 P L,X L,Y L ) では P L における最近点対を X L [2],Y L [4] X R [0],Y R [3] X R [3],Y R [4] 2 回目 ( 入力 P R,X R,Y R ) では P R における最近点対を X L [4],Y L [3] P R の最近点対 X R [2],Y R [2] それぞれ求める P L の最近点対 X R [1],Y R [1] X L [0],Y L [1] X L [3],Y L [2] X L [1],Y L [0] X R [4],Y R [0]

181 分割統治法 (divide-and-conquer method) アルゴリズムの動作 ( 入力は P,X,Y) 統治 垂直線 l P L と P R に対して求められた最近点対の距離をそれぞれ δ L,δ R とし, 集合 P L 集合 P R X L [2],Y L [4] X R [0],Y R [3] X R [3],Y R [4] X L [4],Y L [3] δ R X R [2],Y R [2] X L [0],Y L [1] X L [3],Y L [2] δ L X R [1],Y R [1] X L [1],Y L [0] X R [4],Y R [0]

182 分割統治法 (divide-and-conquer method) アルゴリズムの動作 ( 入力は P,X,Y) 統治 垂直線 l P L と P R に対して求められた最近点対の距離をそれぞれ δ L,δ R とし, 集合 P L 集合 P R δ =min(δ L,δ R ) とする X L [2],Y L [4] X R [0],Y R [3] X R [3],Y R [4] X L [4],Y L [3] δ X R [2],Y R [2] X R [1],Y R [1] X L [0],Y L [1] X L [3],Y L [2] X L [1],Y L [0] X R [4],Y R [0]

183 分割統治法 (divide-and-conquer method) アルゴリズムの動作 ( 入力は P,X,Y) 統合 垂直線 l 集合 P L 集合 P R 最近点対は先ほど見つけた距離 δ の点対もしくは, 1 点を P L に, もう 1 点を P R にもつ距離 δ の点対 このアルゴリズムではそのような点があるかを判定する ( 判定法については後ほど説明 ) X L [2],Y L [4] X R [0],Y R [3] X R [3],Y R [4] X L [4],Y L [3] δ X R [2],Y R [2] この場合は δ <δ となる距離 δ の点対が存在したがって距離 δ の点対が返される δ X R [1],Y R [1] return X L [0],Y L [1] X L [3],Y L [2] X L [1],Y L [0] X R [4],Y R [0]

184 分割統治法 (divide-and-conquer method) 判定法 距離が δ 未満の点対が存在する場合, それらの 2 点は直線から δ 単位以内にあるはず P L P R 2δ δ p L p R l 図 33.12(a) 図 33.12(a) に示すように, それら 2 点は直線 l を中心とする幅 2δ の垂直帯領域にあるはず

185 分割統治法 (divide-and-conquer method) そのような点対が存在すれば必ず見つけるために, 以下のようなことを行う 垂直線 l 1. 配列 Y から幅 2δ の垂直帯領域にないすべての点を取り除いて, 配列 Y を作る配列 Y は Y と同様に y 座標に関してソートされている P L P R X L [2],Y L [4] X R [0],Y R [3] X R [3],Y R [4] X L [4],Y L [3] δ X R [2],Y R [2] X R [1],Y R [1] X L [0],Y L [1] X L [3],Y L [2] X L [1],Y L [0] X R [4],Y R [0]

186 分割統治法 (divide-and-conquer method) そのような点対が存在すれば必ず見つけるために, 以下のようなことを行う 垂直線 l 1. 配列 Y から幅 2δ の垂直帯領域にないすべての点を取り除いて, 配列 Y を作る配列 Y は Y と同様に y 座標に関してソートされている P L P R X L [2],Y L [4] X R [0],Y R [3] X R [3],Y R [4] X L [4],Y L [3] δ X R [2],Y R [2] X R [1],Y R [1] X L [0],Y L [1] X L [3],Y L [2] X L [1],Y L [0] 2δ X R [4],Y R [0]

187 分割統治法 (divide-and-conquer method) そのような点対が存在すれば必ず見つけるために, 以下のようなことを行う 垂直線 l 1. 配列 Y から幅 2δ の垂直帯領域にないすべての点を取り除いて, 配列 Y を作る配列 Y は Y と同様に y 座標に関してソートされている P L P R Y [2] 後々の比較のために残しておく Y [1] δ Y [0] 2δ

188 分割統治法 (divide-and-conquer method) そのような点対が存在すれば必ず見つけるために, 以下のようなことを行う P L 垂直線 l P R 2. 配列 Y の各点 p について,p から δ 単位内にある Y の点を求める後々証明することだが,Y において p に続く 7 点だけを考えれば良い p からこの 7 点までの距離を計算し,Y のすべての点対についてそれまでに見つかった最近点対の距離 δ の履歴を管理しておく Y [1] Y [2] δ p=y [0] 最近点対の距離 δ =Y [1] Y [0] Y [0] 2δ

189 分割統治法 (divide-and-conquer method) そのような点対が存在すれば必ず見つけるために, 以下のようなことを行う P L 垂直線 l P R 2. 配列 Y の各点 p について,p から δ 単位内にある Y の点を求める後々証明することだが,Y において p に続く 7 点だけを考えれば良い p からこの 7 点までの距離を計算し,Y のすべての点対についてそれまでに見つかった最近点対の距離 δ の履歴を管理しておく Y [1] Y [2] δ p=y [0] 最近点対の距離 δ =Y [1] Y [0] δ Y [0] 2δ

190 分割統治法 (divide-and-conquer method) そのような点対が存在すれば必ず見つけるために, 以下のようなことを行う P L 垂直線 l P R 2. 配列 Y の各点 p について,p から δ 単位内にある Y の点を求める後々証明することだが,Y において p に続く 7 点だけを考えれば良い p からこの 7 点までの距離を計算し,Y のすべての点対についてそれまでに見つかった最近点対の距離 δ の履歴を管理しておく Y [2] δ p=y [0] 最近点対の距離 δ =Y [1] Y [0] Y [1] Y [0] δ 2δ

191 分割統治法 (divide-and-conquer method) そのような点対が存在すれば必ず見つけるために, 以下のようなことを行う P L 垂直線 l P R 2. 配列 Y の各点 p について,p から δ 単位内にある Y の点を求める後々証明することだが,Y において p に続く 7 点だけを考えれば良い p からこの 7 点までの距離を計算し,Y のすべての点対についてそれまでに見つかった最近点対の距離 δ の履歴を管理しておく Y [1] Y [2] Y [0] δ p=y [1] 最近点対の距離 δ =Y [1] Y [0] δ 2δ

192 分割統治法 (divide-and-conquer method) そのような点対が存在すれば必ず見つけるために, 以下のようなことを行う P L 垂直線 l P R 3. δ <δ の場合, この垂直帯領域は再帰呼び出しで見つけられたものより近い点対を確かに含んでいるそこで, この点対とその距離 δ を返すそうでなければ, 再帰呼び出しで見つかった最近点対とその距離 δ を返す Y [1] δ Y [2] Y [0] δ 左図より δ <δ したがって Y [0],Y [1] とその距離 δ が返る return 2δ この説明では O(nlogn) の実行時間を達成するために必要になる実行上の詳細な部分を省略しているアルゴリズムの正当性を説明したあとで, この目標の限界を達成するためのアルゴリズムの実行法を示す

193 分割統治法 (divide-and-conquer method) 正当性 アルゴリズムは次の2 点を除いて明白 1. P 3 のときのアルゴリズムの正当性 これ以上再帰を行えないことによって,1 点からなる部分問題を解かなくてもいいということがわかる 2. 配列 Y において, 各点に続く 7 点だけを調べれば良い 以下でこれを証明していく

194 分割統治法 (divide-and-conquer method) 正当性 再起のとあるレベルにおいて最近点対が p L P L と p R P R であるとする p L と p R の距離は真に δ より小さい p L は直線 l またはその左にあり,δ 単位以上離れていない p R は直線 l またはその右にあり,δ 単位以上離れていない p L と p R は互いに垂直方向に δ 単位以内にある p L と p R は直線 l を中心とする δ 2δ の長方形の中にある P L P R 2δ δ p L p R l 図 33.12(a)

195 分割統治法 (divide-and-conquer method) 正当性 δ 2δ の長方形の中に P の点が高々 8 個しかないことを示す この長方形の δ δ の正方形を考える P L 内の点はすべて少なくとも δ だけ離れている 正方形の中には高々 4 点しか存在しない (P R も同様 ) 長方形内には P の点が高々 8 点しか存在し得ない δ P L P R δ 配列 Y の各点に続く 7 点だけを調べれば良いことを示す 配列 Y において p L は p R よりも前にあると仮定する 一般性は失われない p L が配列 Y においてどんな前にあり,p R がどんな後に あろうとも p R は p L に続く 7 個の位置のどれかにある δ 以上で, 最近点対アルゴリズムの正当性が示された 図 33.12(b) 重複点 : 一方が P L 上にあり もう一方が P R 上にある 重複点 : 一方が P L 上にあり もう一方が P R 上にある

196 分割統治法 (divide-and-conquer method) 実現性と実行時間 主な難しさは以下の 2 点である 1. 再帰呼び出しで渡される配列 X L, X R, Y L, Y R が座標の順にソートされていること 2. Y が y 座標でソートされていること もし以上の2つが保証されるのなら, 集合 PをP L とP R に分割するのは線形時間で出来る 各呼び出しにおいてソート済みの配列からソートされた部分集合をどうやって形成するかが鍵 ( 例 : PをP L とP R に分割した後,y 座標でソートされた配列 Y L とY R を線形時間で作らなければならない ) 節で述べたマージソートの手続きMERGEとは逆の方法を取ることで条件を満たすようにする

197 分割統治法 (divide-and-conquer method) 実現性と実行時間 その考えを説明したのが以下の擬似コードである 1 length[y L ] length[y R ] 0 2 for i 1 to length[y] 3 do if Y[i] P L 4 then length[y L ] length[y L ] Y[length[Y L ]] Y[i] 6 else length[y R ] length[y R ] Y[length[Y R ]] Y[i]

198 分割統治法 (divide-and-conquer method) 実現性と実行時間 Line 2-7 for ループその考えを説明したのが以下の擬似コードである配列 Yの点を順に調べていく 1 length[y L ] length[y R ] 0 2 for i 1 to length[y] 3 do if Y[i] P L 4 then length[y L ] length[y L ] Y[length[Y L ]] Y[i] 6 else length[y R ] length[y R ] Y[length[Y R ]] Y[i]

199 分割統治法 (divide-and-conquer method) 実現性と実行時間 その考えを説明したのが以下の擬似コードである 1 length[y L ] length[y R ] 0 2 for i 1 to length[y] 3 do if Y[i] P L 4 then length[y L ] length[y L ] Y[length[Y L ]] Y[i] 6 else length[y R ] length[y R ] Y[length[Y R ]] Y[i] Line 3-5 点 Y[i] が P L にあればそれを Y R の最後に追加する

200 分割統治法 (divide-and-conquer method) 実現性と実行時間 その考えを説明したのが以下の擬似コードである 1 length[y L ] length[y R ] 0 2 for i 1 to length[y] 3 do if Y[i] P L 4 then length[y L ] length[y L ] Y[length[Y L ]] Y[i] 6 else length[y R ] length[y R ] Y[length[Y R ]] Y[i] Line 6-7 そうでなければそれを Y R の最後に追加する

201 分割統治法 (divide-and-conquer method) プリソーティング (presorting) と計算量点集合 Q の点を一度だけ, 最初の再帰呼び出しの前にソートしておくだけで良い プリソーティングのために余分に O(nlogn) の時間がかかるが, 再帰の各ステップでは再帰呼び出し以外では線形時間しかかからない T(n) を各再帰ステップの実行時間とし,T (n) を全体の実行時間とすると, T (n)=t(n)+o(nlogn) 及び, T(n)= 2T n + O n n > 3 2 O 1 n 3 を得るしたがって,T(n)=O(nlogn) より T (n)=o(nlogn) を得る

Microsoft PowerPoint - ppt-7.pptx

Microsoft PowerPoint - ppt-7.pptx テーマ 7: 最小包含円 点集合を包含する半径最小の円 最小包含円問題 問題 : 平面上に n 点の集合が与えられたとき, これらの点をすべて内部に含む半径最小の円を効率よく求める方法を示せ. どの点にも接触しない包含円 すべての点を内部に含む包含円を求める 十分に大きな包含円から始め, 点にぶつかるまで徐々に半径を小さくする 1 点にしか接触しない包含円 現在の中心から周上の点に向けて中心を移動する

More information

COMPUTING THE LARGEST EMPTY RECTANGLE

COMPUTING THE LARGEST EMPTY RECTANGLE COMPUTING THE LARGEST EMPTY RECTANGLE B.Chazelle, R.L.Drysdale and D.T.Lee SIAM J. COMPUT Vol.15 No.1, February 1986 2012.7.12 TCS 講究関根渓 ( 情報知識ネットワーク研究室 M1) Empty rectangle 内部に N 個の点を含む領域長方形 (bounding

More information

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1 4. ソート ( 教科書 p.205-p.273) 整列すなわちソートは アプリケーションを作成する際には良く使われる基本的な操作であり 今までに数多くのソートのアルゴリズムが考えられてきた 今回はこれらソートのアルゴリズムについて学習していく ソートとはソートとは与えられたデータの集合をキーとなる項目の値の大小関係に基づき 一定の順序で並べ替える操作である ソートには図 1 に示すように キーの値の小さいデータを先頭に並べる

More information

Microsoft PowerPoint - 05.pptx

Microsoft PowerPoint - 05.pptx アルゴリズムとデータ構造第 5 回 : データ構造 (1) 探索問題に対応するデータ構造 担当 : 上原隆平 (uehara) 2015/04/17 アルゴリズムとデータ構造 アルゴリズム : 問題を解く手順を記述 データ構造 : データや計算の途中結果を蓄える形式 計算の効率に大きく影響を与える 例 : 配列 連結リスト スタック キュー 優先順位付きキュー 木構造 今回と次回で探索問題を例に説明

More information

Microsoft PowerPoint - DA2_2017.pptx

Microsoft PowerPoint - DA2_2017.pptx 1// 小テスト内容 データ構造とアルゴリズム IⅠ 第 回単一始点最短路 (I) 1 1 第 章の構成. 単一始点最短路問題 単一始点最短路問題とは 単一始点最短路問題の考え方 単一始点最短路問題を解くつのアルゴリズム ベルマン フォードのアルゴリズム トポロジカル ソートによる解法 ダイクストラのアルゴリズム 1 1 単一始点最短路問題とは 単一始点最短路問題とは 前提 : 重み付き有向グラフ

More information

PowerPoint Presentation

PowerPoint Presentation 算法数理工学 第 2 回 定兼邦彦 クイックソート n 個の数に対して最悪実行時間 (n 2 ) のソーティングアルゴリズム 平均実行時間は (n log n) 記法に隠された定数も小さい in-place ( 一時的な配列が必要ない ) 2 クイックソートの記述 分割統治法に基づく 部分配列 A[p..r] のソーティング. 部分問題への分割 : 配列 A[p..r] を 2 つの部分配列 A[p..q]

More information

20~22.prt

20~22.prt [ 三クリア W] 辺が等しいことの証明 ( 円周角と弦の関係利用 ) の の二等分線がこの三角形の外接円と交わる点をそれぞれ とするとき 60 ならば であることを証明せよ 60 + + 0 + 0 80-60 60 から ゆえに 等しい長さの弧に対する弦の長さは等しいから [ 三クリア ] 方べきの定理 接線と弦のなす角と円周角を利用 線分 を直径とする円 があり 右の図のように の延長上の点

More information

計算幾何学入門 Introduction to Computational Geometry

計算幾何学入門 Introduction to  Computational Geometry テーマ 6: ボロノイ図とデローネイ 三角形分割 ボロノイ図, デローネイ三角形分割 ボロノイ図とは 平面上に多数の点が与えられたとき, 平面をどの点に最も近いかという関係で分割したものをボロノイ図 (Voronoi diagram) という. 2 点だけの場合 2 点の垂直 2 等分線による分割 3 点の場合 3 点で決まる三角形の外接円の中心から各辺に引いた垂直線による分割線 2 点からの等距離線

More information

Microsoft PowerPoint - DA2_2018.pptx

Microsoft PowerPoint - DA2_2018.pptx 1//1 データ構造とアルゴリズム IⅠ 第 回単一始点最短路 (I). 単一始点最短路問題 第 章の構成 単一始点最短路問題とは 単一始点最短路問題の考え方 単一始点最短路問題を解くつのアルゴリズム ベルマン フォードのアルゴリズム トポロジカル ソートによる解法 ダイクストラのアルゴリズム 単一始点最短路問題とは 単一始点最短路問題とは 前提 : 重み付き有向グラフ 特定の開始頂点 から任意の頂点

More information

Taro-再帰関数Ⅲ(公開版).jtd

Taro-再帰関数Ⅲ(公開版).jtd 0. 目次 1 1. ソート 1 1. 1 挿入ソート 1 1. 2 クイックソート 1 1. 3 マージソート - 1 - 1 1. ソート 1 1. 1 挿入ソート 挿入ソートを再帰関数 isort を用いて書く 整列しているデータ (a[1] から a[n-1] まで ) に a[n] を挿入する操作を繰り返す 再帰的定義 isort(a[1],,a[n]) = insert(isort(a[1],,a[n-1]),a[n])

More information

Microsoft PowerPoint - ppt-1.pptx

Microsoft PowerPoint - ppt-1.pptx 計算幾何学特論 Computational Geometr 東京サテライト平成 6 年度講義担当 : 上原隆平 テーマ : 計算幾何学 歴史的背景から応用分野まで 歴史的背景, 応用分野, 計算幾何の基礎 計算幾何学とは 計算幾何学とは幾何学に計算の複雑さの理論を導入して, 幾何的な計算問題に対する効率の良いアルゴリズムを開発したり, あるいは問題の本質的な計算複雑さを解析する計算機科学の一研究分野である.

More information

Microsoft PowerPoint - 10.pptx

Microsoft PowerPoint - 10.pptx m u. 固有値とその応用 8/7/( 水 ). 固有値とその応用 固有値と固有ベクトル 行列による写像から固有ベクトルへ m m 行列 によって線形写像 f : R R が表せることを見てきた ここでは 次元平面の行列による写像を調べる とし 写像 f : を考える R R まず 単位ベクトルの像 u y y f : R R u u, u この事から 線形写像の性質を用いると 次の格子上の点全ての写像先が求まる

More information

データ構造

データ構造 アルゴリズム及び実習 3 馬青 1 バブルソート 考え方 : 隣接する二つのデータを比較し データの大小関係が逆のとき 二つのデータの入れ替えを行って整列を行う方法である 2 バブルソートの手順 配列 a[0],a[1],,a[n-1] をソートする場合 ステップ 1: 配列 a[0] と a[1],a[1] と a[2],,a[n-2] と a[n-1] と となり同士を比較 ( 大小が逆であれば

More information

論理と計算(2)

論理と計算(2) 情報科学概論 Ⅰ アルゴリズムと計算量 亀山幸義 http://logic.cs.tsukuba.ac.jp/~kam 亀山担当分の話題 アルゴリズムと計算量 Fibonacci 数列の計算を例にとり アルゴリズムと計算量とは何か 具体的に学ぶ 良いアルゴリズムの設計例として 整列 ( ソーティング ) のアルゴリズムを学ぶ 2 Fibonacci 数 () Fibonacci 数 (2) = if

More information

Microsoft PowerPoint - DA2_2017.pptx

Microsoft PowerPoint - DA2_2017.pptx // データ構造とアルゴリズム IⅠ 第 回単一始点最短路 (II)/ 全点対最短路 トポロジカル ソート順による緩和 トポロジカル ソート順に緩和 閉路のない有向グラフ限定 閉路がないならトポロジカル ソート順に緩和するのがベルマン フォードより速い Θ(V + E) 方針 グラフをトポロジカル ソートして頂点に線形順序を与える ソート順に頂点を選び, その頂点の出辺を緩和する 各頂点は一回だけ選択される

More information

論理と計算(2)

論理と計算(2) 情報科学概論 Ⅰ アルゴリズムと計算 亀山幸義 http://logic.cs.tsukuba.ac.jp/~kam 計算とは? コンピュータが計算できることは? 1 2 関数 = 計算? NO 部分関数と計算 入力 1 入力 2 関数 出力 入力 1 入力 2 部分関数 出力 停止しない 入力 1 入力 2 コンピュータ 止まらないことがある出力 3 入力 1 入力 2 コンピュータ 出力 停止しない

More information

Microsoft PowerPoint - Chapter7.pptx

Microsoft PowerPoint - Chapter7.pptx Computationa Geometry 内容 定義 多角形の三角形分割 問題の提起 美術品監視 美術館問題 三角形分割のプロセス Poygon rianguation 単純多角形 (simpe poygon) 単調多角形 (monotone poygon) 三角形 (triange) 多角形の三角形分割 Pをn 頂点の単純な多角形とする Pの三角形分割 交差しない対角線の極大集合によって 多角形を三角形に

More information

INTRODUCTION TO ALGORITHMS

INTRODUCTION TO ALGORITHMS 20.7.7 関根渓 ( 情報知識ネットワーク研究室 B4) INTRODUCTION TO LGORITHMS 6. Heapsort CONTENTS 6. ヒープ (Heap) 6.2 ヒープ条件の維持 (Maintaining the heap property) 6.3 ヒープの構成 (Building a heap) 6.4 ヒープソート (The heapsort algorithm)

More information

Microsoft PowerPoint - 06graph3.ppt [互換モード]

Microsoft PowerPoint - 06graph3.ppt [互換モード] I118 グラフとオートマトン理論 Graphs and Automata 担当 : 上原隆平 (Ryuhei UEHARA) uehara@jaist.ac.jp http://www.jaist.ac.jp/~uehara/ 1/20 6.14 グラフにおける探索木 (Search Tree in a Graph) グラフG=(V,E) における探索アルゴリズム : 1. Q:={v { 0 }

More information

始めに, 最下位共通先祖を求めるための関数 LcaDFS( int v ) の処理を記述する. この関数は値を返さない再帰的な void 関数で, 点 v を根とする木 T の部分木を深さ優先探索する. 整数の引数 v は, 木 T の点を示す点番号で, 配列 NodeSpace[ ] へのカーソル

始めに, 最下位共通先祖を求めるための関数 LcaDFS( int v ) の処理を記述する. この関数は値を返さない再帰的な void 関数で, 点 v を根とする木 T の部分木を深さ優先探索する. 整数の引数 v は, 木 T の点を示す点番号で, 配列 NodeSpace[ ] へのカーソル 概略設計書 作成者築山修治作成日 2012 年 10 月 1 日 概要 ( どのような入力に対して, どのような出力をするかの概要説明 ) * 木 T および質問点対の集合 P が与えられたとき, 各質問点対 p = (v,w) P の最下位共通先祖 ( すなわち木 T において点 v と w の共通の先祖 a で,a の真の子孫には v と w の共通の先祖が無いような点 ) を見出す関数である.

More information

" 01 JJM 予選 4 番 # 四角形 の辺 上に点 があり, 直線 と は平行である.=,=, =5,=,= のとき, を求めよ. ただし,XY で線分 XY の長さを表すものとする. 辺 と辺 の延長線の交点を, 辺 と辺 の延長線の交点を G とする. 5 四角形 は直線 に関して線対称な

 01 JJM 予選 4 番 # 四角形 の辺 上に点 があり, 直線 と は平行である.=,=, =5,=,= のとき, を求めよ. ただし,XY で線分 XY の長さを表すものとする. 辺 と辺 の延長線の交点を, 辺 と辺 の延長線の交点を G とする. 5 四角形 は直線 に関して線対称な 1 " 数学発想ゼミナール # ( 改題 ) 直径を とする半円周上に一定の長さの弦がある. この弦の中点と, 弦の両端の各点から直径 への垂線の足は三角形をつくる. この三角形は二等辺三角形であり, かつその三角形は弦の位置にかかわらず相似であることを示せ. ( 証明 ) 弦の両端を X,Y とし,M を線分 XY の中点,, をそれぞれ X,Y から直径 への垂線の足とする. また,M の直径

More information

PowerPoint Presentation

PowerPoint Presentation 最適化手法 第 回 工学部計数工学科 定兼邦彦 http://researchmap.jp/sada/resources/ 前回の補足 グラフのある点の隣接点をリストで表現すると説明したが, 単に隣接点の集合を持っていると思ってよい. 互いに素な集合のデータ構造でも, 単なる集合と思ってよい. 8 3 4 3 3 4 3 4 E v 重み 3 8 3 4 4 3 {{,},{3,8}} {{3,},{4,}}

More information

Math-quarium 練習問題 + 図形の性質 線分 は の二等分線であるから :=:=:=: よって = = = 線分 は の外角の二等分線であるから :=:=:=: よって :=: したがって == 以上から =+=+= 右の図において, 点 は の外心である α,βを求めよ α β 70

Math-quarium 練習問題 + 図形の性質 線分 は の二等分線であるから :=:=:=: よって = = = 線分 は の外角の二等分線であるから :=:=:=: よって :=: したがって == 以上から =+=+= 右の図において, 点 は の外心である α,βを求めよ α β 70 Math-quarium 練習問題 + 図形の性質 図形の性質 線分 に対して, 次の点を図示せよ () : に内分する点 () : に外分する点 Q () 7: に外分する点 R () 中点 M () M () Q () () R 右の図において, 線分の長さ を求めよ ただし,R//Q,R//,Q=,=6 とする Q R 6 Q から,:=:6=: より :=: これから,R:=: より :6=:

More information

Microsoft PowerPoint - algo ppt [互換モード]

Microsoft PowerPoint - algo ppt [互換モード] ( 復習 ) アルゴリズムとは アルゴリズム概論 - 探索 () - アルゴリズム 問題を解くための曖昧さのない手順 与えられた問題を解くための機械的操作からなる有限の手続き 機械的操作 : 単純な演算, 代入, 比較など 安本慶一 yasumoto[at]is.naist.jp プログラムとの違い プログラムはアルゴリズムをプログラミング言語で表現したもの アルゴリズムは自然言語でも, プログラミング言語でも表現できる

More information

2011年度 大阪大・理系数学

2011年度 大阪大・理系数学 0 大阪大学 ( 理系 ) 前期日程問題 解答解説のページへ a a を自然数とする O を原点とする座標平面上で行列 A= a の表す 次変換 を f とする cosθ siθ () >0 および0θ

More information

PowerPoint Presentation

PowerPoint Presentation 今週のトピックス アルゴリズムとデータ構造 第 10 回講義 : 探索その 1 探索 (search) 逐次探索 (sequential search) 2 分探索 (binary search) 内挿探索 (interpolation search) Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 1 Produced

More information

1 対 1 対応の演習例題を解いてみた 微分法とその応用 例題 1 極限 微分係数の定義 (2) 関数 f ( x) は任意の実数 x について微分可能なのは明らか f ( 1, f ( 1) ) と ( 1 + h, f ( 1 + h)

1 対 1 対応の演習例題を解いてみた   微分法とその応用 例題 1 極限 微分係数の定義 (2) 関数 f ( x) は任意の実数 x について微分可能なのは明らか f ( 1, f ( 1) ) と ( 1 + h, f ( 1 + h) 微分法とその応用 例題 1 極限 微分係数の定義 () 関数 ( x) は任意の実数 x について微分可能なのは明らか ( 1, ( 1) ) と ( 1 + h, ( 1 + h) ) の傾き= ( 1 + h ) - ( 1 ) ( 1 + ) - ( 1) = ( 1 + h) - 1 h ( 1) = lim h ( 1 + h) - ( 1) h ( 1, ( 1) ) と ( 1 - h,

More information

情報処理Ⅰ

情報処理Ⅰ Java フローチャート -1- フローチャート ( 流れ図 ) プログラムの処理手順 ( アルゴリズム ) を図示したもの 記号の種類は下記のとおり 端子記号 ( 開始 終了 ) 処理記号計算, 代入等 条件の判定 条件 No ループ処理 LOOP start Yes データの入力 出力 print など 定義済み処理処理名 end サンプルグログラム ( 大文字 小文字変換 ) 大文字を入力して下さい

More information

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること C プログラミング演習 1( 再 ) 4 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順

More information

Microsoft PowerPoint - ce07-09b.ppt

Microsoft PowerPoint - ce07-09b.ppt 6. フィードバック系の内部安定性キーワード : 内部安定性, 特性多項式 6. ナイキストの安定判別法キーワード : ナイキストの安定判別法 復習 G u u u 制御対象コントローラ u T 閉ループ伝達関数フィードバック制御系 T 相補感度関数 S S T L 開ループ伝達関数 L いま考えているのは どの伝達関数,, T, L? フィードバック系の内部安定性 u 内部安定性 T G だけでは不十分

More information

Microsoft PowerPoint - 13approx.pptx

Microsoft PowerPoint - 13approx.pptx I482F 実践的アルゴリズム特論 13,14 回目 : 近似アルゴリズム 上原隆平 (uehara@jaist.ac.jp) ソートの下界の話 比較に基づく任意のソートアルゴリズムはΩ(n log n) 時間の計算時間が必要である 証明 ( 概略 ) k 回の比較で区別できる場合の数は高々 2 k 種類しかない n 個の要素の異なる並べ方は n! 通りある したがって少なくとも k n 2 n!

More information

Microsoft Word - thesis.doc

Microsoft Word - thesis.doc 剛体の基礎理論 -. 剛体の基礎理論初めに本論文で大域的に使用する記号を定義する. 使用する記号トルク撃力力角運動量角速度姿勢対角化された慣性テンソル慣性テンソル運動量速度位置質量時間 J W f F P p .. 質点の並進運動 質点は位置 と速度 P を用いる. ニュートンの運動方程式 という状態を持つ. 但し ここでは速度ではなく運動量 F P F.... より質点の運動は既に明らかであり 質点の状態ベクトル

More information

PowerPoint Presentation

PowerPoint Presentation 算法数理工学 第 回 定兼邦彦 クイックソートの 確率的アルゴリズム クイックソートの平均的な場合の実行時間を解析する場合, 入力の頻度を仮定する必要がある. 通常は, すべての順列が等確率で現れると仮定 しかし実際にはこの仮定は必ずしも期待できない この仮定が成り立たなくてもうまく動作するクイックソートの確率的アルゴリズムを示す 確率的 radomized) アルゴリズム 動作が入力だけでなく乱数発生器

More information

. 角の二等分線と調和平均 平面上に点 を端点とする線分 と を重ならないようにとる, とし とする の二等分線が線分 と交わる点を とし 点 から に垂直に引いた直線が線分 と交わる点 とする 線分 の長さを求めてみよう 点 から に垂直な直線と および との交点をそれぞれ, Dとする つの直角三

. 角の二等分線と調和平均 平面上に点 を端点とする線分 と を重ならないようにとる, とし とする の二等分線が線分 と交わる点を とし 点 から に垂直に引いた直線が線分 と交わる点 とする 線分 の長さを求めてみよう 点 から に垂直な直線と および との交点をそれぞれ, Dとする つの直角三 角の二等分線で開くいろいろな平均 札幌旭丘高校中村文則 0. 数直線上に現れるいろいろな平均下図は 数 (, ) の調和平均 相乗平均 相加平均 二乗平均を数直線上に置いたものである, とし 直径 中心 である円を用いていろいろな平均の大小関係を表現するもっとも美しい配置方法であり その証明も容易である Q D E F < 相加平均 > (0), ( ), ( とすると 線分 ) の中点 の座標はである

More information

Microsoft PowerPoint - DA2_2019.pptx

Microsoft PowerPoint - DA2_2019.pptx Johnon のアルゴリズム データ構造とアルゴリズム IⅠ 第 回最大フロー 疎なグラフ, 例えば E O( V lg V ) が仮定できる場合に向いている 隣接リスト表現を仮定する. 実行時間は O( V lg V + V E ). 上記の仮定の下で,Floyd-Warhall アルゴリズムよりも漸近的に高速 Johnon のアルゴリズム : アイデア (I) 辺重みが全部非負なら,Dikra

More information

Microsoft PowerPoint - ad11-09.pptx

Microsoft PowerPoint - ad11-09.pptx 無向グラフと有向グラフ 無向グラフ G=(V, E) 頂点集合 V 頂点の対を表す枝の集合 E e=(u,v) 頂点 u, v は枝 e の端点 f c 0 a 1 e b d 有向グラフ G=(V, E) 頂点集合 V 頂点の順序対を表す枝の集合 E e=(u,v) 頂点 uは枝 eの始点頂点 vは枝 eの終点 f c 0 a 1 e b d グラフのデータ構造 グラフ G=(V, E) を表現するデータ構造

More information

簡単な検索と整列(ソート)

簡単な検索と整列(ソート) フローチャート (2) アルゴリズム論第 2 回講義 2011 年 10 月 7 日 ( 金 ) 反復構造 ( 一定回数のループ処理 ) START 100 回同じ処理を繰り返す お風呂で子供が指をおって数を数える感じ 繰り返し数を記憶する変数をカウンター ( 変数名 I をよく使う ) と呼ぶ カウンターを初期化して, 100 回繰り返したかどうか判定してそうならば終了そうでなければ処理を実行して

More information

<8D828D5A838A817C A77425F91E6318FCD2E6D6364>

<8D828D5A838A817C A77425F91E6318FCD2E6D6364> 4 1 平面上のベクトル 1 ベクトルとその演算 例題 1 ベクトルの相等 次の問いに答えよ. ⑴ 右の図 1 は平行四辺形 である., と等しいベクトルをいえ. ⑵ 右の図 2 の中で互いに等しいベクトルをいえ. ただし, すべてのマス目は正方形である. 解 ⑴,= より, =,= より, = ⑵ 大きさと向きの等しいものを調べる. a =d, c = f d e f 1 右の図の長方形 において,

More information

Microsoft PowerPoint - 03dandc.pptx

Microsoft PowerPoint - 03dandc.pptx アルゴリズム論 Theory of Algorithms 第 3 回講義分割統治法と漸化式 1/46 アルゴリズム論 Theory of Algorithms Lecture #3 Divide and Conquer and Recurrence Equation 2/46 分割統治法問題を幾つかの部分問題に分解して, それぞれの部分問題を再帰的に解いた後, 部分問題の解を利用して元の問題を解く.

More information

Microsoft PowerPoint - mp13-07.pptx

Microsoft PowerPoint - mp13-07.pptx 数理計画法 ( 数理最適化 ) 第 7 回 ネットワーク最適化 最大流問題と増加路アルゴリズム 担当 : 塩浦昭義 ( 情報科学研究科准教授 ) hiour@di.i.ohoku.c.jp ネットワーク最適化問題 ( 無向, 有向 ) グラフ 頂点 (verex, 接点, 点 ) が枝 (edge, 辺, 線 ) で結ばれたもの ネットワーク 頂点や枝に数値データ ( 距離, コストなど ) が付加されたもの

More information

相加平均 相乗平均 調和平均が表す比 台形 の上底 下底 の長さをそれぞれ, とするとき 各平均により 台形の高さ はどのように比に分けられるだろうか 相乗平均は 相似な つの台形になるから台形の高さ を : の 比に分ける また 相加平均は は : の比に分けます 調和平均は 対角線 と の交点を

相加平均 相乗平均 調和平均が表す比 台形 の上底 下底 の長さをそれぞれ, とするとき 各平均により 台形の高さ はどのように比に分けられるだろうか 相乗平均は 相似な つの台形になるから台形の高さ を : の 比に分ける また 相加平均は は : の比に分けます 調和平均は 対角線 と の交点を 台形に潜むいろいろな平均 札幌旭丘高校中村文則 台形に調和平均 相加平均をみる 右図の台形 において = = とする の長さを, を用いて表してみよう = x = y = c とすると であることから : = : より c y = x + y であることから : = : より c x = x + y を辺々加えると x + y c + = より + = x + y c となる ここで = = c =

More information

Microsoft PowerPoint - ca ppt [互換モード]

Microsoft PowerPoint - ca ppt [互換モード] 大阪電気通信大学情報通信工学部光システム工学科 2 年次配当科目 コンピュータアルゴリズム 良いアルゴリズムとは 第 2 講 : 平成 20 年 10 月 10 日 ( 金 ) 4 限 E252 教室 中村嘉隆 ( なかむらよしたか ) 奈良先端科学技術大学院大学助教 y-nakamr@is.naist.jp http://narayama.naist.jp/~y-nakamr/ 第 1 講の復習

More information

2018年度 筑波大・理系数学

2018年度 筑波大・理系数学 筑波大学 ( 理系 ) 前期日程問題 解答解説のページへ < < とする 放物線 上に 点 (, ), A (ta, ta ), B( - ta, ta ) をとる 三角形 AB の内心の 座標を p とし, 外心の 座標を q とする また, 正の実数 a に対して, 直線 a と放物線 で囲まれた図形の面積を S( a) で表す () p, q を cos を用いて表せ S( p) () S(

More information

Microsoft PowerPoint - kougi10.ppt

Microsoft PowerPoint - kougi10.ppt C プログラミング演習 第 10 回二分探索木 1 例題 1. リストの併合 2 つのリストを併合するプログラムを動かしてみる head1 tail1 head2 tail2 NULL NULL head1 tail1 tail1 があると, リストの併合に便利 NULL 2 #include "stdafx.h" #include struct data_list { int data;

More information

Microsoft PowerPoint - mp11-02.pptx

Microsoft PowerPoint - mp11-02.pptx 数理計画法第 2 回 塩浦昭義情報科学研究科准教授 shioura@dais.is.tohoku.ac.jp http://www.dais.is.tohoku.ac.jp/~shioura/teaching 前回の復習 数理計画とは? 数理計画 ( 復習 ) 数理計画問題とは? 狭義には : 数理 ( 数学 ) を使って計画を立てるための問題 広義には : 与えられた評価尺度に関して最も良い解を求める問題

More information

040402.ユニットテスト

040402.ユニットテスト 2. ユニットテスト ユニットテスト ( 単体テスト ) ユニットテストとはユニットテストはプログラムの最小単位であるモジュールの品質をテストすることであり その目的は結合テスト前にモジュール内のエラーを発見することである テストは機能テストと構造テストの2つの観点から行う モジュールはプログラムを構成する要素であるから 単体では動作しない ドライバとスタブというテスト支援ツールを使用してテストを行う

More information

PowerPoint Presentation

PowerPoint Presentation 付録 2 2 次元アフィン変換 直交変換 たたみ込み 1.2 次元のアフィン変換 座標 (x,y ) を (x,y) に移すことを 2 次元での変換. 特に, 変換が と書けるとき, アフィン変換, アフィン変換は, その 1 次の項による変換 と 0 次の項による変換 アフィン変換 0 次の項は平行移動 1 次の項は座標 (x, y ) をベクトルと考えて とすれば このようなもの 2 次元ベクトルの線形写像

More information

二等辺三角形の性質 (2) 次の図の の大きさを求めなさい () = P=Q P=R Q 68 R P (2) (3) 五角形 は正五角形 = F 50 F (4) = = (5) === = 80 2 二等辺三角形の頂角の外角を 底角を y で表すとき y を の式で表しなさい y 2-5-2

二等辺三角形の性質 (2) 次の図の の大きさを求めなさい () = P=Q P=R Q 68 R P (2) (3) 五角形 は正五角形 = F 50 F (4) = = (5) === = 80 2 二等辺三角形の頂角の外角を 底角を y で表すとき y を の式で表しなさい y 2-5-2 三角形 四角形 二等辺三角形の性質 () 二等辺三角形と正三角形 二等辺三角形 2つの辺が等しい三角形( 定義 ) 二等辺三角形の性質定理 二等辺三角形の底角は等しい 定理 2 二等辺三角形の頂点の二等分線は 底辺を直角に2 等分する 正三角形 3 辺が等しい三角形 ( 定義 ) 次の図で 同じ印をつけた辺や角が等しいとき の大きさを求めなさい () (2) (3) 65 40 25 (4) (5)

More information

2015-2017年度 2次数学セレクション(複素数)解答解説

2015-2017年度 2次数学セレクション(複素数)解答解説 05 次数学セレクション解答解説 [ 筑波大 ] ( + より, 0 となり, + から, ( (,, よって, の描く図形 C は, 点 を中心とし半径が の円である すなわち, 原 点を通る円となる ( は虚数, は正の実数より, である さて, w ( ( とおくと, ( ( ( w ( ( ( ここで, w は純虚数より, は純虚数となる すると, の描く図形 L は, 点 を通り, 点 と点

More information

2016年度 広島大・文系数学

2016年度 広島大・文系数学 06 広島大学 ( 文系 ) 前期日程問題 解答解説のページへ a を正の定数とし, 座標平面上において, 円 C : x + y, 放物線 C : y ax + C 上の点 P (, ) を考える - におけるC の接線 l は点 Q( s, t) でC に接してい る 次の問いに答えよ () s, t および a を求めよ () C, l および y 軸で囲まれた部分の面積を求めよ () 円 C

More information

コンピュータグラフィックス第8回

コンピュータグラフィックス第8回 コンピュータグラフィックス 第 8 回 レンダリング技法 1 ~ 基礎と概要, 隠面消去 ~ 理工学部 兼任講師藤堂英樹 レポート提出状況 課題 1 の選択が多い (STAND BY ME ドラえもん ) 体験演習型 ( 課題 3, 課題 4) の選択も多い 内訳 課題 1 課題 2 課題 3 課題 4 課題 5 2014/11/24 コンピュータグラフィックス 2 次回レポートの体験演習型 メタセコイア,

More information

プログラム言語及び演習Ⅲ

プログラム言語及び演習Ⅲ 平成 28 年度後期データ構造とアルゴリズム期末テスト 各問題中のアルゴリズムを表すプログラムは, 変数の宣言が省略されているなど, 完全なものではありませんが, 適宜, 常識的な解釈をしてください. 疑問があれば, 挙手をして質問してください. 時間計算量をオーダ記法で表せという問題では, 入力サイズ n を無限大に近づけた場合の漸近的な時間計算量を表せということだと考えてください. 問題 1 入力サイズが

More information

木村の理論化学小ネタ 体心立方構造 面心立方構造 六方最密構造 剛球の並べ方と最密構造剛球を平面上に の向きに整列させるのに次の 2 つの方法がある 図より,B の方が A より密であることがわかる A B 1

木村の理論化学小ネタ   体心立方構造 面心立方構造 六方最密構造 剛球の並べ方と最密構造剛球を平面上に の向きに整列させるのに次の 2 つの方法がある 図より,B の方が A より密であることがわかる A B 1 体心立方構造 面心立方構造 六方最密構造 剛球の並べ方と最密構造剛球を平面上に の向きに整列させるのに次の 2 つの方法がある 図より,B の方が A より密であることがわかる A B 1 体心立方構造 A を土台に剛球を積み重ねる 1 段目 2 2 段目 3 3 段目 他と色で区別した部分は上から見た最小繰り返し単位構造 ( 体心立方構造 ) 4 つまり,1 段目,2 段目,3 段目と順に重ねることにより,

More information

vecrot

vecrot 1. ベクトル ベクトル : 方向を持つ量 ベクトルには 1 方向 2 大きさ ( 長さ ) という 2 つの属性がある ベクトルの例 : 物体の移動速度 移動量電場 磁場の強さ風速力トルクなど 2. ベクトルの表現 2.1 矢印で表現される 矢印の長さ : ベクトルの大きさ 矢印の向き : ベクトルの方向 2.2 2 個の点を用いて表現する 始点 () と終点 () を結ぶ半直線の向き : ベクトルの方向

More information

2018年度 東京大・理系数学

2018年度 東京大・理系数学 08 東京大学 ( 理系 ) 前期日程問題 解答解説のページへ関数 f ( ) = + cos (0 < < ) の増減表をつくり, + 0, 0 のと sin きの極限を調べよ 08 東京大学 ( 理系 ) 前期日程問題 解答解説のページへ n+ 数列 a, a, を, Cn a n = ( n =,, ) で定める n! an qn () n とする を既約分数 an p として表したときの分母

More information

PowerPoint Template

PowerPoint Template プログラミング演習 Ⅲ Linked List P. Ravindra S. De Silva e-mail: ravi@cs.tut.ac.jp, Room F-413 URL: www.icd.cs.tut.ac.jp/~ravi/prog3/index_j.html 連結リストとは? 一つひとつの要素がその前後の要素との参照関係をもつデータ構造 A B C D 連結リストを使用する利点 - 通常の配列はサイズが固定されている

More information

離散数学

離散数学 離散数学 最短経路問題 落合秀也 その前に 前回の話 深さ優先探索アルゴリズム 開始点 から深さ優先探索を行うアルゴリズム S.pu() Wl S not mpty v := S.pop() I F[v] = l Tn, F[v] := tru For no u n A[v] S.pu(u) EnFor EnI EnWl (*) 厳密には初期化処理が必要だが省略している k 時間計算量 :O(n+m)

More information

学習指導要領

学習指導要領 (1) 数と式 ア数と集合 ( ア ) 実数数を実数まで拡張する意義を理解し 簡単な無理数の四則計算をすること 絶対値の意味を理解し適切な処理することができる 例題 1-3 の絶対値をはずせ 展開公式 ( a + b ) ( a - b ) = a 2 - b 2 を利用して根号を含む分数の分母を有理化することができる 例題 5 5 + 2 の分母を有理化せよ 実数の整数部分と小数部分の表し方を理解している

More information

ピタゴラスの定理の証明4

ピタゴラスの定理の証明4 [ 証明 ] この証明を論理的に厳密に行うには 何回か三角形 四角形の合同を証明しなくてはなりません 以下では 直感的な分かりやすさを重視して この証明を行いません 三角形 において であるとする 辺 を一辺とする正方形 を三角形 の外側につくる 辺 を一辺とする正方形 を三角形 の外側につくる 辺 を一辺とする正方形 Fを三角形 の外側につくる 直線 と直線 との交点を J とし 直線 と直線 F

More information

2018年度 神戸大・理系数学

2018年度 神戸大・理系数学 8 神戸大学 ( 理系 ) 前期日程問題 解答解説のページへ t を < t < を満たす実数とする OABC を 辺の長さが の正四面体とする 辺 OA を -t : tに内分する点を P, 辺 OB を t :-tに内分する点を Q, 辺 BC の中点を R とする また a = OA, b = OB, c = OC とする 以下の問いに答えよ () QP と QR をt, a, b, c を用いて表せ

More information

2013年度 九州大・理系数学

2013年度 九州大・理系数学 九州大学 ( 理系 ) 前期日程問題 解答解説のページへ a> とし, つの曲線 y= ( ), y= a ( > ) を順にC, C とする また, C とC の交点 P におけるC の接線をl とする 以下 の問いに答えよ () 曲線 C とy 軸および直線 l で囲まれた部分の面積をa を用いて表せ () 点 P におけるC の接線と直線 l のなす角を ( a) とき, limasin θ(

More information

Microsoft PowerPoint - 9.pptx

Microsoft PowerPoint - 9.pptx 9/7/8( 水 9. 線形写像 ここでは 行列の積によって 写像を定義できることをみていく また 行列の積によって定義される写像の性質を調べていく 拡大とスカラー倍 行列演算と写像 ( 次変換 拡大後 k 倍 k 倍 k 倍拡大の関係は スカラー倍を用いて次のように表現できる p = (, ' = k ' 拡大前 p ' = ( ', ' = ( k, k 拡大 4 拡大と行列の積 拡大後 k 倍

More information

Microsoft Word - 1B2011.doc

Microsoft Word - 1B2011.doc 第 14 回モールの定理 ( 単純梁の場合 ) ( モールの定理とは何か?p.11) 例題 下記に示す単純梁の C 点のたわみ角 θ C と, たわみ δ C を求めよ ただし, 部材の曲げ 剛性は材軸に沿って一様で とする C D kn B 1.5m 0.5m 1.0m 解答 1 曲げモーメント図を描く,B 点の反力を求める kn kn 4 kn 曲げモーメント図を描く knm 先に得られた曲げモーメントの値を

More information

公式集 数学 Ⅱ B 頭に入っていますか? 8 和積の公式 A + B A B si A + si B si os A + B A B si A si B os si A + B A B os A + os B os os A + B A B os A os B si si 9 三角関数の合成 si

公式集 数学 Ⅱ B 頭に入っていますか? 8 和積の公式 A + B A B si A + si B si os A + B A B si A si B os si A + B A B os A + os B os os A + B A B os A os B si si 9 三角関数の合成 si 公式集 数学 Ⅱ B 頭に入っていますか? < 図形と方程式 > 点間の距離 A x, B x, のとき x x + : に分ける点 A x, B x, のとき 線分 AB を:に分ける点 æ x + x + ö は ç, è + + ø 注 < のとき外分点 直線の方程式 傾き で 点 x, を通る : x 点 x, x, を通る : x 注 分母が のとき は座標軸と平行な直線 x x 4 直線の位置関係

More information

<4D F736F F D208C51985F82CD82B682DF82CC88EA95E A>

<4D F736F F D208C51985F82CD82B682DF82CC88EA95E A> 群論はじめの一歩 (6) 6. 指数 2の定理と2 面体群 命題 H を群 G の部分群とする そして 左剰余類全体 G/ H 右剰 余類全体 \ H G ともに指数 G: H 2 と仮定する このとき H は群 G の正規部分群である すなわち H 注意 ) 集合 A と B があるとき A から B を引いた差集合は A \ B と書かれるが ここで書いた H \ Gは差集合ではなく右剰余類の集合の意味である

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション - = 4 = 4 = - y = x y = x y = x + 4 y = x 比例は y = ax の形であらわすことができる 4 - 秒後 y = 5 y = 0 (m) 5 秒後 y = 5 5 y = 5 (m) 5 0 = 05 (m) 05 5 = 5 (m/ 秒 ) 4 4 秒後 y = 5 4 y = 80 (m) 5-80 5 4 = 45 (m/ 秒 ) 5 v = 0 5

More information

<4D F736F F D E682568FCD CC82B982F192668BAD9378>

<4D F736F F D E682568FCD CC82B982F192668BAD9378> 7. 組み合わせ応力 7.7. 応力の座標変換載荷 ( 要素 の上方右側にずれている位置での載荷を想定 図 ( この場合正 ( この場合負 応力の座標変換の知識は なぜ必要か? 例 土の二つの基本的せん断変形モード : - 三軸圧縮変形 - 単純せん断変形 一面せん断変形両者でのせん断強度の関連を理解するためには 応力の座標変換を理解する必要がある 例 粘着力のない土 ( 代表例 乾燥した砂 のせん断破壊は

More information

Microsoft PowerPoint - IntroAlgDs pptx

Microsoft PowerPoint - IntroAlgDs pptx アルゴリズムとデータ構造入門 -3 04 年 月 4 日 大学院情報学研究科知能情報学専攻 http://wiie.kuis.kyoto-u.ac.jp/~okuo/lecture//itroalgds/ okuo@i.kyoto-u.ac.jp,okuo@ue.org if mod( 学籍番号の下 3 桁,3) 0 if mod( 学籍番号の下 3 桁,3) if mod( 学籍番号の下 3 桁,3).

More information

データ構造

データ構造 アルゴリズム及び実習 7 馬青 1 表探索 定義表探索とは 表の形で格納されているデータの中から条件に合ったデータを取り出してくる操作である 但し 表は配列 ( 連結 ) リストなどで実現できるので 以降 表 の代わりに直接 配列 や リスト などの表現を用いる場合が多い 表探索をただ 探索 と呼ぶ場合が多い 用語レコード : 表の中にある個々のデータをレコード (record) と呼ぶ フィールド

More information

memo

memo 計数工学プログラミング演習 ( 第 4 回 ) 2016/05/10 DEPARTMENT OF MATHEMATICA INFORMATICS 1 内容 リスト 疎行列 2 連結リスト (inked ists) オブジェクトをある線形順序に並べて格納するデータ構造 単方向連結リスト (signly linked list) の要素 x キーフィールド key ポインタフィールド next x->next:

More information

<4D F736F F D EBF97CD8A B7982D189898F4B A95748E9197BF4E6F31312E646F63>

<4D F736F F D EBF97CD8A B7982D189898F4B A95748E9197BF4E6F31312E646F63> 土質力学 Ⅰ 及び演習 (B 班 : 小高担当 ) 配付資料 N.11 (6.1.1) モールの応力円 (1) モールの応力円を使う上での3つの約束 1 垂直応力は圧縮を正とし, 軸の右側を正の方向とする 反時計まわりのモーメントを起こさせるせん断応力 の組を正とする 3 物体内で着目する面が,θ だけ回転すると, モールの応力円上では θ 回転する 1とは物理的な実際の作用面とモールの応力円上との回転の方向を一致させるために都合の良い約束である

More information

メソッドのまとめ

メソッドのまとめ メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか

More information

memo

memo 計数工学プログラミング演習 ( 第 6 回 ) 2016/05/24 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : 再帰呼び出し 2 分探索木 深さ優先探索 課題 : 2 分探索木を用いたソート 2 再帰呼び出し 関数が, 自分自身を呼び出すこと (recursive call, recursion) 再帰を使ってアルゴリズムを設計すると, 簡単になることが多い

More information

代数 幾何 < ベクトル > 1 ベクトルの演算 和 差 実数倍については 文字の計算と同様 2 ベクトルの成分表示 平面ベクトル : a x e y e x, ) ( 1 y1 空間ベクトル : a x e y e z e x, y, ) ( 1 1 z1

代数 幾何 < ベクトル > 1 ベクトルの演算 和 差 実数倍については 文字の計算と同様 2 ベクトルの成分表示 平面ベクトル : a x e y e x, ) ( 1 y1 空間ベクトル : a x e y e z e x, y, ) ( 1 1 z1 代数 幾何 < ベクトル > ベクトルの演算 和 差 実数倍については 文字の計算と同様 ベクトルの成分表示 平面ベクトル :, 空間ベクトル : z,, z 成分での計算ができるようにすること ベクトルの内積 : os 平面ベクトル :,, 空間ベクトル :,,,, z z zz 4 ベクトルの大きさ 平面上 : 空間上 : z は 良く用いられる 5 m: に分ける点 : m m 図形への応用

More information

補足 中学で学習したフレミング左手の法則 ( 電 磁 力 ) と関連付けると覚えやすい 電磁力は電流と磁界の外積で表される 力 F 磁 電磁力 F li 右ねじの回転の向き電 li ( l は導線の長さ ) 補足 有向線分とベクトル有向線分 : 矢印の位

補足 中学で学習したフレミング左手の法則 ( 電 磁 力 ) と関連付けると覚えやすい 電磁力は電流と磁界の外積で表される 力 F 磁 電磁力 F li 右ねじの回転の向き電 li ( l は導線の長さ ) 補足 有向線分とベクトル有向線分 : 矢印の位 http://totemt.sur.ne.p 外積 ( ベクトル積 ) の活用 ( 面積, 法線ベクトル, 平面の方程式 ) 3 次元空間の つのベクトルの積が つのベクトルを与えるようなベクトルの掛け算 ベクトルの積がベクトルを与えることからベクトル積とも呼ばれる これに対し内積は符号と大きさをもつ量 ( スカラー量 ) を与えるので, スカラー積とも呼ばれる 外積を使うと, 平行四辺形や三角形の面積,

More information

2014年度 センター試験・数学ⅡB

2014年度 センター試験・数学ⅡB 第 問 解答解説のページへ [] O を原点とする座標平面において, 点 P(, q) を中心とする円 C が, 方程式 y 4 x で表される直線 l に接しているとする () 円 C の半径 r を求めよう 点 P を通り直線 l に垂直な直線の方程式は, y - ア ( x- ) + qなので, P イ から l に引いた垂線と l の交点 Q の座標は ( ( ウ + エ q ), 4 (

More information

05 年度センター試験数学 ⅡB () において,cos q 0 であるから,P ( cos q, sin q) より, 直線 OP を表す方程式は y sin q sin q x cos q cos q x すなわち, (sin q) x - (cos q) y 0 ( ) ク 点 O,P,Q が

05 年度センター試験数学 ⅡB () において,cos q 0 であるから,P ( cos q, sin q) より, 直線 OP を表す方程式は y sin q sin q x cos q cos q x すなわち, (sin q) x - (cos q) y 0 ( ) ク 点 O,P,Q が 05 年度大学入試センター試験解説 数学 ⅡB 第 問 []() 点間の距離の公式から, OP ( cos q ) + ( sin q ) ( cos q + sin q ) ア PQ { ( cos q + cos 7q ) - cos q } + { ( sin q + sin 7q ) - sin q } cos q + sin q 7 7 イ である また, OQ ( cos q + cos

More information

S02 1 図において = =とする このとき = であることを証明せよ と において = 1 = 2 辺 は共通 より 3 辺 (3 組の辺 ) がそれぞれ等しい よって 合同な三角形の対応する角の大きさは等しい ゆえに = である

S02 1 図において = =とする このとき = であることを証明せよ と において = 1 = 2 辺 は共通 より 3 辺 (3 組の辺 ) がそれぞれ等しい よって 合同な三角形の対応する角の大きさは等しい ゆえに = である S01 1 図において = =とする このとき であることを証明せよ と において = 1 = 2 辺 は共通 3 1 2 3 より 3 辺 (3 組の辺 ) がそれぞれ等しい よって である S02 1 図において = =とする このとき = であることを証明せよ と において = 1 = 2 辺 は共通 3 1 2 3 より 3 辺 (3 組の辺 ) がそれぞれ等しい よって 合同な三角形の対応する角の大きさは等しい

More information

Microsoft PowerPoint - 9.pptx

Microsoft PowerPoint - 9.pptx 9. 線形写像 ここでは 行列の積によって 写像を定義できることをみていく また 行列の積によって定義される写像の性質を調べていく 行列演算と写像 ( 次変換 3 拡大とスカラー倍 p ' = ( ', ' = ( k, kk p = (, k 倍 k 倍 拡大後 k 倍拡大の関係は スカラー倍を用いて次のように表現できる ' = k ' 拡大前 拡大 4 拡大と行列の積 p ' = ( ', '

More information

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n を入力してもらい その後 1 から n までの全ての整数の合計 sum を計算し 最後にその sum

More information

学習指導要領

学習指導要領 (1) 数と式 学習指導要領ア数と集合 ( ア ) 実数数を実数まで拡張する意義を理解し 簡単な無理数の四則計算をすること 千早高校学力スタンダード 自然数 整数 有理数 無理数の用語の意味を理解す る ( 例 ) 次の数の中から自然数 整数 有理 数 無理数に分類せよ 3 3,, 0.7, 3,,-, 4 (1) 自然数 () 整数 (3) 有理数 (4) 無理数 自然数 整数 有理数 無理数の包含関係など

More information

DVIOUT-SS_Ma

DVIOUT-SS_Ma 第 章 微分方程式 ニュートンはリンゴが落ちるのを見て万有引力を発見した という有名な逸話があります 無重力の宇宙船の中ではリンゴは落ちないで静止していることを考えると 重力が働くと始め静止しているものが動き出して そのスピードはどんどん大きくなる つまり速度の変化が現れることがわかります 速度は一般に時間と共に変化します 速度の瞬間的変化の割合を加速度といい で定義しましょう 速度が変化する, つまり加速度がでなくなるためにはその原因があり

More information

Microsoft Word - 断面諸量

Microsoft Word - 断面諸量 応用力学 Ⅱ 講義資料 / 断面諸量 断面諸量 断面 次 次モーメントの定義 図 - に示すような形状を有する横断面を考え その全断面積を とする いま任意に定めた直交座標軸 O-, をとり また図中の斜線部の微小面積要素を d とするとき d, d () で定義される, をそれぞれ与えられた横断面の 軸, 軸に関する断面 次モーメント (geometrcal moment of area) という

More information

Microsoft PowerPoint - 10.pptx

Microsoft PowerPoint - 10.pptx 0. 固有値とその応用 固有値と固有ベクトル 2 行列による写像から固有ベクトルへ m n A : m n n m 行列によって線形写像 f R R A が表せることを見てきた ここでは 2 次元平面の行列による写像を調べる 2 = 2 A 2 2 とし 写像 まず 単位ベクトルの像を求める u 2 x = v 2 y f : R A R を考える u 2 2 u, 2 2 0 = = v 2 0

More information

2-1 / 語問題 項書換え系 4.0. 準備 (3.1. 項 代入 等価性 ) 定義 3.1.1: - シグネチャ (signature): 関数記号の集合 (Σ と書く ) - それぞれの関数記号は アリティ (arity) と呼ばれる自然数が定められている - Σ (n) : アリ

2-1 / 語問題 項書換え系 4.0. 準備 (3.1. 項 代入 等価性 ) 定義 3.1.1: - シグネチャ (signature): 関数記号の集合 (Σ と書く ) - それぞれの関数記号は アリティ (arity) と呼ばれる自然数が定められている - Σ (n) : アリ 2-1 / 32 4. 語問題 項書換え系 4.0. 準備 (3.1. 項 代入 等価性 ) 定義 3.1.1: - シグネチャ (signature): 関数記号の集合 (Σ と書く ) - それぞれの関数記号は アリティ (arity) と呼ばれる自然数が定められている - Σ (n) : アリティ n を持つ関数記号からなる Σ の部分集合 例 : 群 Σ G = {e, i, } (e Σ

More information

様々なミクロ計量モデル†

様々なミクロ計量モデル† 担当 : 長倉大輔 ( ながくらだいすけ ) この資料は私の講義において使用するために作成した資料です WEB ページ上で公開しており 自由に参照して頂いて構いません ただし 内容について 一応検証してありますが もし間違いがあった場合でもそれによって生じるいかなる損害 不利益について責任を負いかねますのでご了承ください 間違いは発見次第 継続的に直していますが まだ存在する可能性があります 1 カウントデータモデル

More information

測量試補 重要事項

測量試補 重要事項 用地測量面積計算 < 試験合格へのポイント > 座標法による面積計算に関する問題は その出題回数からも定番問題と言えるが 計算自体はさほど難しいものではなく 計算表を作成しその中に数値を当てはめていくことで答えを導くことができる 過去問をしっかりとこなし 計算手順を覚えれば点の取りやすい問題と言える 士補試験に出題される問題は過去の例を見ても 座標が簡単な数値に置き換えることができるようになっている

More information

機構学 平面機構の運動学

機構学 平面機構の運動学 問題 1 静止座標系 - 平面上を運動する節 b 上に2 定点,Bを考える. いま,2 点の座標は(0,0),B(50,0) である. 2 点間の距離は 50 mm, 点の速度が a 150 mm/s, 点 Bの速度の向きが150 である. 以下の問いに答えよ. (1) 点 Bの速度を求めよ. (2) 瞬間中心を求めよ. 節 b a (0,0) b 150 B(50,0) 問題 1(1) 解答 b

More information

Microsoft Word - 微分入門.doc

Microsoft Word - 微分入門.doc 基本公式 例題 0 定義式 f( ) 数 Ⅲ 微分入門 = の導関数を定義式にもとづいて計算しなさい 基本事項 ( f( ), g( ) が微分可能ならば ) y= f( ) g( ) のとき, y = y= f( ) g( ) h( ) のとき, y = ( f( ), g( ) が微分可能で, g( ) 0 ならば ) f( ) y = のとき, y = g ( ) とくに, y = のとき,

More information

メソッドのまとめ

メソッドのまとめ 配列 (2) 2 次元配列, String http://jv2005.cis.k.hosei.c.jp/ 授業の前に自己点検 配列変数に格納される配列の ID と配列の実体の区別ができていますか 配列変数の宣言と配列の実体の生成の区別ができていますか メソッドの引数に配列が渡されるとき 実際に渡されるものは何ですか このことの重要な帰結は何ですか 引数の値渡しと参照渡しということばを例を挙げて説明できますか

More information

Taro-再帰関数Ⅱ(公開版).jtd

Taro-再帰関数Ⅱ(公開版).jtd 0. 目次 6. 2 項係数 7. 二分探索 8. 最大値探索 9. 集合 {1,2,,n} 上の部分集合生成 - 1 - 6. 2 項係数 再帰的定義 2 項係数 c(n,r) は つぎのように 定義される c(n,r) = c(n-1,r) + c(n-1,r-1) (n 2,1 r n-1) = 1 (n 0, r=0 ) = 1 (n 1, r=n ) c(n,r) 0 1 2 3 4 5

More information

Microsoft PowerPoint - 4.pptx

Microsoft PowerPoint - 4.pptx while 文 (1) 繰り返しの必要性 while の形式と動作 繰り返しにより平 根を求める ( 演習 ) 繰り返しにより 程式の解を求める ( 課題 ) Hello. をたくさん表示しよう Hello. を画面に 3 回表示するには, 以下で OK. #include int main() { printf("hello. n"); printf("hello. n");

More information

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

0 21 カラー反射率 slope aspect 図 2.9: 復元結果例 2.4 画像生成技術としての計算フォトグラフィ 3 次元情報を復元することにより, 画像生成 ( レンダリング ) に応用することが可能である. 近年, コンピュータにより, カメラで直接得られない画像を生成する技術分野が生

0 21 カラー反射率 slope aspect 図 2.9: 復元結果例 2.4 画像生成技術としての計算フォトグラフィ 3 次元情報を復元することにより, 画像生成 ( レンダリング ) に応用することが可能である. 近年, コンピュータにより, カメラで直接得られない画像を生成する技術分野が生 0 21 カラー反射率 slope aspect 図 2.9: 復元結果例 2.4 画像生成技術としての計算フォトグラフィ 3 次元情報を復元することにより, 画像生成 ( レンダリング ) に応用することが可能である. 近年, コンピュータにより, カメラで直接得られない画像を生成する技術分野が生まれ, コンピューテーショナルフォトグラフィ ( 計算フォトグラフィ ) と呼ばれている.3 次元画像認識技術の計算フォトグラフィへの応用として,

More information

スライド 1

スライド 1 (8) 2017.6.7 電気通信大学大学院情報理工学研究科末廣尚士 9. ロボットアームの逆運動学 ( 幾何 学的 ( 解析的 ) 解法 ) 何をしたいか 手首, 手先, ツールの 3 次元空間での位置や姿勢から, それを実現する関節角度を計算する. アームソリューション, アームの解とも呼ぶ 何のために たとえばビジョンで認識された物をつかむ場合, 物の位置 姿勢は 3 次元空間で表現されることが普通である.

More information

人工知能入門

人工知能入門 藤田悟 黄潤和 探索とは 探索問題 探索解の性質 探索空間の構造 探索木 探索グラフ 探索順序 深さ優先探索 幅優先探索 探索プログラムの作成 バックトラック 深さ優先探索 幅優先探索 n 個の ueen を n n のマスの中に 縦横斜めに重ならないように配置する 簡単化のために 4-ueen を考える 正解 全状態の探索プログラム 全ての最終状態を生成した後に 最終状態が解であるかどうかを判定する

More information

オートマトン 形式言語及び演習 1. 有限オートマトンとは 酒井正彦 形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110,

オートマトン 形式言語及び演習 1. 有限オートマトンとは 酒井正彦   形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110, オートマトン 形式言語及び演習 1 有限オートマトンとは 酒井正彦 wwwtrscssinagoya-uacjp/~sakai/lecture/automata/ 形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110, } 形式言語 : 数学モデルに基づいて定義された言語 認識機械 : 文字列が該当言語に属するか? 文字列 機械 受理

More information

1999年度 センター試験・数学ⅡB

1999年度 センター試験・数学ⅡB 99 センター試験数学 Ⅱ 数学 B 問題 第 問 ( 必答問題 ) [] 関数 y cos3x の周期のうち正で最小のものはアイウ 解答解説のページへ 0 x 360 のとき, 関数 y cos3x において, y となる x はエ個, y となる x はオ 個ある また, y sin x と y cos3x のグラフより, 方程式 sin x cos3x は 0 x 360のときカ個の解をもつことがわかる

More information

2014年度 名古屋大・理系数学

2014年度 名古屋大・理系数学 04 名古屋大学 ( 理系 ) 前期日程問題 解答解説のページへ空間内にある半径 の球 ( 内部を含む ) を B とする 直線 と B が交わっており, その交わりは長さ の線分である () B の中心と との距離を求めよ () のまわりに B を 回転してできる立体の体積を求めよ 04 名古屋大学 ( 理系 ) 前期日程問題 解答解説のページへ 実数 t に対して 点 P( t, t ), Q(

More information

alg2015-6r3.ppt

alg2015-6r3.ppt 1 アルゴリズムとデータ 構造 第 6 回探索のためのデータ構造 (1) 補稿 : 木の巡回 ( なぞり ) 2 木の巡回 ( 第 5 回探索 (1) のスライド ) 木の巡回 * (traverse) とは 木のすべての節点を組織だった方法で訪問すること 深さ優先探索 (depth-first search) による木の巡回 *) 木の なぞり ともいう 2 3 1 3 4 1 4 5 7 10

More information