共找到 1 题
排序:
组题
本页 1 题去组卷
20计数原理与组合数学★★★★★
在研究并行计算的基本算法时,有以下简单模型问题:用计算机求 nn 个不同的数 v1v_1,v2v_2,⋯\cdots,vnv_n 的和 ∑i=1nvi=v1+v2+⋯+vn\sum_{i=1}^{n}v_i=v_1+v_2+\cdots+v_n,计算开始前,nn 个数存贮在 nn 台由网络连接的计算机中,每台机器存一个数. 计算开始后,在一个单位时间内,每台机器至多到一台其他机器中读数据,并与自己原有数据相加得到新的数据,各台机器可同时完成上述工作. 为了用尽可能少的单位时间,使各台机器都得到 ∑i=1nvi\sum_{i=1}^{n}v_i,方法可用下表表示:
\begin{array}{c} \hline \multirow{2}{*}{机器号} & \multirow{2}{*}{初始时} & \multicolumn{2}{c|}{第一单位时间} & \multicolumn{2}{c|}{第二单位时间} & \multicolumn{2}{c|}{第三单位时间} \\ \cline{3-8} & & 被读机号 & 结果 & 被读机号 & 结果 & 被读机号 & 结果 \\ \hline 1 & $v_1$ & 2 & $v_1+v_2$ & & & & \\ \hline 2 & $v_2$ & 1 & $v_2+v_1$ & & & & \\ \hline \end{array}
(1) 当 n=4n=4 时,至少需要多少个单位时间可完成计算? 把你设计的方法填入下表:
\begin{array}{c} \hline \multirow{2}{*}{机器号} & \multirow{2}{*}{初始时} & \multicolumn{2}{c|}{第一单位时间} & \multicolumn{2}{c|}{第二单位时间} & \multicolumn{2}{c|}{第三单位时间} \\ \cline{3-8} & & 被读机号 & 结果 & 被读机号 & 结果 & 被读机号 & 结果 \\ \hline 1 & $v_1$ & & & & & & \\ \hline 2 & $v_2$ & & & & & & \\ \hline 3 & $v_3$ & & & & & & \\ \hline 4 & $v_4$ & & & & & & \\ \hline \end{array}
(2) 当 n=128n=128 时,要使所有机器都得到 ∑i=1nvi\sum_{i=1}^{n}v_i,至少需要多少个单位时间可完成计算?
\begin{solution} \begin{enumerate} \item 一开始每台机器只含有一个初始数. 一个单位时间内,每台机器至多从一台其他机器读取一次数据,因此经过一个单位时间后,每台机器至多含有两个初始数,不能得到四个初始数的总和. 所以至少需要两个单位时间.
第一单位时间令机器 11 与机器 22 互相读取,机器 33 与机器 44 互相读取,于是四台机器分别得到 v1+v2v_1+v_2、v1+v2v_1+v_2、v3+v4v_3+v_4、v3+v4v_3+v_4. 第二单位时间令机器 11 与机器 33 互相读取,机器 22 与机器 44 互相读取,于是四台机器都得到 v1+v2+v3+v4=∑i=14viv_1+v_2+v_3+v_4=\sum_{i=1}^{4}v_i. 该方法确实在两个单位时间内完成,因此最少需要 22 个单位时间.
对应的填写如下: \begin{center} \begin{tabular}{l|ll|ll|ll} 机器号 & \multicolumn{2}{l|}{第一单位时间} & \multicolumn{2}{l|}{第二单位时间} & \multicolumn{2}{l}{第三单位时间} \ & 被读机号 & 结果 & 被读机号 & 结果 & 被读机号 & 结果 \ \hline 1 & 2 & v1+v2v_1+v_2 & 3 & v1+v2+v3+v4v_1+v_2+v_3+v_4 & & \ 2 & 1 & v2+v1v_2+v_1 & 4 & v1+v2+v3+v4v_1+v_2+v_3+v_4 & & \ 3 & 4 & v3+v4v_3+v_4 & 1 & v1+v2+v3+v4v_1+v_2+v_3+v_4 & & \ 4 & 3 & v4+v3v_4+v_3 & 2 & v1+v2+v3+v4v_1+v_2+v_3+v_4 & & \end{tabular} \end{center}
\item 经过一个单位时间,每台机器所含初始数据的种数至多扩大为原来的两倍. 经过 kk 个单位时间后,每台机器至多含有 2k2^{k} 个初始数. 要使每台机器都含有 128128 个初始数,必须满足 2k⩾128=272^{k}\geqslant128=2^{7},所以至少需要 77 个单位时间. 另一方面,将机器编号为 00,11,…\ldots,127127,在第 jj 个单位时间(j=0j=0,11,…\ldots,66)让编号为 ii 的机器读取编号为 ixor2ji\mathbin{\mathsf{xor}}2^{j} 的机器中的数据,其中 xor\mathsf{xor} 表示按位异或. 每次配对的两台机器互相读取,经过第 j+1j+1 个单位时间后,每台机器所含数据数翻倍. 七个单位时间后所有机器都得到总和. 因此最少需要 77 个单位时间. \end{enumerate} \end{solution}

2002 · 北京 · 秋季 · 理 · 第 20 题 · 解答题

查看答案和解析