名古屋大学 情報学研究科 情報システム学専攻 2021年8月実施 専門 問3
Author
祭音Myyura
Description
自然数の有限列のうち、含まれている要素が重複しないものを考える。 そのような列 に含まれる要素のうちで 番目に小さい数(小さい方から数えて 番目の数)を求める再帰的アルゴリズム select(図1)について以下の問いに答えよ。 なお、 は有限列 の要素数を表し、 は天井関数を表す。 天井関数は引数として受け取る実数 に対して、 以上の最小の整数を返す。 さらに、有限列 の中位数は の中で 番目に小さい要素とする。
(1) を以下の列、 を とする。
-
(a) このような に対して図 1 の手順の 1. から 5. を順に実行したときに求められる手順の中の列 、自然数 、列 を示せ。なお、列 の要素の並び順についてはアルゴリズムでは言及していないので、解答では並び順を問わない。
-
(b) このような に対して select(,) を実行したときの出力を答えよ。
(2) とし、 を の倍数としたときに列 に含まれ得る要素の数の最小値と最大値それぞれをnを用いた式で表せ。
(3) とする。図 1 の手順において、2. における列 を得る操作、5. における列 を得る操作の最大時間計算量をそれぞれ とする。このとき、select(,)(ただし、 )を実行したときの最大時間計算量をオーダー記法で示せ。解答では でない を用いること。
(4) 以下の整列アルゴリズムを考える。
(a) バブルソート (b) マージソート (c) ヒープソート
(d) クイックソート (e) 挿入ソート (f) バケットソート
(a)〜(f) のうち、入力として与えられる列の要素数を としたときに以下の条件をすべて満たすものを1つ選択せよ。
- 最大時間計算量が である。
- 図 1 のアルゴリズムを利用することで最大時間計算量を に改善できる。
再帰的アルゴリズム select
入力 重複する要素を持たない自然数の有限列 、正整数 (ただし、)
出力 列 に含まれる要素のうちで 番目に小さいもの
手順
- を とする。
- 列 を先頭から順に要素5つずつの列 に分ける。つまり、列 から列 を順に連結すると列 に一致する。さらに、列 それぞれに含まれる要素数は5であり、 が の倍数ではないときに列 の要素数は5に満たない。
- を列 それぞれの中央値からなる列とする。なお、列 の要素の並び順は先頭から順に列 の中央値が並んでいるとする。
- を列 の中央値、すなわち、select(, ) の返り値とする。
- 列 を以下を満たす列とする。
- のときは を返して終了し、そうでないときは次に進む。
- のときは select(, ) の返り値を返して終了し、そうでないときは次に進む。
- select(, ) の返り値を返して終了する。
図 1: 番目に小さい要素を求めるアルゴリズム
题目描述
考虑一个元素互不重复的有限自然数序列 。递归算法 select(S,k) 用于求 中第 小的元素,其中 表示序列长度, 表示不小于 的最小整数;序列的中位数定义为第 小的元素。
算法步骤如下。
- 令 ,从前到后把 分成至多含 5 个元素的组 。
- 组成序列 ,其元素依次为各组的中位数;递归求 的中位数 。
- 将 中小于 的元素组成 ,大于 的元素组成 。
- 若 ,返回 ;若 ,递归返回
select(A,k);否则返回select(B,k-|A|-1)。
完整算法定义见上文。回答下列问题。
-
对
依次执行步骤 1—5,写出序列 、自然数 和序列 ( 中元素顺序不限);并求
select(S,10)的输出。 -
令 且 为 10 的倍数,用 表示序列 可能包含的元素数的最小值与最大值。
-
假定分组以及构造 的操作均为 ,求
select(S,k)的最坏时间复杂度。 -
在冒泡排序、归并排序、堆排序、快速排序、插入排序、桶排序中,选择一种最坏复杂度原为 ,但利用该
select算法选取枢轴后可改进为最坏 的排序算法。
Kai
図1の再帰的アルゴリズム select は「中央値の中央値 (median of medians)」と呼ばれ、クイックセレクトに基づく選択アルゴリズムである。以下では、 なら唯一の要素を直ちに返す基底ケースを用いる。
(1)
(a)
S = [11, 12, 16, 33, 2, 18, 39, 15, 21, 7, 37, 29, 40, 6, 25, 27, 14, 4, 35, 28, 22, 20, 17, 3, 1]
M = [12, 18, 29, 27, 17]
x = 18
A = [11, 12, 16, 2, 15, 7, 6, 14, 4, 17, 3, 1]
(b)
15
(2)
とおくと は偶数で、 は の第 番目の要素である。
より小さい中央値をもつ 組から各3個、 の組から2個が 未満なので、
一方、 より大きい中央値をもつ 組から各3個、 の組から2個が より大きい。したがって、
(3)
が任意の正整数の場合も、各組の要素数は高々5なので、組の中央値の計算と分割には 時間を要する。 個の中央値から を選ぶ。最後の不完全な組と を含む組を除けば、 の各側に少なくとも 個の完全な組がある。その各組は少なくとも3個の要素を対応する側に保証する。したがって、選択を再帰する側の要素数は高々 である。
最悪時間計算量 は、ある定数 により
を満たす。十分大きい では2つの再帰引数の和は 以下となる。小さい の基底ケースを覆い、かつ となるように を選べば、強い帰納法により
を得る。よって であり、分割の と合わせて である。
(4)
(d) クイックソート
線形時間の選択で真の中央値をピボットとすれば、各部分列は高々 要素となるため、クイックソートの最悪計算量は となる。