離散アルゴリズム特論 レポート問題集 2015 年 7 月 20 日更新, 担当 宇野 ¶ ³ 自分の言葉で表現されていないと推測・判断される答案は, オリジナル/コピー を問わずその 評価を著しく下げます. 注意して下さい. µ ´ 問題 1 初等的な整列法の解析. 問題 SORT を解く初等的なアルゴリズムとして, 挿入ソート, バブルソート, 選択ソート の 3 つの方法を取り上げた. 講義で詳細に説明した挿入ソート以外の, バブルソートある いは選択ソートの:::::::::::::::::::: いずれか一方のみを選択し, それを明示した上で以下の問いに答えよ. 1. 2. 3. 4. 方法のアイデアを, (図や例を用いるなどして) わかりやすく説明せよ. その方法を擬似コードで表現せよ. その方法の正当性を説明せよ. 自分の記述した擬似コードの時間計算量を (講義で説明したものと同様の方法で) 理 論的に解析し, 最悪時間計算量を導出せよ. 5. 上の解析における最悪時間計算量を実現する入力の例を示せ. 問題 2 初等的な整列法における挿入ソートの優位性. 講義中に説明した 3 つの初等的な整列法 (挿入ソート, バブルソート, 選択ソート) の中 では, 実用上は挿入ソートが圧倒的に高速であるとされている. その理由を考察せよ. 問題 3 マージソートの実装. 問題 SORT を解くマージソートについて, 以下の問いに答えよ. 1. その方法を C 言語を用いて実現し, 完全に動作するプログラムを作成せよ. (ソース プログラムとその解説を示し, さらにその動作例を挙げよ.) ただし, 入力データは以 下のような形式でファイルとして与えられ, これを scanf 関数を用いて, 順次対応す る変数や配列に格納するものとする. 要素数 n 要素 1 要素 2 ... 要素 n たとえば, 10 15 21 7 3 19 30 6 22 10 7 という入力は, 10 要素からなるリスト L = (15, 21, 7, 3, 19, 30, 6, 22, 10, 7) を表し, これが input.dat という名前のファイルで与えられ, ソートの実行ファイル名が yoursort であるとすると, コマンドラインから # yoursort < input.dat あるいは # yoursort input.dat のように実行すると結果が得られるものとする. 2. マージソートを,「その場ソート」として実現することは可能か. 自分の作成したプ ログラムを分析した上で, 一般にどうであるかを議論し考察せよ. ただしその場ソー トとは, 入力となる n 要素を格納する領域以外に必要となる記憶領域が, O(1) である 方法をいうことにする. 問題 4 整列法. アルゴリズムの正当性. 問題 SORT を解く方法として, 以下の擬似コード MySort で示される方法を考案した. これについて, 以下の問いに答えよ. MySort (L[n]) f lag := 1; while ( f lag = 1) do f lag := 0; for j = 1 to n − 1 by 2 if (L[ j] > L[ j + 1]) {swap(L[ j], L[ j + 1]); f lag := 1; } for j = 2 to n − 1 by 2 if (L[ j] > L[ j + 1]) {swap(L[ j], L[ j + 1]); f lag := 1; } end. 1. この擬似コードが実現しようとしているアイデアを理解し, その動作がよく表現で きる入力例 L = (a1 , a2 , . . . , an ) を考え, それに対する動作例を具体的に示した上で, こ の方法のアイデアを説明せよ. 2. このアルゴリズム MySort(L[n]) は正しいか (問題 SORT に対するアルゴリズムか). もし正しい場合は, その正当性を説明し, このアルゴリズムの最悪時間量を解析せよ. もし正しくない場合は, その理由を示せ. 問題 5 整列法の最悪計算時間の下界. 2 要素の大小の比較にもとづく任意の整列法は, その最悪時間計算量が Ω(n log n) である ことを示したい. これについて, 以下の問いに答えよ. ただし, n は入力要素数である. 1. n! 個の葉節点をもつ 2 分 (決定) 木の高さ h について, h = Ω(n log n) であることを示 せ (数学的な議論を要求している). 2. 2 の事実にもとづき, 2 要素の比較にもとづく任意の整列法の最悪時間計算量が Ω(n log n) であることを, 自分の言葉で表現して説明せよ. 問題 6 2 要素の比較にもとづかない整列法. 挿入ソートやマージソートなどの整列法は, 2 要素の比較にもとづいて動作している. こ れに対して, 2 要素の比較に:::::::::::::::: もとづかない整列法とはどのようなものか. それらの動作原理 は何にもとづいているか. また, そのことで計算量はどのような影響を受けどのように変 化するか. これらについて調査をし, 理解したことを説明せよ. 問題 7 要素同一性判定問題. 次の問題を考える. 要素同一性 入力: 自然数 n, 整数 a1 , . . . , an , 出力: 入力要素の中に値が同一の要素があれば yes, そうでなければ no. 1. この問題を正しく解くアルゴリズムを考案し, そのアイデアを説明した上で擬似コー ドで表現せよ. 2. 考案したアルゴリズムの最悪時間計算量を解析せよ. 3. この問題の時間計算量の下界について考察せよ. 問題 9 Randomized Selection の実装. 問題 第 p 要素の選択を解く乱択アルゴリズムである Randomized Selection について, 以 下の問いに答えよ. 1. その方法を C 言語を用いて実現し, 完全に動作するプログラムを作成せよ. (ソース プログラムとその解説を示し, さらにその動作例を挙げよ.) ただし入力データの与 え方などは, 問題 3 におけるマージソートに対するものに準ずるものとする. 2. 乱択アルゴリズムでは, プログラム中に乱数を発生するメカニズムが必要となる. 自 分の作成したプログラムでは, それをどのように準備したかを説明せよ. 問題 10 Randomized QuickSort の設計, 解析, 実装. 第 p 要素の選択に対するアルゴリズム Randomized Selection (RS) と同様のアイデアで, 問題 SORT 解くアルゴリズムを設計したい. 1. SORT を解く乱択アルゴリズムとして Randomized QuickSort (RQS) を設計し, その アイデアを説明した上で擬似コードで表現せよ. 2. 考案したアルゴリズムの時間計算量を解析せよ. 3. RQS を C 言語を用いて実現し, 完全に動作するプログラムを作成せよ. (ソースプロ グラムとその解説を示し, さらにその動作例を挙げよ.) ただし入力データの与え方 などは, 問題 3 におけるマージソートに対するものに準ずるものとする. 4. 乱択アルゴリズムでは, プログラム中に乱数を発生するメカニズムが必要となる. 自 分の作成したプログラムでは, それをどのように準備したかを説明せよ. 問題 11 確率的手法. 2 次元平面上の 10 点は, どのような配置にあっても (重なることのない) 単位円盤でカ バーできることを証明 (説明) せよ. 問題 12 確率的手法. n 変数, m 節からなる kSAT は, m ≤ 2k − 1 であるとき充足可能であることを証明 (説明) せよ. 問題 13 最長増加部分列. L = (a1 , . . . , an ) を n 個の正整数からなるリストとする. このとき, リスト (ai1 , . . . , aik ) (1 ≤ i1 < · · · < ik ≤ n) を L の部分列といい, ai1 < · · · < aik を満たす部分列を増加部分列と いう. 例えば, 与えられたリストが L = (11, 17, 5, 8, 6, 4, 7, 12, 3) である場合, 5, 6, 7, 12 は増加部分列で, その長さは 4 である. いま, L における長さ最大の増加部分列 (最長増加部分列 (longest increasing subsequence, LIS)) の長さを求める方法を考えたい. 1. 最長増加部分列問題を解くアルゴリズムを考案し設計せよ. また, 設計したアリゴリ ズムの時間計算量を解析せよ. √ 2. 与えられたリスト L の n 個の値がすべて異なるとき, L は少なくとも長さ d n e の増 加部分列, あるいは減少部分列をもつことを証明せよ. 問題 14 連続行列積, 三角形分割. n (≥ 2) 個の行列の積を計算するとき, 結合則にもとづく異なる計算順序 (括弧のつけ方) の総数を Pn とする. また, 凸 n 角形 (n ≥ 3) に n − 3 本の交差しない対角線を引いて, n − 2 個の三角形に分割する異なる分割の総数を Dn とする. (1) n ≥ 2 に対して, Pn = Dn+1 であることを示せ. (2) 自然数 n に対して Cn を (便宜的に) Cn ≡ Pn+1 と定義すると, n = 1, 2, . . . に対する 数 列 {Cn } は, 1, 2, 5, 14, 42, . . . となる. 数列 {Cn } の一般項を求めよ. 問題 15 木の独立点集合. 無向グラフ G = (V, E) における点の部分集合 S (⊆ V) が独立であるとは, ∀u, v ∈ S (u , v) に対して {u, v} < E を満たすことであり, |S | が最大となる独立点集合 S を最大独立点集合 という. いまグラフが木であるとき, 木の最大独立点集合を求めるアルゴリズムを設計せよ. ま たそのアルゴリズムの時間計算量を解析せよ. 問題 16 頂点被覆. 特別な場合. 無向グラフ G = (V, E) における頂点被覆とは, 頂点の部分集合 S (⊆ V) で S ∩ {u, v} , ∅ (∀uv ∈ E) を満たすもののことであり, |S | が最小となる頂点被覆 S を最小頂点被覆 (集合) という. 1. 入力となるグラフが木であるとき, 木の最小頂点被覆を求めるアルゴリズムを設計 せよ. またそのアルゴリズムの時間計算量を解析せよ. 2. 入力となるグラフの最大次数が 2 であるとき, その最小頂点被覆を求めるアルゴリズ ムを設計せよ. またそのアルゴリズムの時間計算量を解析せよ. 問題 17 部分和.ナップサック問題などと同類. 部分和問題とは, 正整数 a1 , . . . , an と正整数 b を入力とし, P a j = b をみたす S ⊆ {1, . . . , n} が存在すれば yes, そうでなければ no と答える問題である. この問題を解くアルゴリズムを設計せよ. またそのアルゴリズムの時間計算量を解析 せよ. j∈S 問題 18 k-頂点被覆. 固定パラメータアルゴリズムの解析. (1) k-頂点被覆問題に対するアルゴリズム Naive k-VC の最悪時間計算量を解析せよ. そ の上で, Naive k-VC が固定パラメータアルゴリズムであるかどうかを議論せよ. (2) k-頂点被覆問題に対するアルゴリズム Branch の最悪時間計算量を解析せよ. その上 で, Branch が固定パラメータアルゴリズムであるかどうかを議論せよ. 問題 19 MAX-SAT の乱択近似. 充足可能性 (SAT) とは, 与えられた命題論理式に対して, それを真にする各変数への真 理値割当てが存在するかを問う問題である. ただし, 論理式は和積標準形で与えられるも のとする. たとえば, f = (x ∨ y ∨ z) ∧ (x ∨ y ∨ z) は, x = 1, y = 1, z = 0 のときに f を真にす る. MAX-SAT は SAT で真になる節の数を最大化する問題である. いま MAX-SAT に対する次のアルゴリズムを考える: 「各変数に 0 か 1 を等確率で割当 てる」. このアルゴリズムが MAX-SAT に対する 1/2-近似アルゴリズムであることを証明 せよ. 問題 20 乱択, 重みなし版フライトスケジュール. 重みなし版フライトスケジュールで都市 1 から n へつねに右へと移動する問題で, 各都市 で次の移動都市を一様ランダムに選択するとする. このとき, 移動回数の期待値を求めよ. 問題 21 点彩色, 入力制限. 点彩色問題において, 入力を制限するアプローチでどのような研究結果があるかを調査 し報告せよ.
© Copyright 2025 ExpyDoc