问答题 定义三元组(a,b,c)(a,b,c均为整数)的距离D=|a-b|+|b-c|+|c-a|。给定3个非空整数集合S1、S2和S3,按升序分别存储在3个数组中。请设计一个尽可能高效的算法,计算并输出所有可能的三元组(a,b,c)(a∈S1,b∈S2,c∈S3)中的最小距离。例如S1={-1,0,9},S2={-25,-10,10,11},S3={2,9,17,30,41}。则最小距离为2,相应的三元组为(9,10,9)。要求:
问答题 给出算法的基本设计思想。
【正确答案】算法的基本设计思想 ①使用min记录当前所有已处理过的三元组的最小距离,初值为C语言能表示的最大整数INT_MAX; ②若集合S1、S2和S3分别保存在数组A、B、C中。数组下标变量i=j=k=0,当i<|S1|且j<|S2|且k<|S3|时(|S|表示集合S中的元素个数),循环执行(a)~(c): (a)计算(A[i],B[i],C[k])的距离d; (b)若d<min,则min=d; (c)将A[i]、B[i]、C[k]中的最小值的下标+1; ③输出min,结束。
【答案解析】
问答题 根据设计思想,采用C或C++语言描述算法,关键之处给出注释。
【正确答案】算法实现
【答案解析】
问答题 说明你所设计算法的时间复杂度和空间复杂度。
【正确答案】算法的时间复杂度和空间复杂度设n=(|S1|+|S2|+|S3|),参考答案的时间复杂度为O(n),空间复杂度为O(1)。
【答案解析】