给定一个长度为 N
的复向量 U
,以及 M
个候选复向量 V_k (k=0..M-1)
,需要根据“相关性最小”来选择一个 V_k
。
题意中的“相关性”即:
s_k = U^H · V_k = Σ_i conj(U_i) * V_{k,i}
;|s_k|^2 = (Re(s_k))^2 + (Im(s_k))^2
;|s_k|^2
最小的 k
(若出现并列,输出下标最小者)。算法:一次扫描读入 U
,随后对每个候选 V_k
顺序读取其 N
个元素,边读边累计 s_k
的实部与虚部:
根据相关性寻找最优用户进行配对。
已知用户 U 的权值为 [N∗1] 大小的复数矩阵,从 V 队列挑选用户(M个用户)跟 U 用户进行配对,用户 V 的权值为 [N∗1] 大小的复数矩阵。
挑选原则:根据用户间相关性最小值选择用户。
相关性计算过程:
1)计算 U 用户权值矩阵共轭转置 ∗V 用户权值矩阵;
2)对步骤 2 得到的结果取模处理(复数实部的平方加上虚部的平方);
3)选出相关性最小的V用户。
第一行输入 N M 两个数(N 代表权值矩阵的行数,M 代表 V 队列用户的数目)
第二行至第 N+1 行为 U 用户的权值矩阵(每行有 2 个数,第一个数为复数的实部(float 类型),第二个为复数的虚部(float 类型))
第 N+2 行至第 2∗N+1 行为 V 用户队列第一个用户的权值矩阵(每行有 2 个数,第一个数为复数的实部,第二个为复数的虚部)
如此类推
输出相关性最小的 V 用户(编号从 0 开始)
输入
4 2
1.0 0
0.9 -0.3
0.6 0.3
0.8 -0.1
0.5 0.2
0.3 -0.2
2 -0.6
0.5 -0.9
0.5 0.8
0 -0.6
0.9 -0.5
0.8 -0.9
输出
1