Microsoft PowerPoint - H20第10回最短経路問題-掲示用.ppt
|
|
|
- せせら たみや
- 7 years ago
- Views:
Transcription
1 プログラミング言語 I 第 10 回 最短経路問題 埼玉大学工学部電気電子システム工学科伊藤和人
2 最短経路問題とは 始点から終点へ行く経路が複数通りある場合に 最も短い経路を見つける問題 経路の短さの決め方によって様々な応用
3 最短経路問題の応用例 カーナビゲーション 現在地から目的地まで最短時間のルート 経路 = 道路 交差点において走る道路を変更してもよい 経路の短さ = 所要時間の短さ 鉄道乗り換え案内 始発駅から目的駅まで料金最低のルート 経路 = 路線 駅において路線を乗り換えてもよい 経路の短さ = 料金の安さ
4 問題の定式化 定式化 : 問題の意味が変化しないことに注意して 明確な形式に問題を整理すること 条件と解の性質を明確にする あいまいな点をなくす さらに 問題を解くプログラムが容易に作成できるような定式化を行うことが重要
5 グラフ プログラミングに適した問題定式化の道具としてよく用いられる 1 個以上の点 ( ノード ) と つの点を結ぶ枝からなる 点 枝 グラフの例
6 グラフ ( その ) 点を共有する枝の集合をパス (path 経路) という パスの始点と終点を定める 一般に始点と終点が同じパスは複数通り存在する (1 通りしか存在しない場合や 1つも存在しない場合あり ) 始点 終点 パス
7 グラフ ( その 3) 枝に重みを与える パスの重みは 枝重みの和とする 枝重み 5 始点 終点 パス : 重み 1 始点 終点が同じ複数通りのパスパスによって重みは異なる
8 最短経路問題の定式化 グラフによって問題を入力 ( 始点 終点 枝重み ) 重み最小のパスを見つける 鉄道乗り換え案内の場合 乗換駅を点 枝重みを料金とすればよい 横浜 60 円 80 円 渋谷新宿 160 円 160 円 品川東京上野 池袋 150 円 150 円 150 円 赤羽 160 円 90 円 150 円 160 円,750 円 大宮
9 最小値原理 始点 s から終点 t への最短経路上の点を v とすると パス p(s,v) とパス p(v,t) はともに最短経路である 始点 s s から v への最短経路 v v から t への最短経路 t 終点 s から t への最短経路 終点以外の最短経路を順次求めて 最終的に終点への最短経路を求める
10 問題の分類 枝重みが0または正の場合 枝重みが0 正 負で負ループがない場合 枝重みが0 正 負で負ループがある場合 ループ : 始点と終点が一致したパス負ループ : 枝重み和が負のループ 枝重みが 0 正 負で負ループがある場合 負ループ : 重み -
11 最短経路アルゴリズム 1 始点 始点 枝重みが 0 または正の場合を考える s s 6 6 d d a a b c b c 始点 s から他の点への最短経路を求める 始点 s から点 b への最短経路が 1 であると決定できるなぜか?
12 最短経路アルゴリズム 1( その ) 枝重みが 0 または正の場合 始点 s 6 6 d a b c 枝重みが 0 または正であるので 点 a, c, d を経由するどのパスも重みが 1 以上となるため aを経由パス重みは 以上 cを経由パス重みは3 以上 dを経由パス重みは6 以上
13 1 最短経路アルゴリズム 1( その 3) 次に経路が最短な点を求める始点 1 s 3 6 a d b c f e s 3 6 a d b c f e s 3 6 a d b c f e s 3 6 a d b c f e
14 最短経路アルゴリズム 1( その 4) アルゴリズムのポイント ダイクストラ法 最短経路長の定まった点から さらに枝 1 本で到達する点のうち 経路長最短の点は 最短経路と決定できる 最短経路長の決まっている点 s さらに枝 1 本で到達する点 経路長が最小 最短経路を決定できる点
15 C 言語によるグラフ表現 1 次元配列を用いる方法 枝が結ぶ 点 (i,j) i j 配列要素 e[i][j] が枝を表す e[i][j]=1: 枝あり e[i][j]=0: 枝なし i j と j i を区別しない場合 e[j][i] = e[i][j] とする
16 C 言語によるグラフ表現 1( 続き ) 枝 (i,j) の重み w[i][j] が記憶 i w[i][j] i j と j i を区別しない場合 w[j][i] = w[i][j] とする j
17 ダイクストラ法の実装 始点 s=0 とする int s, minlen, j, m, u[n], f[n]={0}; for( j=0 ; j<n ; j++ ) u[j] = 9999; s = 0; u[s] = 0; for( m=1 ; m<n ; m++ ){ f[s] = 1; for( j=0 ; j<n ; j++ ){ if( e[s][j]!= 1 ) continue; if( u[s]+w[s][j] < u[j] ) u[j]=u[s]+w[s][j]; } 十分大きな正数 枝 (s,j) が存在しない } minlen = 9999; for( j=0 ; j<n ; j++ ){ if( f[j] == 1 ) continue; if( u[j] < minlen ){ minlen = u[j]; s = j; } } 点 s は経路長が最短 点数 N 点 s は最短経路決定 点 j への経路長を更新 最短経路既定の点は除外
18 長さだけでなく経路を記録 始点 s=0 とする int s, minlen, j, m, u[n], f[n]={0}, prev[n]; for( j=0 ; j<n ; j++ ) u[j] = 9999; s = 0; u[s] = 0; 十分大きな正数 for( m=1 ; m<n ; m++ ){ f[s] = 1; 点 sは最短経路決定 for( j=0 ; j<n ; j++ ){ if( e[s][j]!= 1 ) continue; if( u[s]+w[s][j] < u[j] ){ u[j]=u[s]+w[s][j]; prev[j]=s; } /* jの直前はs */ } minlen = 9999; 点 jへの経路長を更新 for( j=0 ; j<n ; j++ ){ if( f[j] == 1 ) continue; if( u[j] < minlen ){ minlen = u[j]; s = j; } } } 点 sは経路長が最短 点数 N 枝 (s,j) が存在しない 最短経路既定の点は除外
19 ダイクストラ法の計算複雑度 経路長最短の点を 1 つ選び経路を決定 その点から1 本の枝で接続する点について経路長を調べなおす すべての点について経路が決定するまで繰り返す O( N )
20 プログラムの実行時間 秒 ノード数 N とプログラム実行時間の関係 N=8000 約 500M バイト N=7000 約 400M バイト 予想 N 1 つのノード当たり 4 本の枝の場合 PentiumIV.4GHz 51MB メモリ
21 プログラムの問題点 配列による枝表現はメモリを大量に必要とし かつ効率が悪い i j 枝の有無を表す 次元配列 e[i][j] の例 0 がほとんど
22 配列による枝表現の問題 枝の有無 (e[i][j]==1 か否か ) を調べる処理が必要 枝が無くても (e[i][j]=0) を記憶する必要があるためメモリを大量に消費し 速度低下 ( スラッシング ) 配列に代わる 不規則なデータを効率よく記録する方式が必要 リスト構造
23 リストの管理 リストの要素データ領域の他に 次の要素を指すポインタを備える 要素 ポインタ データ領域 次の要素を指す ポインタを用いて要素をつなげる = リスト
24 リストの実装 例 構造体によって データ領域と次要素へのポインタをまとめて管理する 要素の構造体型を宣言 typedef struct Edge { struct Edge *next; int i,j; // 点 1, 点 int w; // 枝重み } EDGE; 次要素へのポインタ データ領域 例 リストの先頭を指すポインタを宣言 EDGE *edge_top = NULL;
25 リストの実装 ( その ) リストの例 edge_top NULL 点 1 点 1 点 1 点 枝重み 点 枝重み 点 枝重み リストを順にたどる処理 3 本の枝を記録するリスト リストの末尾では next メンバは NULL EDGE *ep; for( ep=edge_top ; ep!= NULL ; ep=ep->next ){ /* リスト要素に対する処理 */ }
26 ダイクストラ法における枝リスト 最短経路が決まるたびに その点から枝 1 本でつながる点の経路長更新 最短経路長の決まっている点 新たに最短経路長の決まった点 各点に接続する枝リストがあると便利 s 経路長を更新する点
27 edge[0] ダイクストラ法のための枝リスト 各点に接続する枝のリスト 点 0 に接続する枝のリスト edge[1] 点 1 に接続する枝のリスト NULL 点 枝重み 点 枝重み 点 枝重み 点ごとに接続する枝数は変化 NULL 点 枝重み 点 枝重み 点 枝重み 点 枝重み edge[] 点 枝重み ダイクストラ法と組合わせる場合 メンバ 点 1 は不要
28 リストを用いたダイクストラ法 始点 s=0 とする int s, minlen, j, m, u[n], f[n]={0}; EDGE edge[n], *ep; /* 枝リストを設定する処理は省略 */ for( j=0 ; j<n ; j++ ) u[j] = 9999; s = 0; u[s] = 0; 十分大きな正数 for( m=1 ; m<n ; m++ ){ f[s] = 1; 点 sは最短経路決定 } for( ep=edge[s] ; ep!=null ; ep=ep->next ){ if( u[s]+ep->w < u[ep->j] ){ u[ep->j]=u[s]+ ep->w;} } minlen = 9999; for( j=0 ; j<n ; j++ ){ if( f[j] ) continue; if( u[j] < minlen ){ minlen = u[j]; s = j; } } 点 s は経路長が最短 点数 N s に接続する枝を順に調べる 点 ep->j への経路長を更新 最短経路既定の点は除外
29 秒 プログラムの実行時間 ノード数 N とプログラム実行時間の関係 N=8000 約 500M バイト N=7000 約 400M バイト 配列利用 リスト構造利用 N N=40000 約 1M バイト PentiumIV.4GHz 51MB メモリ
30 最短経路アルゴリズム 負の枝重みが存在する場合 始点 s 6 d a b c ダイクストラ法では最短経路を見つけられないなぜか? まだ最短経路の決まっていない点を経由した方が経路長が短くなるパスが存在するかもしれないため
31 Bellman 方程式 点 j の最短経路長を u j とするとき u j が満たす関係式 Bellman 方程式 u s = 0 u j = min i { } u + w j s i ij 最小値原理より 始点 s u i i w ij j u j
32 Bellman 方程式を解く Bellman 方程式の解 = 最短経路 漸化的に解く u[i] が更新されたら 枝 (i,j) が存在する点 j について u[j] を更新する すべての点 j について u[j] が変化しなくなったら 解が得られている Bellman-Ford 法
33 リストを用いた Bellman-Ford 法実装 始点 s=0 とする int s,update,minl,i,u[n], prev[n]; EDGE *edge_top, *ep; /* リストを正しく作成する必要あり ( ここでは省略 ) */ for( i=0 ; i<n ; i++ ) u[i] = 9999; s = 0; u[s] = 0; do { update = 0; for( ep=edge_top ; ep!= NULL ; ep=ep->next ){ if( u[ep->i]+ep->w < u[ep->j] ){ u[ep->j] = u[ep->i]+ ep->w; prev[ep->j] = ep->i; update = 1; } } } while ( update ); 十分大きな正数 経路を記録 経路長が短くなったら更新フラグを 1 に 経路長更新の場合再度繰り返し
34 do - while 文 条件が成り立つ間 文を実行 do 文 while( 式 ); 意味 : まず 1 回文を実行する 式が真の間 文を実行 文 式 False True 式 False True 文 do-while 文の実行の様子 while( 式 ) 文 ; の実行の様子
35 Bellman-Ford 法の計算複雑度 すべての枝を順に調査 経路長が更新されたら 再度調査実行 負ループがなければ最短経路を構成する枝数は N 未満 更新は高々 N-1 回 実行時間 O(NE)
36 負ループのある最短経路問題 最短経路は不定 負ループを繰り返すごとに経路長は減少 経路にループを含まない という制約を与えると意味のある問題として定式化される効率よく最短経路を求めるアルゴリズムは見つかっていない 負ループが存在する場合の最短経路問題は負ループが存在しない場合の問題とは性格が異なる
37 組み合わせ最適化問題 ある条件を満足する解候補のうち ある評価尺度が最適になる解を選ぶ問題 例 : 最短経路問題 条件 : 始点から終点への連続した枝集合 ( 経路 ) 評価尺度 : 枝重み和が小さい
38 組み合わせ最適化問題の困難さ 組み合わせ最適化問題を 3 つに分類 P: 多項式可解な問題 問題サイズの多項式オーダの手数で解が得られる 計算複雑度が多項式オーダの解法が存在 NP: 非決定的多項式可解な問題 都合良く選択肢を選ぶと 問題サイズの多項式オーダの手数で解が得られる P でも NP でもない問題 P や NP よりも難しい問題
39 問題の困難さ 組み合わせ最適化問題の分類とその関係 P 問題の例 P ソート ( 並べ替え ) 最短経路問題 NP オペレーションズ リサーチ 全組み合わせ問題
40 NP 問題 NP: 非決定的多項式可解な問題 都合良く選択肢を選ぶと 問題サイズの多項式オーダの手数で解が得られる 工学的に有用な問題が多数含まれる 負ループを含む最短経路問題 セールスマンの巡回問題 タスク スケジューリング問題など
41 セールスマンの巡回問題 問題の定義 N 個の都市を順に訪問するための旅費が最小になる訪問順を求めよ 都市間の旅費は非負 最短経路 ( 最小費用 ) を求める問題 一見すると最短経路問題として解けそう? すべての訪問順を列挙して最小費用の順路を求める方法しか知られていない O(N! )
42 NP 問題と P 問題 NP 問題の解には 今のところ非多項式オーダの手数が必要 多項式オーダの解法が存在しないことは証明されていない もしかするとNP=Pかもしれない NP 問題のどれか 1 つについて多項式オーダの解法が見つかれば NP=P すべての NP 問題が多項式オーダで解ける!
43 まとめ 問題定式化とグラフ 最短経路問題 効率よい解法 ダイクストラ法 Bellman-Ford 法 リスト構造 組み合わせ最適化問題とNP
Microsoft PowerPoint - H20第10回最短経路問題-掲示用.ppt
最短経路問題とは プログラミング言語 I 第 0 回 から終点へ行く経路が複数通りある場合に 最も短い経路を見つける問題 経路の短さの決め方によって様々な応用 最短経路問題 埼玉大学工学部電気電子システム工学科伊藤和人 最短経路問題の応用例 カーナビゲーション 現在地から目的地まで最短時間のルート 経路 = 道路 交差点において走る道路を変更してもよい 経路の短さ = 所要時間の短さ 鉄道乗り換え案内
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) を表現するデータ構造
Microsoft PowerPoint - DA2_2017.pptx
// データ構造とアルゴリズム IⅠ 第 回単一始点最短路 (II)/ 全点対最短路 トポロジカル ソート順による緩和 トポロジカル ソート順に緩和 閉路のない有向グラフ限定 閉路がないならトポロジカル ソート順に緩和するのがベルマン フォードより速い Θ(V + E) 方針 グラフをトポロジカル ソートして頂点に線形順序を与える ソート順に頂点を選び, その頂点の出辺を緩和する 各頂点は一回だけ選択される
Microsoft PowerPoint - DA2_2018.pptx
1//1 データ構造とアルゴリズム IⅠ 第 回単一始点最短路 (I). 単一始点最短路問題 第 章の構成 単一始点最短路問題とは 単一始点最短路問題の考え方 単一始点最短路問題を解くつのアルゴリズム ベルマン フォードのアルゴリズム トポロジカル ソートによる解法 ダイクストラのアルゴリズム 単一始点最短路問題とは 単一始点最短路問題とは 前提 : 重み付き有向グラフ 特定の開始頂点 から任意の頂点
Microsoft PowerPoint - DA2_2017.pptx
1// 小テスト内容 データ構造とアルゴリズム IⅠ 第 回単一始点最短路 (I) 1 1 第 章の構成. 単一始点最短路問題 単一始点最短路問題とは 単一始点最短路問題の考え方 単一始点最短路問題を解くつのアルゴリズム ベルマン フォードのアルゴリズム トポロジカル ソートによる解法 ダイクストラのアルゴリズム 1 1 単一始点最短路問題とは 単一始点最短路問題とは 前提 : 重み付き有向グラフ
Microsoft PowerPoint - mp11-06.pptx
数理計画法第 6 回 塩浦昭義情報科学研究科准教授 [email protected] http://www.dais.is.tohoku.ac.jp/~shioura/teaching 第 5 章組合せ計画 5.2 分枝限定法 組合せ計画問題 組合せ計画問題とは : 有限個の もの の組合せの中から, 目的関数を最小または最大にする組合せを見つける問題 例 1: 整数計画問題全般
PowerPoint プレゼンテーション
プログラミング応用演習 第 4 回再帰的構造体 プログラミングを 余談 : 教えることの難しさ 丁寧に説明しないと分かってもらえない 説明すると 小難しくなる学生が目指すべきところプログラム例を説明されて理解できる違うやり方でも良いので自力で解決できる おっけー 動けば良い という意識でプログラミング 正しく動くことのチェックは必要 解答例と自分のやり方との比較が勉強になる 今日のお題 再帰的構造体
プログラミングI第10回
プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造
PowerPoint Template
プログラミング演習 Ⅲ Linked List P. Ravindra S. De Silva e-mail: [email protected], Room F-413 URL: www.icd.cs.tut.ac.jp/~ravi/prog3/index_j.html 連結リストとは? 一つひとつの要素がその前後の要素との参照関係をもつデータ構造 A B C D 連結リストを使用する利点 - 通常の配列はサイズが固定されている
Taro-スタック(公開版).jtd
0. 目次 1. 1. 1 配列によるの実現 1. 2 再帰的なデータ構造によるの実現 1. 3 地図情報処理 1. 4 問題 問題 1 グラフ探索問題 - 1 - 1. は データの出し入れが一カ所で行われ 操作は追加と削除ができるデータ構造をいう 出入口 追加 削除 操作 最初 111 追加 111 222 追加 111 222 333 追加 111 222 333 444 追加 111 222
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (
Microsoft PowerPoint - mp13-07.pptx
数理計画法 ( 数理最適化 ) 第 7 回 ネットワーク最適化 最大流問題と増加路アルゴリズム 担当 : 塩浦昭義 ( 情報科学研究科准教授 ) [email protected] ネットワーク最適化問題 ( 無向, 有向 ) グラフ 頂点 (verex, 接点, 点 ) が枝 (edge, 辺, 線 ) で結ばれたもの ネットワーク 頂点や枝に数値データ ( 距離, コストなど ) が付加されたもの
離散数学
離散数学 最短経路問題 落合秀也 その前に 前回の話 深さ優先探索アルゴリズム 開始点 から深さ優先探索を行うアルゴリズム 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)
memo
数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int
Microsoft PowerPoint - 13.ppt [互換モード]
13. 近似アルゴリズム 1 13.1 近似アルゴリズムの種類 NP 困難な問題に対しては多項式時間で最適解を求めることは困難であるので 最適解に近い近似解を求めるアルゴリズムが用いられることがある このように 必ずしも厳密解を求めないアルゴリズムは 大きく分けて 2 つの範疇に分けられる 2 ヒューリスティックと近似アルゴリズム ヒュ- リスティクス ( 発見的解法 経験的解法 ) 遺伝的アルゴリズム
次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1
4. ソート ( 教科書 p.205-p.273) 整列すなわちソートは アプリケーションを作成する際には良く使われる基本的な操作であり 今までに数多くのソートのアルゴリズムが考えられてきた 今回はこれらソートのアルゴリズムについて学習していく ソートとはソートとは与えられたデータの集合をキーとなる項目の値の大小関係に基づき 一定の順序で並べ替える操作である ソートには図 1 に示すように キーの値の小さいデータを先頭に並べる
Taro-ポインタ変数Ⅰ(公開版).j
0. 目次 1. ポインタ変数と変数 2. ポインタ変数と配列 3. ポインタ変数と構造体 4. ポインタ変数と線形リスト 5. 問題 問題 1 問題 2-1 - 1. ポインタ変数と変数 ポインタ変数には 記憶領域の番地が格納されている 通常の変数にはデータが格納されている 宣言 int *a; float *b; char *c; 意味ポインタ変数 aは 整数型データが保存されている番地を格納している
Microsoft Word - 第5回 基本データ構造2(連結リスト).doc
第 5 回基本データ構造 2 連結リストとその操作 第 5 回 Page 1 5-1. リスト構造 データ部 と ポインタ部 で構成され ポインタをたどることによりデータを扱うことができる構造 5-2. 単方向リストとその操作 5-2-1. 単方向リスト 次のデータへのポインタを 1 つだけ持っているデータ構造 ( データ部は 複数のデータを持っている場合もある ) データ部 ポインタ部 ノード リストを構成する要素のことを
Microsoft PowerPoint - algo ppt [互換モード]
( 復習 ) アルゴリズムとは アルゴリズム概論 - 探索 () - アルゴリズム 問題を解くための曖昧さのない手順 与えられた問題を解くための機械的操作からなる有限の手続き 機械的操作 : 単純な演算, 代入, 比較など 安本慶一 yasumoto[at]is.naist.jp プログラムとの違い プログラムはアルゴリズムをプログラミング言語で表現したもの アルゴリズムは自然言語でも, プログラミング言語でも表現できる
今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること
C プログラミング演習 1( 再 ) 4 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順
Microsoft PowerPoint - lec10.ppt
今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ
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])
PowerPoint プレゼンテーション
講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる
Microsoft PowerPoint - 13基礎演習C_ITプランナー_2StableMatching.pptx
2013/4,5,6,7 Mon. 浮気しない? カップル 6 人の男女がいます. 少子化対策? のため,6 組のカップルを作り結婚させちゃいましょう. でも各自の好き嫌いを考えずに強引にくっつけちゃうと, 浮気する人が出るかもしれません. 浮気しないように 6 組のカップルをつくれますか? どうすれば浮気しないの? 浮気しないってどういうこと? 浮気ってどういう状況で起こる? 浮気する しないを
4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ
4 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プログラミング技術 工業 333 実教出版 ) 共通 : 科目 プログラミング技術 のオリエンテーション プログラミング技術は
情報システム評価学 ー整数計画法ー
情報システム評価学 ー整数計画法ー 第 1 回目 : 整数計画法とは? 塩浦昭義東北大学大学院情報科学研究科准教授 この講義について 授業の HP: http://www.dais.is.tohoku.ac.jp/~shioura/teaching/dais08/ 授業に関する連絡, および講義資料等はこちらを参照 教員への連絡先 : shioura (AT) dais.is.tohoku.ac.jp
8. 自由曲線と曲面の概要 陽関数 陰関数 f x f x x y y y f f x y z g x y z パラメータ表現された 次元曲線 パラメータ表現は xyx 毎のパラメータによる陽関数表現 形状普遍性 座標独立性 曲線上の点を直接に計算可能 多価の曲線も表現可能 gx 低次の多項式は 計
8. 自由曲線 曲面. 概論. ベジエ曲線 曲面. ベジエ曲線 曲面の数学. OeGLによる実行. URS. スプライン関数. スプライン曲線 曲面. URS 曲線 曲面 4. OeGLによる実行 8. 自由曲線と曲面の概要 陽関数 陰関数 f x f x x y y y f f x y z g x y z パラメータ表現された 次元曲線 パラメータ表現は xyx 毎のパラメータによる陽関数表現 形状普遍性
Microsoft PowerPoint - mp11-02.pptx
数理計画法第 2 回 塩浦昭義情報科学研究科准教授 [email protected] http://www.dais.is.tohoku.ac.jp/~shioura/teaching 前回の復習 数理計画とは? 数理計画 ( 復習 ) 数理計画問題とは? 狭義には : 数理 ( 数学 ) を使って計画を立てるための問題 広義には : 与えられた評価尺度に関して最も良い解を求める問題
アルゴリズムとデータ構造
講義 アルゴリズムとデータ構造 第 2 回アルゴリズムと計算量 大学院情報科学研究科情報理工学専攻情報知識ネットワーク研究室喜田拓也 講義資料 2018/5/23 今日の内容 アルゴリズムの計算量とは? 漸近的計算量オーダーの計算の方法最悪計算量と平均計算量 ポイント オーダー記法 ビッグオー (O), ビッグオメガ (Ω), ビッグシータ (Θ) 2 お風呂スケジューリング問題 お風呂に入る順番を決めよう!
PowerPoint プレゼンテーション
プログラミング応用演習 第 5 回演習 前回までのお話 ポインタ ポインタを用いた文字列処理 構造体 ファイル 再帰的構造体 リスト構造 動的メモリ管理 今日のお題 ポインタやファイルなど これまでの内容の練習 教材 以前 以下に単語を収録したファイルがあることを紹介した : /usr/share/dict/words この中からランダムに単語を取り出したファイルを用意した http://sun.ac.jp/prof/yamagu/2019app/
計算幾何学入門 Introduction to Computational Geometry
テーマ 6: ボロノイ図とデローネイ 三角形分割 ボロノイ図, デローネイ三角形分割 ボロノイ図とは 平面上に多数の点が与えられたとき, 平面をどの点に最も近いかという関係で分割したものをボロノイ図 (Voronoi diagram) という. 2 点だけの場合 2 点の垂直 2 等分線による分割 3 点の場合 3 点で決まる三角形の外接円の中心から各辺に引いた垂直線による分割線 2 点からの等距離線
PowerPoint プレゼンテーション
解けない問題 を知ろう 保坂和宏 ( 東京大学 B2) 第 11 回 JOI 春合宿 2012/03/19 概要 計算量に関して P と NP NP 完全 決定不能 いろいろな問題 コンテストにおいて Turing 機械 コンピュータの計算のモデル 計算 を数学的に厳密に扱うためのもの メモリのテープ (0/1 の列 ), ポインタ, 機械の内部状態を持ち, 規則に従って状態遷移をする 本講義では
Taro-2分探索木Ⅰ(公開版).jtd
2 分探索木 Ⅰ 0. 目次 1. 2 分探索木とは 2. 2 分探索木の作成 3. 2 分探索木の走査 3. 1 前走査 3. 2 中走査 3. 3 問題 問題 1 問題 2 後走査 4. 2 分探索木の表示 - 1 - 1. 2 分探索木とは 木はいくつかの節点と節点同士を結ぶ辺から構成される 2 つの節点 u,v が直接辺で結ばれているとき 一方を親節点 他方を子節点という ある節点の親節点は高々
コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n
コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n を入力してもらい その後 1 から n までの全ての整数の合計 sum を計算し 最後にその sum
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき
DVIOUT-SS_Ma
第 章 微分方程式 ニュートンはリンゴが落ちるのを見て万有引力を発見した という有名な逸話があります 無重力の宇宙船の中ではリンゴは落ちないで静止していることを考えると 重力が働くと始め静止しているものが動き出して そのスピードはどんどん大きくなる つまり速度の変化が現れることがわかります 速度は一般に時間と共に変化します 速度の瞬間的変化の割合を加速度といい で定義しましょう 速度が変化する, つまり加速度がでなくなるためにはその原因があり
離散数学
離散数学 最小全域木と最大流問題 落合秀也 今日の内容 最小全域木 プリムのアルゴリズム 最大流問題 フォード ファルカーソンのアルゴリズム 今日の内容 最小全域木 プリムのアルゴリズム 最大流問題 フォード ファルカーソンのアルゴリズム 最小全域木を考える Minimum Spanning Tree Problem ラベル付 ( 重み付 ) グラフ G(V, E) が与えられたとき ラベルの和が最小となる全域木を作りたい
モデリングとは
コンピュータグラフィックス基礎 第 5 回曲線 曲面の表現 ベジェ曲線 金森由博 学習の目標 滑らかな曲線を扱う方法を学習する パラメトリック曲線について理解する 広く一般的に使われているベジェ曲線を理解する 制御点を入力することで ベジェ曲線を描画するアプリケーションの開発を行えるようになる C++ 言語の便利な機能を使えるようになる 要素数が可変な配列としての std::vector の活用 計算機による曲線の表現
人工知能入門
藤田悟 黄潤和 探索とは 探索問題 探索解の性質 探索空間の構造 探索木 探索グラフ 探索順序 深さ優先探索 幅優先探索 探索プログラムの作成 バックトラック 深さ優先探索 幅優先探索 n 個の ueen を n n のマスの中に 縦横斜めに重ならないように配置する 簡単化のために 4-ueen を考える 正解 全状態の探索プログラム 全ての最終状態を生成した後に 最終状態が解であるかどうかを判定する
cp-7. 配列
cp-7. 配列 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 月の日数配列とは. 配列の宣言. 配列の添え字. 例題 2. ベクトルの内積例題 3. 合計点と平均点例題 4. 棒グラフを描く配列と繰り返し計算の関係例題 5. 行列の和 2 次元配列 2 今日の到達目標
グラフの探索 JAVA での実装
グラフの探索 JAVA での実装 二つの探索手法 深さ優先探索 :DFS (Depth-First Search) 幅優先探索 :BFS (Breadth-First Search) 共通部分 元のグラフを指定して 極大木を得る 探索アルゴリズムの利用の観点から 利用する側からみると 取り替えられる部品 どちらの方法が良いかはグラフに依存 操作性が同じでなければ 共通のクラスの派生で作ると便利 共通化を考える
プログラミング基礎
C プログラミング Ⅱ 演習 2-1(a) BMI による判定 文字列, 身長 height(double 型 ), 体重 weight (double 型 ) をメンバとする構造体 Data を定義し, それぞれのメンバの値をキーボードから入力した後, BMI を計算するプログラムを作成しなさい BMI の計算は関数化すること ( ) [ ] [ ] [ ] BMI = 体重 kg 身長 m 身長
RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用
RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項
PowerPoint プレゼンテーション
プログラミング初級 第 7 回 2017 年 5 月 29 日 配列 ( 復習 )~ 文字列 1 配列とは 2 配列 : 複数の変数をグループとしてまとめて扱うもの 配列 変数 int data[10]; 整数型の配列 同種のデータ型を連続して確保したものを配列とよぶ = 整数がそれぞれにひとつずつ入る箱を 10 個用意したようなもの int data; 整数型の変数 = 整数がひとつ入る dataという名前の箱を用意したようなもの
02: 変数と標準入出力
C プログラミング入門 基幹 7 ( 水 5) 13: 構造体 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-07-06 1 例題 : 多角形の面積 n = 5 (5 角形 ) の例 n 1 n 1 1 p 1 T 0 S = i=0 p 0 T i = i=0 2
umeda_1118web(2).pptx
選択的ノード破壊による ネットワーク分断に耐性のある 最適ネットワーク設計 関西学院大学理工学部情報科学科 松井知美 巳波弘佳 選択的ノード破壊によるネットワーク分断に耐性のある最適ネットワーク設計 0 / 20 現実のネットワーク 現実世界のネットワークの分析技術の進展! ネットワークのデータ収集の効率化 高速化! 膨大な量のデータを解析できる コンピュータ能力の向上! インターネット! WWWハイパーリンク構造
簡単な検索と整列(ソート)
フローチャート (2) アルゴリズム論第 2 回講義 2011 年 10 月 7 日 ( 金 ) 反復構造 ( 一定回数のループ処理 ) START 100 回同じ処理を繰り返す お風呂で子供が指をおって数を数える感じ 繰り返し数を記憶する変数をカウンター ( 変数名 I をよく使う ) と呼ぶ カウンターを初期化して, 100 回繰り返したかどうか判定してそうならば終了そうでなければ処理を実行して
untitled
に, 月次モデルの場合でも四半期モデルの場合でも, シミュレーション期間とは無関係に一様に RMSPE を最小にするバンドの設定法は存在しないということである 第 2 は, 表で与えた 2 つの期間及びすべての内生変数を見渡して, 全般的にパフォーマンスのよいバンドの設定法は, 最適固定バンドと最適可変バンドのうちの M 2, Q2 である いずれにしても, 以上述べた 3 つのバンド設定法は若干便宜的なものと言わざるを得ない
Microsoft PowerPoint - 5Chap15.ppt
第 15 章文字列処理 今日のポイント 15.1 文字列処理の基本 strcpy strcat strlen strchr などの使い方をマスターする strcpy はなんて読むの? 普通はストリングコピー C のキーワードの読み方に悩んだら下記サイトを参考 ( 前回紹介とは別サイト ) http://www.okakogi.go.jp/people/miwa/program/c_lang/c_furoku.html
Microsoft PowerPoint - CproNt02.ppt [互換モード]
第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント
