跳到主要内容

広島大学 先進理工系科学研究科 情報科学プログラム 2021年8月実施 専門科目II 問題2

Author

祭音Myyura

Description

集合の中で ii 番目に小さい要素を探すアルゴリズムを Select(A, p, r, i) に示す。 Select(A, p, r, i) は配列 AA の部分配列 A[p]A[p] から A[r]A[r] のうち ii 番目に小さい要素を返す。 ただし、集合の要素は配列 AA に整列せずに置かれているとする。 また、配列 AA の先頭要素を A[1]A[1] で表す。

(1) 配列 A={35,19,3,12,6,20,5,30,34,17}A = \{35, 19, 3, 12, 6, 20, 5, 30, 34, 17\} に対して Select(A, 1, 10, 3) が返す値を書け。

(2) (1) の配列 AA に対して Select(A, 1, 10, 3) を呼び出すと、Select が再帰的に呼び出される。 最初の呼び出しを含めて、Select の呼出しごとのパラメーター A,p,r,iA, p, r, i の値を書け。 ただし、配列 AA についてはすべての要素を書くこと。

(3) 空欄   1  \boxed{\ \ 1\ \ },   2  \boxed{\ \ 2\ \ },   3  \boxed{\ \ 3\ \ } を適切に埋める。

(4) 昇順に整列された nn 要素の配列 AA をパラメーターにして Select(A, 1, n, 1) が呼び出されたとき、Partition の 4 行目の比較が行われる回数を数えよ。

(5) nn 個の要素の集合に対する Select の期待計算時間をビッグオー記法で示し、その理由を簡潔に説明せよ。


Select(A, p, r, i) is an algorithm to find the ii-th smallest element in a set. Select(A, p, r, i) returns the ii-th smallest element in the subarray A[p]A[p] to A[r]A[r] of array AA. We assume that the set is not sorted and resides in array AA. The first element of array AA is represented by A[1]A[1].

(1) For array A={35,19,3,12,6,20,5,30,34,17}A = \{35, 19, 3, 12, 6, 20, 5, 30, 34, 17\}, show the return value of Select(A, 1, 10, 3).

(2) When we call Select(A, 1, 10, 3) for array AA shown in (1), Select is called recursively Describe the values of parameters A,p,r,iA, p, r, i for each recursive call of Select, including the first call. All elements of array AA should be described.

(3) Fill blanks   1  \boxed{\ \ 1\ \ },   2  \boxed{\ \ 2\ \ }, and   3  \boxed{\ \ 3\ \ }, appropriately.

(4) Count the number of comparisons on the 4th line of Partition, when Select(A, 1, n, 1) is called with sorted array AA of nn elements in ascending order.

(5) Show the expected time complexity of Select for a set of nn elements, using big-OO notation. Explain the reason of the complexity, briefly.

题目描述

Select(A,p,r,i) 用于在未排序数组 AA 的子数组 A[p]A[p]A[r]A[r] 中找出第 ii 小的元素并返回;数组首元素记为 A[1]A[1]。算法及其调用的 Partition 见题中图示。

  1. A={35,19,3,12,6,20,5,30,34,17},A=\{35,19,3,12,6,20,5,30,34,17\},

    写出 Select(A,1,10,3) 的返回值。

  2. 对第 1 问的数组调用 Select(A,1,10,3) 时会产生递归调用。列出包括首次调用在内的每次 Select 调用中参数 A,p,r,iA,p,r,i 的值;其中数组 AA 必须写出全部元素。

  3. 适当填写算法中的空白 1\boxed{1}2\boxed{2}3\boxed{3}

  4. AA 是已按升序排列的 nn 元素数组,调用 Select(A,1,n,1) 时,计算 Partition 第 4 行所执行的比较总次数。

  5. 用大 OO 记号写出 Selectnn 元素集合上的期望运行时间,并简要说明理由。

考点

  • 快速选择:跟踪分区后的数组与递归参数,补全秩的更新规则,并分析特定枢轴序列下的比较次数及期望复杂度。

Kai

(1)

66

(2)

A=[35,19,3,12,6,20,5,30,34,17],p=1,r=10,i=3A = [35, 19, 3, 12, 6, 20, 5, 30, 34, 17], p = 1, r = 10, i = 3

A=[3,12,6,5,17,20,19,30,34,35],p=1,r=4,i=3A = [3, 12, 6, 5, 17, 20, 19, 30, 34, 35], p = 1, r = 4, i = 3

A=[3,5,6,12,17,20,19,30,34,35],p=3,r=4,i=1A = [3, 5, 6, 12, 17, 20, 19, 30, 34, 35], p = 3, r = 4, i = 1

A=[3,5,6,12,17,20,19,30,34,35],p=3,r=3,i=1A = [3, 5, 6, 12, 17, 20, 19, 30, 34, 35], p = 3, r = 3, i = 1

(3)

  • blank   1  \boxed{\ \ 1\ \ }: i<ki < k
  • blank   2  \boxed{\ \ 2\ \ }: ii
  • blank   3  \boxed{\ \ 3\ \ }: iki - k

(4)

When array AA is in ascending order, the function Partition(A, p, r) will always return rr since all elements in A[pr]A[p \ldots r] are less than x=A[r]x = A[r].

Hence the number of comparisions on the 4th line of Partition is

(n1)+(n2)++1=n(n1)2(n - 1) + (n - 2) + \cdots + 1 = \frac{n(n-1)}{2}

(5)

Let T(n)T(n) denote the expected time complexity of Select for a set of bb elements. Then,

T(n)=1ni=1nT(i)+O(n)T(n) = \frac{1}{n} \sum_{i=1}^n T(i) + O(n)
T(n1)=1ni=1n1T(i)+O(n1)T(n-1) = \frac{1}{n} \sum_{i=1}^{n-1} T(i) + O(n-1)
T(n)T(n1)=1nT(n)+O(1)T(n) - T(n-1) = \frac{1}{n} T(n) + O(1)
T(n)nT(n1)n1=O(1n)\frac{T(n)}{n} - \frac{T(n-1)}{n-1} = O(\frac{1}{n})
T(n)n=O(1n)+O(1n2)++O(1)=O(logn)\frac{T(n)}{n} = O(\frac{1}{n}) + O(\frac{1}{n-2}) + \cdots + O(1) = O(\log n)
T(n)=O(nlogn)\therefore T(n) = O(n \log n)