ある分割統治アルゴリズムは、大きさ の入力を大きさ の つの部分問題に分けて再帰的に解き、分割と統合に の手間をかける。その計算時間 は、 以上の整数 に対して のとき、次の漸化式で与えられる。
を の式で表せ。
アルゴリズムと計算量
扱うテーマ: 漸化式で表された計算時間の解とマスター定理、ソート・探索の比較回数(最悪・平均)、動的計画法で求める最適値(ナップサック・編集距離・最長共通部分列)、貪欲法・分割統治の出力の値、ハッシュ・乱択アルゴリズムの期待値、計算量のオーダーの比較
難易度の目安(大学数学)
- 難易度 1 教科書の例題レベル
- 難易度 2 教科書の演習問題レベル
- 難易度 3 期末試験の応用レベル
- 難易度 4 大学院入試の標準レベル
- 難易度 5 大学院入試の難問・数学コンテストレベル
ある分割統治アルゴリズム(マージソートの型)は、大きさ の入力を大きさ の つの部分問題に分けて再帰的に解き、分割と統合に の手間をかける。その計算時間 は、 以上の整数 に対して のとき、次の漸化式で与えられる。
を の式で求めよ。ある分割統治アルゴリズムは、大きさ の入力を大きさ の つの部分問題に分けて再帰的に解き、分割と統合に の手間をかける。その計算時間 は、 以上の整数 に対して のとき、次の漸化式で与えられる。
を の式で求めよ。互いに異なる 個の実数 を昇順に並べかえる。使える操作は「 つの要素を比べて、どちらが小さいかを知る」比較だけとし、 回の比較の結果は 通りであるとする。このような比較にもとづくソートの手順を決定木で表すと、葉はそれぞれ つの並べ方(順列)に対応し、すべての並べ方が葉として現れる必要がある。この考え方から得られる「最悪の場合の比較回数の下界」 の値を求めよ。
互いに異なる 個の実数 を、比較ソートで昇順に並べかえる。比較ソートとは、 つの要素の大小を比べる操作(結果は「」か「」の 通り)だけを用いて並べ方を決めるアルゴリズムのことである。
どの比較ソートも、最悪の場合には少なくとも 回の比較を行う。これは決定木の考え方から得られる下界である。この下界 の値を求めよ。ただし、 は 以上の最小の整数を表す。
互いに異なる 個の実数 を、比較だけを使って昇順に並べかえる。 回の比較では、ある 個 について「 か」を調べ、「はい」か「いいえ」の答えを得る。どのような比較ソートのアルゴリズムでも、最悪の場合の比較回数は決定木による下界 以上になる。この下界 の値を求めよ。ただし、 は 以上の最小の整数を表す。
を 列に並べる 通りの並べ方から つを等確率で選び、それを配列 とする。 を満たす整数の組 で となるものを「転倒」とよぶ(転倒の個数は、挿入ソートで隣り合う要素を交換する回数に等しいことが知られている)。配列 に含まれる転倒の個数を とするとき、期待値 を求めよ。
互いに異なる 個の実数を、 通りの並べ方のどれもが等確率 で起こるように並べ、配列 を作る。 を満たす整数の組 のうち、 となるものを転倒といい、転倒の個数を とする( は、この配列を挿入ソートで昇順に並べかえるときに行われる隣り合う要素の交換の回数に等しい)。 の期待値 を求めよ。
長さ のビット列 を、各ビット が互いに独立に確率 ずつで または になるようにランダムに作る。このビット列の中でパターン が現れる回数 を
と定める(重なった出現も別々に数える。たとえば の中には が 回現れる)。 の期待値 を求めよ。ある天文台には天体望遠鏡が 台しかなく、 件の観測希望(番号 〜)が出ている。観測希望 は時刻 に始まり時刻 に終わり、半開区間 ( 以上 未満)の間、望遠鏡を使う。時刻は整数で表し、ある観測の終了時刻と別の観測の開始時刻が等しい場合は、両方とも行うことができる。
観測希望 開始時刻 終了時刻 次の貪欲法で、互いに時間が重ならない観測希望を選ぶ。
「観測希望を終了時刻 の早い順に並べ、先頭から順に見ていく。その観測希望の開始時刻が、すでに選んだ観測希望のうち最後に選んだものの終了時刻以上であれば(最初の 件は無条件に)選び、そうでなければ選ばない。」
この貪欲法によって選ばれる観測希望の番号の集合を求めよ。
ある科学フェスティバルで、 つの体験教室 〜 が開かれる。体験教室 は時刻 に始まり時刻 に終わり、半開区間 の時間帯を使う(したがって、ある教室の終了時刻と別の教室の開始時刻が等しければ、両方に参加できる)。
体験教室 開始時刻 終了時刻 ある参加者は、時間帯が重なる つの教室には同時に参加できない。この参加者が次の貪欲法で参加する教室を選ぶ。
「教室を終了時刻の早い順に並べ、先頭から順に見ていく。見ている教室の開始時刻が、直前に選んだ教室の終了時刻以上であれば(最初の教室は無条件に)その教室を選ぶ。そうでなければ選ばない。」
この貪欲法で選ばれる教室の番号の集合を求めよ。
ある人が、テレビ番組を 台のテレビで 本ずつ見ることにした。見たい番組が 本あり、番号 〜 が付いている。番組 の放送時間は、開始時刻 から終了時刻 の直前までの半開区間 である(時刻の単位は時間)。
番組 番組は最初から最後まで見るものとし、放送時間が重なる 本を両方見ることはできない(一方の終了時刻ともう一方の開始時刻が等しい場合は、両方見られる)。
次の貪欲法で見る番組を選ぶ。
- 番組を終了時刻 の小さい順に並べる。
- その順に番組を調べ、その番組の開始時刻が、すでに選んだ番組の終了時刻の最大値以上であれば(まだ 本も選んでいなければ無条件に)その番組を選ぶ。そうでなければ選ばない。
この貪欲法で選ばれる番組の番号の集合を求めよ。
円、 円、 円の硬貨がそれぞれ十分な枚数あるとする。 以上の整数 に対し、 円をちょうど支払うときに使う硬貨の枚数の最小値を とする( とする)。 は、 のとき漸化式
を満たす。この漸化式を用いて を求めよ。円、 円、 円の硬貨がそれぞれ十分な枚数あるとする。 以上の整数 に対し、 円をちょうど支払うときの硬貨の枚数の最小値を とする( とする)。 は、 のとき漸化式
を満たす。この漸化式を用いて の表を順に埋め、 を求めよ。円、 円、 円の硬貨がそれぞれ十分な枚数あるとする。 以上の整数 に対し、 円をちょうど支払うときの硬貨の枚数の最小値を とする( とする)。 のとき、 は次の漸化式を満たす。
この漸化式を用いて の表を順に埋め、 を求めよ。以上の整数 に対して とする。ある分割統治アルゴリズムの計算時間 が、次の漸化式で与えられている。
マスター定理を用いて となる を求めよ。ただし、答えは の中身の式(例: )を、定数倍を除いた最も簡単な形で答えよ。対数は自然対数 を用いて表すこと。ある分割統治アルゴリズムは、大きさ の問題を大きさ の部分問題 個に分け、分割と統合に の時間をかける。 以上の整数 を用いて と表される に対して、計算時間 は次の漸化式で与えられる。 となる関数 を求め、 の中身の式 を の式で答えよ。ただし、 は係数を とした最も簡単な形で答え、対数が現れる場合は自然対数 を用いて書くこと。
ある分割統治アルゴリズムは、サイズ の問題をサイズ の部分問題 個に分けて再帰的に解き、分割と結果の統合に の時間をかける。その計算時間 は、( は 以上の整数)のとき次の漸化式で与えられる。
マスター定理を用いて となる を求めよ。ただし は の中身の式として、係数 の単項式(例: , )で答えること。互いに異なる 個の実数を並べた配列 を、次のバブルソートで昇順に並べかえる。
の順に、 の順で と を比べ、 ならば と を交換する。
最初の並びは、 個の数の 通りの並べ方のどれもが同様に確からしいとする。このソートで行われる交換の回数の期待値を求めよ。
を 列に並べた配列 がある。並び方は 通りのどれも同様に確からしいとする。この配列を、次のバブルソートで昇順に並べかえる。
の順に、各 について の順に次の操作を行う: ならば と を入れかえ(交換し)、そうでなければ何もしない。
このバブルソートで行われる交換の回数の期待値を求めよ。
互いに異なる 個の実数を並べた配列 を、次のバブルソートで昇順に並べかえる。
の順に、各 について の順に次の操作を行う: ならば と を交換する。
入力の並びは 通りの並べ方が同様に確からしいとする。このとき、ソートが終わるまでに行われる交換の回数の期待値を求めよ。
バケット数 のチェイン法ハッシュ表に、互いに異なる 個のキーを挿入する。各キーのハッシュ値は 個のバケットのどれかに等確率 で定まり、キーどうしのハッシュ値は互いに独立であるとする。 個のキーから選んだ 個のキーの組(順序は考えない)のうち、 個が同じバケットに入る組を「衝突する組」と呼ぶ。衝突する組の個数の期待値を求めよ。
バケット数 のチェイン法ハッシュ表が最初は空である。この表に、互いに異なる 個のキーを挿入する。各キーのハッシュ値は 個のバケットのどれかに等確率 で定まり、キーどうしのハッシュ値は互いに独立であるとする。 個のキーをすべて挿入し終えたとき、キーを 個以上含むバケットの個数の期待値を求めよ。
スロット番号が の 個のスロットからなるハッシュ表を、オープンアドレス法(線形探査)で使う。はじめはすべてのスロットが空である。0 以上の整数のキー を挿入するときは、 の順にスロット
を調べ、最初に見つかった空のスロットに を格納する。1 回の挿入で調べたスロットの個数(格納先の空のスロットも含める)を、その挿入の「探査回数」と呼ぶ。キー
をこの順に挿入するとき、 回の挿入の探査回数の合計を求めよ。互いに異なる 個の数が入った配列を、次の乱択クイックソートで小さい順に並べる。
- 並べる数が 個または 個のときは、何もせずに終わる(比較は行わない)。
- 並べる数が 個()のときは、その 個の中からピボットを 個、等確率 で選ぶ。ピボットを残りの 個の数とそれぞれ 回ずつ比較し、ピボットより小さい数の組と大きい数の組に分ける。そのあと、それぞれの組に同じ手順を行う。
ピボットの選択は毎回ほかの選択と独立に行うものとする。数どうしの比較は上の「ピボットと残りの数との比較」だけで行われるとき、 個の数を並べ終えるまでに行われる比較の回数の期待値を求めよ。
互いに異なる 個の数が入った配列を、次の乱択クイックソートで小さい順に並べる。
- 並べる対象の数が 個または 個のときは、何もせずに終わる(比較は行わない)。
- 対象の数が 個()のときは、その 個の中からピボットを 個、等しい確率 で選ぶ。ピボットを残りの 個のそれぞれと 回ずつ比較し(比較は 回)、ピボットより小さい数の組と大きい数の組に分ける。それぞれの組に対して、同じ手順を繰り返す。
ピボットの選択はすべて互いに独立に行われるものとする。このとき、 個の数を並べ終えるまでに行われる比較の回数の期待値を求めよ。
互いに異なる 個の数が入った配列を、次の乱択クイックソートで小さい順に並べる。
- 並べる対象の個数が 個以下なら、何もしないで終わる。
- 対象が 個 のときは、その 個の中からピボットを 個、等確率 で選ぶ。ピボットを残りの 個のそれぞれと 回ずつ比較して、ピボットより小さい数の集まりと大きい数の集まりに分ける(比較は 回)。そのあと、2 つの集まりのそれぞれに同じ手順を行う。
- ピボットの選び方は、毎回それまでの選び方と独立とする。比較回数として数えるのは、ピボットとほかの数との比較だけとする。
このアルゴリズムが終わるまでに行う比較回数の期待値を求めよ。
円、 円、 円の硬貨がそれぞれ十分な枚数あるとする。正の整数 に対し、 円をちょうど支払う硬貨の組み合わせのうち、枚数が最小のものの枚数を とする。
また、次の貪欲法で 円を支払ったときの硬貨の枚数を とする。
(貪欲法)残りの金額が になるまで、残りの金額以下の硬貨のうち最も額面の大きいものを 枚使う、という操作をくり返す。
を満たす整数 のうち、 となる をすべて求めよ。
円、 円、 円の硬貨がそれぞれ十分な枚数あるとする。正の整数 に対し、 円をちょうど支払う硬貨の組み合わせのうち、枚数が最小のものの枚数を とする。また、「残りの金額を超えない硬貨のうち最も額の大きいものを 枚使う」ことを残りが 円になるまでくり返す貪欲法で 円を支払ったときの硬貨の枚数を とする。 を満たす整数 のうち、 となるものをすべて求めよ。
円、 円、 円の硬貨がそれぞれ十分な枚数あるとする。正の整数 に対し、 円をちょうど支払う硬貨の組み合わせのうち、枚数が最小のものの枚数を とする。また、「残りの金額を超えない硬貨のうち最も額の大きいものを 枚使う」ことを残りが 円になるまでくり返す貪欲法で 円を支払ったときの枚数を とする。
を満たす整数 のうち、 となるものをすべて求めよ。
次の 個の品物から、重さの合計が 以下になるようにいくつか選ぶ。各品物は選ぶか選ばないかのどちらかで、同じ品物を 個以上選ぶことはできない。
品物 A B C D 重さ 価値 品物を A, B, C, D の順に 番目とし、 番目の品物の重さを 、価値を とする。 を「 番目から 番目までの品物だけを使い、重さの合計が 以下になるように選んだときの価値の合計の最大値」とすると、 であり、 のとき
が成り立つ。この表を について埋め、選んだ品物の価値の合計の最大値 を求めよ。次の 個の品物から、重さの合計が 以下になるようにいくつかを選びます。各品物は選ぶか選ばないかのどちらかで、同じ品物を 個以上選ぶことはできません。
品物 A B C D 重さ 価値 品物を A, B, C, D の順に 番目とし、 番目の品物の重さを 、価値を とします。 を「 番目から 番目までの品物だけを使い、重さの合計が 以下になるように選んだときの価値の合計の最大値」と定めます()。漸化式
(ただし のときは )を用いて表を埋め、選んだ品物の価値の合計の最大値 を求めてください。次の 個の品物から、重さの合計が 以下になるようにいくつか選びます。各品物は選ぶか選ばないかのどちらかで、同じ品物を 個以上選ぶことはできません。
品物 A B C D 重さ 価値 品物を A, B, C, D の順に品物 とし、品物 の重さを 、価値を とします。 を「品物 から までの中から、重さの合計が 以下になるように選んだときの価値の合計の最大値」と定めます()。
を使って表を埋め、重さの合計が 以下のときの価値の合計の最大値 を求めてください。
英大文字からなる文字列に対して、次の 種類の操作を考える。
- 挿入: 好きな位置に 文字を挿入する(コスト )
- 削除: 文字を削除する(コスト )
- 置換: 文字を別の 文字に置き換える(コスト )
これらの操作をくり返して文字列 を文字列 に変換するとき、かかるコストの合計の最小値(重み付き編集距離)を求めよ。
文字 からなる文字列に対して、次の 種類の操作を考える。
- 挿入: 好きな位置に 文字を挿入する(コスト )
- 削除: 文字を削除する(コスト )
- 置換: 文字を別の 文字に置き換える(コスト )
これらの操作をくり返して、文字列 を文字列 に変換する。かかるコストの合計の最小値(重み付き編集距離)を求めよ。
文字 からなる文字列(DNA 配列)に対して、次の 種類の操作を考える。
- 削除: 文字を削除する(コスト )
- 挿入: 好きな位置に 文字を挿入する(コスト )
- 置換: 文字を別の 文字に置き換える(コスト )
操作をくり返して文字列 を文字列 に変換するとき、使った操作のコストの合計の最小値を、 から への重み付き編集距離という。
、 のとき、 から への重み付き編集距離を求めよ。
文字列 から 個以上の文字を取り除き、残った文字を元の順に並べて得られる文字列を の部分列という(取り除く文字は連続していなくてよい)。 つの文字列の両方の部分列である文字列を共通部分列といい、共通部分列のうち長さが最大のものを最長共通部分列という。
つの DNA の塩基配列を表す文字列
を比べる。 の先頭から 文字目を 、 の先頭から 文字目を とし、 の最初の 文字と の最初の 文字の最長共通部分列の長さを とする()。 は と、 に対する漸化式
で求められる。この表を埋めて、 と の最長共通部分列の長さ を求めよ。文字列 から 個以上の文字を取り除き、残った文字を元の順に並べて得られる文字列を の部分列という(取り除く文字は連続していなくてよい)。 つの文字列の両方の部分列であるものを共通部分列といい、共通部分列のうち長さが最大のものを最長共通部分列という。
つの DNA 塩基配列を表す文字列
の最長共通部分列の長さを求めよ。文字列 から 個以上の文字を取り除き、残った文字を元の順序のまま並べた文字列を、 の部分列という。 つの文字列の両方の部分列になっている文字列を共通部分列という。
DNA の塩基配列を表す つの文字列
について、 の先頭 文字と の先頭 文字の最長共通部分列の長さを とする(。)。 の 文字目を 、 の 文字目を とすると、 のとき
が成り立つ。この漸化式で表を埋めて、 と の最長共通部分列の長さ を求めよ。を 以上の整数とし、 の関数として次の つの計算時間を考える( は自然対数)。
これらは、ある並べ方 について
を満たす。添字の組 を求めよ。ここで は を表す。ある分割統治アルゴリズムは、大きさ の入力を大きさ の 3 つの部分問題に分けて再帰的に解き、分割と統合に の手間をかける。その計算時間 は、0 以上の整数 に対して のとき
を満たすとする。0 以上の整数 に対して、 を の式で表せ。つの会議室を使いたい 件の予約に番号 〜 が付いており、それぞれの利用時間は次の半開区間 (開始時刻 から終了時刻 の直前まで)である。
予約の番号 開始 終了 利用時間が重ならない予約をできるだけ多く選ぶために、次の貪欲法を使う(ある予約の終了時刻と別の予約の開始時刻が等しい場合は重ならないとみなす)。
1. 予約を終了時刻 の小さい順に並べる。
2. 直前に選んだ予約の終了時刻を とする(最初は )。並べた順に予約を 1 つずつ見て、開始時刻 が を満たせばその予約を選び、 をその予約の終了時刻に更新する。満たさなければ選ばない。この貪欲法によって選ばれる予約の番号の集合を求めよ。
英大文字からなる文字列に対して、次の 種類の操作を考える。
- 挿入: 好きな位置に 文字を挿入する
- 削除: 文字を削除する
- 置換: 文字を別の 文字に置き換える
どの操作も 回につきコスト とする。文字列 を文字列 に変えるのに必要な操作の回数の最小値を、 と の編集距離という。
文字列 と の編集距離を求めよ。
つの会議室を使いたい 個の予約 A〜J がある。予約 X の開始時刻を 、終了時刻を とし、予約 X は時間帯 ( 以上 未満)に会議室を使う。
予約 A B C D E F G H I J つの予約 X, Y は、 または のとき、同時に採用できるものとする。次の貪欲法で予約を採用する。
1. 予約を終了時刻 の小さい順に並べる。
2. その順に予約を つずつ調べ、すでに採用した予約のどれとも同時に採用できるならば採用し、そうでなければ採用しない。この貪欲法で採用される予約をすべて選び、その記号をアルファベット順に「,」で区切って答えよ(解答例:A, D, G)。
ある分割統治アルゴリズムは、大きさ の入力を大きさ の つの部分問題に分けて再帰的に解き、分割と統合に の手間をかける。その計算時間 は、 以上の整数 に対して のとき
を満たす。( は 以上の整数)のときの を、 の式で表せ。対数を使う場合は を用いてよい。種類の文字 からなる長さ の文字列があり、各文字の出現回数は次のとおりである。
文字 A B C D E F 出現回数 この文字列を、次の貪欲法(ハフマン符号の構成法)で作った 進符号で符号化する。
- 各文字を、出現回数を重みとする 頂点だけの木とする。
- 木が 本以上ある間、重みが最も小さい木と 番目に小さい木を取り出し、それらを左右の子とする新しい根を作って 本の木にまとめる。新しい木の重みは つの木の重みの和とする(重みが等しい木が複数あるときは、どれを選んでもよい)。
- 最後に残った木で、根から各文字の葉までの道の各辺に、左の子へ進む辺は 、右の子へ進む辺は を割り当て、その道に沿って並べた の列をその文字の符号語とする。
文字列の各文字をその符号語に置き換えて並べたとき、得られる の列の長さ(ビット数)を求めよ。
昇順に並んだ互いに異なる 個の数の配列 から、値 を次の二分探索で探す。ただし、 は のどれかと必ず等しいとする。
- はじめに , とする。
- とし、 と を比較する。この比較は 回で「」「」「」のどれであるかがわかるものとし、比較 回と数える。
- ならば探索を終える。 ならば とし、 ならば として、前の手順に戻る。
が のそれぞれと等しい確率がどれも であるとき、探索を終えるまでの比較回数の期待値を求めよ。
ある会議室を使いたい 件の予約希望があり、予約 ()は時刻 に始まり時刻 に終わる(区間 を使う)。
予約 開始 終了 つの予約 は、 または のとき両立する(同時に採用できる)とする。次の貪欲法で、互いに両立する予約を選ぶ。
- 予約を終了時刻 の小さい順に並べる。
- その順に予約を つずつ調べ、それまでに選んだどの予約とも両立するならば選び、そうでなければ選ばない。
この貪欲法で選ばれる予約の番号 の集合を求めよ。
行列どうしの積を計算するある分割統治アルゴリズムは、 が 以上の のべきのとき、各行列を の つのブロックに分け、 行列どうしの積を 回だけ再帰的に計算し、そのほかにブロックどうしの和と差の計算に の手間をかける。このアルゴリズムの計算時間 は、 以上の整数 に対して のとき
を満たす。となる関数 を、係数を含まない のべきの形で求めよ(答えは の中身の式 で答えること)。
相異なる 個の実数を格納した配列 がある。 の要素のうち、小さい方から数えた順位が 以上 以下であるものを「良い要素」とよぶ。良い要素を つ見つけるために、次の乱択アルゴリズムを使う。
- 以上 以下の整数 を等確率 で選ぶ。
- を、それ以外の 個の要素 のそれぞれと 回ずつ比較して、 より小さい要素の個数を数え、 の順位を求める。
- が良い要素であればアルゴリズムを終了し、そうでなければ最初に戻って を選び直し、同じことをくり返す。
ここで、各回の の選び方は互いに独立であり、以前に選んだ位置が再び選ばれることもある。また、各回の比較はその回ごとに改めて 回行う(以前の比較結果は使わない)。アルゴリズムが終了するまでに行う要素どうしの比較の回数の期待値を求めよ。
正の整数 に対して
とおく( は自然対数)。ここで、正の整数上で定義された非負の値をとる関数 について とは、正の定数 と正の整数 が存在して、 を満たすすべての整数 に対して が成り立つことと定める。このとき、 であることを証明せよ。
台の機械で 個の仕事 をすべて処理する。仕事 には処理時間 と重み が次のように定まっている。
仕事 処理時間 重み 機械は時刻 から使うことができ、どの仕事も時刻 の時点ですでにそろっていて、いつでも処理を始められる(仕事ごとの到着時刻や締め切りの制約はない)。機械は同時に つの仕事しか処理できない。また、仕事を途中で中断することはできない(仕事 を始めたら、 だけ時間がたって終わるまで処理を続ける)。仕事 の処理が終わる時刻を とする。
仕事を処理する順序(および開始時刻)をうまく選んで
をできるだけ小さくしたい。 の最小値を求めよ。英大文字からなる文字列に対して、次の 種類の操作を考える。
- 挿入: 好きな位置に 文字を挿入する(コスト )
- 削除: 文字を削除する(コスト )
- 置換: 文字を別の 文字に置き換える(コスト )
操作を何回か行って文字列 を文字列 に変えるとき、使った操作のコストの合計の最小値を と書く。
のとき、 を求めよ。
ある分割統治アルゴリズムは、大きさ の入力を大きさ の つの部分問題に分けて再帰的に解く。分割と統合には の手間をかける。入力の大きさは のべき ( は 以上の整数)に限るものとし、計算時間 は次の漸化式で定まるとする。
のときの を の式で表せ。対数を使う場合は、底を明示するか自然対数 を用いて表すこと。互いに異なる 個の数を並べた配列 を、次の挿入ソートで昇順に並べかえる。
の順に、次の操作を行う。 とし、 から始めて、 である間「 と を比較し、 ならば を に移して を 減らす。 ならばそこで止める」をくり返す。止まったとき(または になったとき)、 とする。
ここで、数どうしの比較( と の比較)だけを数え、 かどうかの判定は数えない。最初の配列が 個の数の 通りの並べ方のどれであるかが同様に確からしいとき、比較回数の期待値を求めよ。
バケット数 のチェイン法ハッシュ表に、互いに異なる 個のキーを挿入する。各キーのハッシュ値は 個のバケットのどれかに等確率 で定まり、キーどうしのハッシュ値は互いに独立であるとする。 個すべてを挿入し終えたとき、キーを 個以上含むバケットの個数の期待値を求めよ。
次の 個の品物から、重さの合計が 以下になるようにいくつか選ぶ(各品物は選ぶか選ばないかのどちらかで、同じ品物を 個以上選ぶことはできない)。
品物 A B C D E F 重さ 価値 選んだ品物の価値の合計の最大値を求めよ。
互いに異なる 個の数が入った配列から、小さい方から 番目の数(中央値)を、次の乱択選択アルゴリズム(乱択クイックセレクト)で求める。
- 現在の候補の集合を とし、最初は を 個の数全体とする。また、求めたい順位を とする。
- の要素が 個だけなら、それを答えとして終了する(比較は行わない)。
- そうでなければ、 の要素から つを等確率で選んでピボット とし、 を のほかのすべての要素と 回ずつ比較して、 より小さい要素の集合 と大きい要素の集合 に分ける(このとき比較は 回行われる)。
- なら を答えとして終了する。
- なら、 を に置き換えて( はそのまま)最初の手順に戻る。
- なら、 を に、 を に置き換えて最初の手順に戻る。
ピボットの選択は毎回独立に行われるものとする。このアルゴリズムが終了するまでに行う比較の回数の期待値を求めよ。
互いに異なる 個の実数からなる集合を、次の乱択クイックソートで昇順に並べかえる。
- 大きさ 以上の集合 を処理するときは、 の要素から 個をピボット として等確率で選ぶ。 を のほかのすべての要素とそれぞれちょうど 回ずつ比較し、 を より小さい要素の集合 と より大きい要素の集合 に分ける。そのあと、 と をそれぞれ同じ方法で処理する。
- 大きさ または の集合を処理するときは、何もしない(比較を行わない)。
ピボットの選択はそれぞれ独立に行うものとする。最初の集合 個全体を処理し始めてから終わるまでに行われる比較のうち、小さい方から 番目の要素がかかわる比較の回数の期待値を求めよ。
番号 の 個のスロットからなるハッシュ表が最初は空である。この表に、互いに異なる 個のキーを 個ずつ順に、次の線形探査法(オープンアドレス法)で挿入する。
- キーのハッシュ値を とし、スロット の順に(番号は を法として考え、スロット の次はスロット とする)調べ、最初に見つかった空のスロットにそのキーを入れる。
- 個のスロットを調べることを探査 回と数える。キーを入れた空のスロットを調べることも 回に数える(たとえば、スロット が空ならば探査は 回)。
各キーのハッシュ値は のどれかに等確率 で定まり、キーどうしのハッシュ値は互いに独立であるとする。 個のキーを挿入し終えるまでの探査回数の合計の期待値を求めよ。
ある分割統治アルゴリズムは、大きさ の入力を大きさ の つの部分問題に分けて再帰的に解き、分割と統合に の手間をかける。入力の大きさは のべき ( は 以上の整数)に限って考え、その計算時間 は
をみたすとする。 以上の整数 に対して、 を の式で表せ。文字列 から 個以上の文字を取り除き、残った文字を元の順に並べて得られる文字列を、 の部分列という(取り除く文字は連続していなくてよい)。
つの文字列
を考える。 と がどちらも の部分列となるような文字列 ( と の共通超列)のうち、長さが最小のものの長さを求めよ。を 以上の整数とする。相異なる 個の実数からなる列 が与えられたとき、 が単調であるかどうか、すなわち「 または 」が成り立つかどうかを判定し、「はい」または「いいえ」を出力する問題を考える。
判定を行うアルゴリズムは決定的であり、入力の値には「2 つの添字 を指定して かどうかを調べる」比較によってのみアクセスできるものとする。どの比較を次に行うか、いつ停止して何を出力するかは、それまでの比較の結果だけから決まる。
この判定を常に正しく行う任意のアルゴリズムに対し、比較を少なくとも 回行う入力が存在すること、すなわち最悪の場合の比較回数が 以上であることを証明せよ。
を正の整数とし、 に対して実数 と閉区間 が与えられている(区間の長さ は区間ごとに異なってよい)。実数の有限集合 が、すべての について を満たすとき、 を「刺し集合」と呼ぶ。刺し集合の要素の個数の最小値を とする。
次の貪欲アルゴリズムを考える。
- , , とする。
- である間、次を繰り返す: を 増やし、 の中で が最小となる添字 を 1 つ選んで とし(最小となる添字が複数あるときはそのうち最小の添字とする)、 として に を加え、 から を満たす添字 をすべて取り除く。
- となったときの の値を として、 を出力する。このアルゴリズムは必ず停止し、出力 は刺し集合であり、 の要素の個数は で、 が成り立つことを証明せよ。
互いに異なる 個の実数を並べた配列 の最大値と最小値を、次のアルゴリズムで同時に求める。
- 最初に , とする。
- の順に、次の操作を行う。
- まず と を比較する。 ならば とし、この についての操作を終える( とは比較しない)。
- ならば、続けて と を比較する。 ならば とする。
配列の並び方は 通りのどれも同様に確からしいとする。このアルゴリズムで行われる要素どうしの比較( と の比較、 と の比較)の回数の期待値を求めよ。
ある分割統治アルゴリズムの計算時間 は、 以上の整数 に対して のとき、次の漸化式で与えられる。
の形の に限って を考えるとき、 となる関数 を求めよ。答えは の中身の式(定数倍を除いた最も簡単な形。例:)で答えよ。番号 の 個のセルからなる、線形探査法(オープンアドレス法)のハッシュ表がある。最初はすべてのセルが空である。この表に、互いに異なる 個のキーを 個ずつ順に挿入する(削除は行わない)。
キー を挿入するときは、ハッシュ値 から始めて、セル (番号は を法として考え、セル の次はセル とする)の順に調べ、最初に見つかった空のセルにキーを格納する。調べたセルの個数(キーを格納した空のセルも 個と数える)を、その挿入の探査回数とよぶ。
各キーのハッシュ値は のどれかに等確率 で定まり、キーどうしのハッシュ値は互いに独立であるとする。 個のキーの挿入における探査回数の合計の期待値を求めよ。
を 以上の整数とし、 の関数として次の 個の計算時間を考える( は自然対数、 は底 の対数)。
正の値をとる関数 について、 が成り立つことを と書く。
から までの番号を並べかえた組 で
がすべて成り立つものがただ つ存在する。この組 を求めよ。種類の文字 からなる長さ の文字列があり、各文字の出現回数は次の表のとおりである。
文字 A B C D E F G H 出現回数 各文字に、 種類の記号 からなる長さ 以上の符号語を つずつ割り当てる。ただし、異なる文字の符号語は異なり、どの符号語も他の符号語の先頭部分(接頭語)になっていない(語頭符号である)ものとする。文字列の各文字をその符号語に置きかえてつなげたとき、得られる記号列の長さ(記号の個数)の最小値を求めよ。
文字列 から 個以上の文字を取り除き、残った文字を順序を変えずに並べた文字列を の部分列という。 つの文字列 の両方の部分列である文字列を共通部分列といい、共通部分列のうち長さが最大のものを最長共通部分列という。
とする。 と の最長共通部分列は、文字列として何通りあるか求めよ。ただし、取り出す文字の位置が異なっても、文字列として同じものは 通りと数える。
互いに異なる 個の実数を並べた配列を、次のマージソートで昇順に並べかえる。
- 長さ の列はそのまま返す。
- 長さ の列は、前半の 個と後半の残り 個に分け、それぞれを再帰的に昇順に並べかえてから、次の手続きで併合する。
- 併合の手続き: 昇順に並んだ つの列 が与えられたとき、どちらも空でない間は、 の先頭と の先頭を 回比較し、小さい方を取り出して出力の末尾に加える。一方の列が空になったら、もう一方の列に残っている要素を、比較を行わずにそのまま順に出力の末尾に加える。
入力の 個の数の並び方は 通りすべてが等確率で現れるとする。このマージソート全体で行われる要素どうしの比較回数の期待値を求めよ。
バケット数 のチェイン法ハッシュ表が最初は空である。互いに異なるキーを 個ずつ順に挿入していき、すでに 個以上のキーが入っているバケットにキーが挿入された時点(最初の衝突が起きた時点)で挿入をやめる。各キーのハッシュ値は 個のバケットのそれぞれに確率 で、ほかのキーとは独立に定まるものとする。挿入をやめるまでに挿入したキーの個数を とする(衝突を起こしたキーも数える)。 の期待値 を求めよ。
文字列 に次の 種類の操作をくり返し行って、文字列 に変換することを考える。
- 挿入: 任意の位置に 文字を挿入する。コストは
- 削除: 文字を削除する。コストは
- 置換: 文字を別の 文字に置き換える。コストは
操作のコストの合計の最小値を、 から への重み付き編集距離という。
のとき、 から への重み付き編集距離を求めよ。円、 円、 円の硬貨がそれぞれ十分な枚数あるとする。正の整数 に対し、 円をちょうど支払う硬貨の組み合わせのうち枚数が最小のものの枚数を とする。また、次の貪欲法で 円を支払ったときの枚数を とする。
貪欲法:残りの金額が になるまで、残りの金額以下で額面が最大の硬貨を 枚使う。
を満たす整数 のうち、 となるものの個数を求めよ。
の実数 の関数として、次の つを考える( は自然対数)。
関数 について、 のとき と書く。添字 を並べかえた で
をすべて満たすものはただ つある。組 を求めよ。ある再帰アルゴリズムは、大きさ の入力を大きさ の つの部分問題に分けて再帰的に解き、分割と統合に の手間をかける。その計算時間 は、 以上の整数 に対して の形の について
で定められている。以上の整数 に対し、 を の式で表せ。
互いに異なる 個の数を並べた配列を、次のマージソートで昇順に並べかえる。
- 長さ の配列はそのまま返す。
- 長さ ( は正の整数)の配列は、前半 個と後半 個に分け、それぞれを再帰的にこのマージソートで並べかえたあと、次の「マージ」で つの昇順の列にまとめる。
- マージ: 昇順に並んだ 2 つの列の先頭どうしを 回比較し、小さい方を取り出して出力の末尾に加える。これを一方の列が空になるまで繰り返し、空になったら、もう一方の列に残っている数を比較せずにそのまま出力の末尾に加える。
入力の 個の数の並び方は 通りすべてが等確率で現れるものとする。このとき、ソート全体で行われる数どうしの比較回数の期待値を求めよ。
を正の整数とする。文字列 からいくつかの文字を取り除き( 個でもよい)、残りの文字を順序を変えずに並べた文字列を の部分列という。 つの文字列の両方の部分列であるものを共通部分列といい、共通部分列のうち長さが最大のものを最長共通部分列という。
文字 からなる次の つの文字列を考える。
(, の長さはどちらも )と の最長共通部分列は、文字列として何通りあるか。 の式で表せ(異なる位置から取り出しても同じ文字列になるものは 通りと数える)。
番号 の 個のビットからなるブルームフィルタを考える。最初はすべてのビットが である。このフィルタは 個のハッシュ関数 を使い、次のように動作する。
- 要素 を挿入するときは、ビット とビット を にする( のときは、そのビット 個だけが になる)。
- 要素 を問い合わせるときは、ビット とビット がともに であれば「含まれる」と答え、そうでなければ「含まれない」と答える。
互いに異なる 個の要素 をこの順に挿入したあと、 のどちらとも異なる要素 を問い合わせる。ここで、 個の値 は互いに独立で、それぞれ のどれかに等確率 で定まるとする。
について誤って「含まれる」と答える確率(偽陽性の確率)を求めよ。
互いに異なる 個の実数を並べた配列 から、最大値と最小値の両方を次のアルゴリズムで求める。
- 最初に 、 とする。
- の順に、次の操作を行う。
- まず と を比較する。 であれば とし、この についての操作を終える。
- そうでなければ、 と を比較し、 であれば とする。
個の数の並び方は 通りすべてが等確率 で起こるとする。このアルゴリズムで行われる要素どうしの比較の回数の期待値を求めよ。
を素数、 を正の整数とし、 を を法とする剰余体とする。キーの集合を とし、 に対してハッシュ関数 を
で定める。ただし である。個の相異なるキーからなる集合 を固定し、 を の 個の元から一様ランダムに選ぶ。各 について、バケット に入るキーの個数を
とおく。このとき
が成り立つことを証明せよ。有限集合 をアルファベットとし、 の元を並べた有限列を文字列という。文字列 の部分列とは、添字 を選んで得られる文字列 ( のときは空列)のことである。
長さ の文字列 と長さ の文字列 ( は 0 以上の整数)に対し、
- を、 と の共通部分列の長さの最大値(最長共通部分列の長さ)、
- を、「文字列の任意の位置にある 1 文字を削除する」操作と「文字列の任意の位置に の 1 文字を挿入する」操作だけを繰り返して を に変換するときの、操作回数の最小値と定める(置換の操作は許さない)。このとき
が成り立つことを証明せよ。
条件に合う問題はありません。