跳到主要内容

京都大学 情報学研究科 知能情報学専攻 2021年7月実施 情報学基礎 F2-1

Author​

Isidore, 祭音Myyura

Description​

設問1​

整数の集合 AA の要素の小さい方から kk 番目 (k≥1)(k \ge 1) の要素の値を返す関数 SelectKth(A,k)\text{SelectKth}(A,k) を考える。例えば、A={5,1,7}A = \{5,1,7\} および k=2k = 2 の場合、SelectKth(A,k)\text{SelectKth}(A,k) は 55 を出力する。 今、p:=PivotSelect(A)p:= \text{PivotSelect}(A) は AA に含まれる要素のうち一つをランダムに返す関数とし、(L,R):=Partition(A,p)(L,R):= \text{Partition}(A,p) は集合 AA を pp 以下の値で構成される集合 LL と pp より大きい値で構成される集合 RR に分割する関数とする。 例えば、A={5,1,7}A = \{5,1,7\} および p=5p = 5 の場合、(L,R):=Partition(A,p)(L,R):= \text{Partition}(A,p) の LL および RR はそれぞれ、L={5,1}L = \{5,1\}、R={7}R = \{7\} となる。また、Remove(A,p)\text{Remove}(A,p) は集合 AA から要素 pp を削除する関数とする。 例えば、A={5,1,7}A = \{5,1,7\} および p=7p = 7 の場合、Remove(A,p)\text{Remove}(A,p) は AA を {5,1}\{5,1\} にする。 ∣X∣|X| は集合 XX の要素数とし、AA のすべての要素は異なるとする。

(1) Algorithm 1 は SelectKth 関数の疑似コードである。Algorithm 1 の (a)-(e) を埋めよ。

(2) ∣A∣=n|A| = n の場合の Partition(A,p)\text{Partition}(A,p)、Remove(L,p)\text{Remove}(L,p)、PivotSelect(A)\text{PivotSelect}(A) の要素の比較回数をそれぞれ O(n)O(n)、O(n)O(n)、および O(1)O(1) とする。Algorithm 1 の平均比較回数をオーダー表記で答えよ。

設問2​

44 つのリストを用いた外部ハッシュ法について以下の問いに答えよ。キーは 0,1,20,1,2 のいずれかの整数が 44 つ並んだパターン s4s3s2s1,si∈{0,1,2}s_4s_3s_2s_1,s_i \in \{0,1,2\} で与えられる。また以下において、 mod \text{ mod } は割り算の余りを出力する演算子を示す。

(1) 表 11 は、ハッシュ関数 (∑i=143i−1si) mod 4\big(\sum_{i = 1}^4 3^{i - 1}s_i\big) \text{ mod } 4 を用いて、キー 0100,12110100,1211 を順に挿入した後のデータ構造を模式的に表している。この状態に追加で 0010,2101,1222,11110010,2101,1222,1111 を順に挿入した後のデータ構造を表 11 に倣って図示せよ。

(2) kk 個の要素で構成されるリストに、新たに要素を 11 つ追加するのに要するコストを ck(cは正の実定数)ck(c\text{は正の実定数}) とする。表 22 に示す確率分布に従って独立に生起する複数個のキーをハッシュ法を用いて順に挿入していくとき、挿入コストの期待値が最小となるキーとハッシュ値の対応付けをその理由とともに示せ。対応付けは表 22 における (a),(b),(c),(d) を埋める形で解答せよ。

(3) (2) で求めた対応付けを (∑i=14aisi+a5s1s2+a6s3s4) mod 4\big(\sum_{i = 1}^4 a_is_i + a_5s_1s_2 + a_6s_3s_4\big)\text{ mod } 4 なるハッシュ関数で実現するときの a1,a2,a3,a4,a5,a6a_1,a_2,a_3,a_4,a_5,a_6 を導出せよ。

表1​
インデックスリスト
0
10100 →\rightarrow 1211
2
3
表2​
キー生起確率ハッシュ値
01000.10(a)
02100.20(b)
10100.150
11010.151
11110.25(c)
21010.15(d)

题目描述​

问题 1 考虑函数 SelectKth⁡(A,k)\operatorname{SelectKth}(A,k),它返回整数集合 AA 中第 kk 小元素的值(k≥1k\ge1)。例如,A={5,1,7}A=\{5,1,7\}、k=2k=2 时,函数输出 5。设 p:=PivotSelect⁡(A)p:=\operatorname{PivotSelect}(A) 为从 AA 的元素中随机返回一个元素的函数;(L,R):=Partition⁡(A,p)(L,R):=\operatorname{Partition}(A,p) 将 AA 分成由不大于 pp 的值构成的集合 LL 和由大于 pp 的值构成的集合 RR。例如,A={5,1,7}A=\{5,1,7\}、p=5p=5 时,得到 L={5,1}L=\{5,1\}、R={7}R=\{7\}。

Remove⁡(A,p)\operatorname{Remove}(A,p) 为从 AA 中删除元素 pp 的函数。例如,A={5,1,7}A=\{5,1,7\}、p=7p=7 时,它把 AA 变为 {5,1}\{5,1\}。∣X∣|X| 表示集合 XX 的元素数,且 AA 的全部元素互不相同。

上方 Algorithm 1 为寻找 AA 中第 kk 小元素的伪代码。

(1)填写 Algorithm 1 中的空栏(a)~(e)。

(2)当 ∣A∣=n|A|=n 时,设 Partition⁡(A,p)\operatorname{Partition}(A,p)、Remove⁡(L,p)\operatorname{Remove}(L,p)、PivotSelect⁡(A)\operatorname{PivotSelect}(A) 的元素比较次数分别为 O(n)O(n)、O(n)O(n)、O(1)O(1)。用阶数记号表示 Algorithm 1 的平均比较次数。

问题 2 回答关于使用 4 个链表的外部哈希法的问题。键是 4 个取值于 {0,1,2}\{0,1,2\} 的整数排成的模式 s4s3s2s1s_4s_3s_2s_1,其中 si∈{0,1,2}s_i\in\{0,1,2\}。以下  mod \bmod 表示输出除法余数的运算。

(1)表 1 示意使用哈希函数

(∑i=143i−1si) mod 4\left(\sum_{i=1}^4 3^{i-1}s_i\right)\bmod4

依次插入键 0100,1211 后的数据结构。在此状态下继续依次插入 0010,2101,1222,1111,仿照表 1 画出最终的数据结构。

表 1:

索引链表
0
10100 → 1211
2
3

(2)向含 kk 个元素的链表追加一个元素的代价为 ckck,其中 cc 为正实常数。若多个键按照表 2 的概率分布独立产生,并用哈希法依次插入,给出使期望插入代价最小的键与哈希值的对应,并说明理由。以填写表 2 中(a)~(d)的方式回答。

表 2:

键发生概率哈希值
01000.10(a)
02100.20(b)
10100.150
11010.151
11110.25(c)
21010.15(d)

(3)用哈希函数

(∑i=14aisi+a5s1s2+a6s3s4) mod 4\left(\sum_{i=1}^4a_is_i+a_5s_1s_2+a_6s_3s_4\right)\bmod4

实现(2)所得对应,推导 a1,a2,a3,a4,a5,a6a_1,a_2,a_3,a_4,a_5,a_6。

Kai​

設問1​

(1)​

a. ∣L∣=k|L| = k

b. ∣L∣>k|L| > k

c. kk

d. ∣L∣<k|L| < k

e. k−∣L∣k - |L|

(2)​

Note that Algorithm 1 is so called "Quick Select" algorithm. Let TnT_n be the maximum expected number of comparisons over all target ranks for an input of size nn, and let cncn bound the comparisons outside the recursive call. If the uniformly random pivot has rank jj, the recursive subproblem has size

s(j)={n−j,j<k,0,j=k,j,k<j<n,n−1,j=n>k.s(j)= \begin{cases} n-j,&jk. \end{cases}

For every kk,

1n∑j=1ns(j)≤3n4.\frac1n\sum_{j=1}^n s(j)\leq\frac{3n}{4}.

Thus, by induction with C≥4cC\geq4c,

Tn≤cn+1n∑j=1nTs(j)≤cn+C3n4≤Cn.T_n\leq cn+\frac1n\sum_{j=1}^n T_{s(j)} \leq cn+C\frac{3n}{4}\leq Cn.

Therefore, Tn=O(n)T_n=O(n).

設問2​

(1)​

indexlist
02101 -> 1111
10100 -> 1211 -> 1222
2
30010

(2)​

  • (a): 0
  • (b): 2
  • (cc): 3
  • (d): 1

Let qhq_h be the probability that a generated key is assigned to list hh. After tt insertions, the expected cost of the next insertion is ct∑h=03qh2ct\sum_{h=0}^3q_h^2. The above assignment gives

(q0,q1,q2,q3)=(0.25,0.30,0.20,0.25),∑h=03qh2=0.255,\begin{gathered} (q_0,q_1,q_2,q_3)=(0.25,0.30,0.20,0.25),\\ \sum_{h=0}^3q_h^2=0.255, \end{gathered}

which is the minimum over the possible assignments of (a)--(d).

(3)​

Construct a system of six linear equations in six variables from the table given in (2), and we have

a1=1a2=2a3=0a4=−2a5=0a6=2\begin{aligned} a_1 &= 1 \\ a_2 &= 2 \\ a_3 &= 0 \\ a_4 &= -2 \\ a_5 &= 0 \\ a_6 &= 2 \\ \end{aligned}

Reference​