>問題3
(1)あるアルゴリズムが、入力サイズnの問題に対して、最悪時間計算量がO(nlogn)である場合、これが、このアルゴリズムの性能に関して何を表しているかを説明せよ。
(2)n個のデータを昇順でソートしたい。この問題に対する最悪時間計算量O(nlogn)のアルゴリズムを1つ示せ。アルゴリズムの概要がわかる疑似コードや図を使って説明せよ。具体例を挙げて説明したい場合は、例として「8, 2, 3, 5, 7, 1, 9, 6」の8個の整数が入力であると仮定した例でソート手順を説明してもよい。
(3)(2)のアルゴリズムの最悪計算時間がO(nlogn)であることを証明せよ。
(1)あるアルゴリズムが、入力サイズnの問題に対して、最悪時間計算量がO(nlogn)である場合、これが、このアルゴリズムの性能に関して何を表しているかを説明せよ。
プログラムがO(nlogn)の計算時間を要するとは、どのようなデータが与えられても最悪nlognに比例する計算時間で、計算が終了することを意味している。
例えば、要素数が4から8になると、計算時間は24/4=6倍になることになる。
(2)n個のデータを昇順でソートしたい。この問題に対する最悪時間計算量O(nlogn)のアルゴリズムを1つ示せ。アルゴリズムの概要がわかる疑似コードや図を使って説明せよ。具体例を挙げて説明したい場合は、例として「8, 2, 3, 5, 7, 1, 9, 6」の8個の整数が入力であると仮定した例でソート手順を説明してもよい。
O(nlogn)で終了するソートアルゴリズムには、ヒープソートやマージソート、クイックソートなどが存在する。
ヒープソートは、親が2つの子より小さい値になるように2分探索木を作成してソートする方法である。木を構成するには、配列から一つずつ要素を取り出し、木に追加する。このままでは、探索木にならないので、追加した要素とその親を比較して、追加した要素の方が小さければ交換する。この動作を追加するたび、親の方が小さいか、根に達するまで行えば、定義したような2分探索木ができる。
取り出す際は、根から要素を取り出せばよいが、根を取ると探索木が壊れてしまうため、最後の要素を根として持ってきて、子の小さい方と比べてみて小さければ交換する動作を、子より小さいか、葉に達するまで行う。
こうして、根を取りだして配列の後に追加し、木を再形成することを繰り返せば、ソートされた状態で要素が並ぶことがわかる。
マージソートは、一度配列を最小(要素数1)配列に分割し、そのあと配列を2つずつ全体が1つの配列になるまで結合(マージ)を繰り返す方法である。マージする際、両配列の前から見ていき、小さい方を新しい配列に追加していくことで、新たに作られた配列はソートされた状態になる。
これを例に当てはめてみる。
1.要素数最小の配列を作る。([8],[2],[3],[5],[7],[1],[9],[6])
2.配列を2つずつ上記の方法で結合する。([2,8],[3,5],[1,7],[6,9])
3.配列を2つずつ上記の方法で結合する。([2,3,5,8],[1,6,7,9])
4.配列を2つずつ上記の方法で結合する。([1,2,3,5,6,7,8,9])
5.配列が1つになったので終了。
クイックソートは、しきい値を利用して配列をそれ未満とそれ以上の2つに分け、その2つを同様の方法で分割することを、分割できなくなるまで繰り返す方法である。しきい値を決める方法にはランダムに決定したり、先頭の値を使うなどいろいろな方法があり、計算時間を左右する。
しきい値が決定すると、配列の左側からはしきい値以上の値を探し、右側からはしきい値未満の値を探す。見つかれば、しきい値以上の値と未満の値を交換する。これを両側からの探索がぶつかるまで続け、その位置で配列を分ける。
こうして分けられた配列に対して、同じことを交換する要素が互いに見つからなくなるまで繰り返せばよい。
これを例に当てはめてみる。
1.ここではしきい値は先頭の値とする。([【8】,2,3,5,7,1,9,6])
2.8>=8、6<8より交換。([6,2,3,5,7,1,9,8])
3.1の要素でぶつかるので1を境に分割。([6,2,3,5,7,1],[9,8])
4.同様のことを繰り返せば最終的にソートされた配列が得られる。([1,2,3,5],[6],[7],[8],[9])
(3)(2)のアルゴリズムの最悪計算時間がO(nlogn)であることを証明せよ。
ヒープソートは、要素の値を読み込んで、親との大小を比較する。要素数がnならば、2分探索木なので、ヒープを構成するための計算時間はO(nlogn)である。また、読み込むときも1つ読み込んではヒープを再構成するので、読み込みの計算時間もO(nlogn)である。よって、全体として計算時間はO(nlogn)である。
マージソートでは、2つの配列を結合するのを繰り返す。そのため、結合の回数はlognに比例する。また、結合するときに、順に配列の要素を最大n回読み込むため、全体の計算時間はO(nlogn)である。
クイックソートは、厳密にはO(nlogn)ではない。すべてソートされた状態ではO(n)であるし、要素数1の分割を繰り返すような最悪の入力の場合はO(n*n)である。しかし、配列をほぼ半割できるようなしきい値を選ぶことができれば、配列を分割する回数はlognに比例するようになる。そして、分割位置を決定するために要素を最大n回見るため、全体の計算時間はO(nlogn)となる。
このようにばらつきはあるが、平均的な場合としてO(nlogn)になることが知られている。
(1)は、上記の連立1次方程式の一つの解であることを示せ。
与えられた式にそれぞれ代入すると、
6 + 2 = 8
12 + 4 = 16
18 + 8 = 26
よって、は解の一つであるといえる。
(2)次の線形問題(LP問題)を解け。
なる条件の下で、を最大にせよ。
fを最大化するには、-fを最小化すればよい。
ここでは、2段階シンプレックス法を用いる。
| 定 数 | ||||||
|---|---|---|---|---|---|---|
| 1 | -3 | 1 | 3 | 1 | 8 | |
| 2 | 2 | 2 | 6 | -1 | 16 | |
| 3 | 4 | [4] | -9 | 2 | 26 | |
| -f | -8 | -24 | -16 | 80 | -5 | 0 |
| -w | -6 | -3 | -7 | 0 | -2 | -50 |
| 1/4 | -4 | [21/4] | 1/2 | 3/2 | ||
| 1/2 | 21/2 | -2 | 3 | |||
| 3/4 | 1 | 1 | -9/4 | 1/2 | 13/2 | |
| -f | 4 | -8 | 44 | 3 | 104 | |
| -w | -3/4 | 4 | 0 | -63/4 | 3/2 | -9/2 |
| 1/21 | -16/21 | 1 | -2/21 | 2/7 | ||
| [8] | -3 | 0 | ||||
| 6/7 | -5/7 | 1 | 2/7 | 50/7 | ||
| -f | 40/21 | 536/21 | 151/21 | 640/7 | ||
| -w | 0 | -8 | 0 | 0 | 3 | 0 |
| 1/21 | 1 | -8/21 | 2/7 | |||
| 1 | -3/8 | 0 | ||||
| 6/7 | 1 | 1/56 | 50/7 | |||
| -f | 40/21 | 352/21 | 640/7 | |||
| -w | 0 | 0 | 0 | 0 | 0 | 0 |
よって、=(0, 0, 50/7, 2/7, 0)のとき、fは最大値640/7をとる。
(ちなみに)
この問題は、普通のシンプレックス法では、解くことができない。
理由は、シンプレックス法は原点から、実行可能領域を辿って、最適解を探していく方法であるため、今回の問題のように、原点が実行可能領域に含まれない問題は解けない。
そのため、2段階法によって、まずはスタート地点を決めて、そのあとシンプレックス法によって、最適解を探していく必要がある。
今回は、たまたま実行可能領域が点なので、スタート地点が最適解であったわけだが...
確率変数と
が以下の確率関数をもつポアソン分布に従う。
(1)平均および確率母関数
を求めよ。
k=0のとき、より、
ここで、テイラー展開より
よって、
(2)確率関数を求めよ。
ここで、二項定理より
よって、
(3)条件付き確率関数を求めよ。
ここで、
よって
実数aはを満たすとする。3次正方行列
について、次に答えよ。
(1)a=1のとき、を満たす直行行列Uおよび対角行列Dを求めよ。ただし、
はUの転置行列を表す。
よって、Aの固有値
(i)のとき
より、固有ベクトル
(ii)のとき
より、固有ベクトル
以上より、のとき、
(2)のとき、
が対角行列となる正規行列Pが存在することを証明せよ。
よって、固有値はとなる。
は
のとき、実数解を2つ持つため、そのとき固有値が2~3個存在することになる。
固有値が2個になるのは、のときであるが、(1)よりそのときも正規行列Pが存在する。
次に、3つの異なる固有値を持つ場合であるが、
このとき、固有空間となるため、対角化可能である。
よって、ならば、
が対角行列となるような正規行列Pが存在する。
(3)のとき、
が対角行列となる正規行列Qが存在しないことを証明せよ。
(2)より、のとき、固有値
となる。
(i)のとき
(ii)のとき
よって、となる。
したがって、このとき、が対角行列となるような正規行列Qは存在しない。
3ビット加減算器fを設計しよう。
fに対する入力は、 の7ビット、出力は
の3ビットとする。
ただし、以下ではA=, B=
, S=
は、いずれも符号付き2進数であるとする。
以下の問いに答えよ。
(1)Aが表現できる値の範囲を十進数で表せ。
Aは2の補数を含むので、-4~3が範囲となる。
(2)C=0としたときはS=A+B、C=1のときはC=A-Bとなるように回路全体を動作させたい。3ビット加算回路をgとしたとき、fをgを用いて図示し、そのように表現できる理由を説明せよ。
C=0の場合には加算を、C=1の場合には減算をするので、f==
となる。

(3)回路gを構成し、図示せよ。ただし、図中で全加算器をブラックボックスとして用いてもよい。
全加算器をボックスとして描くと以下のようになる。
