粒子物理研究中向量元素配对最大化函数k的算法实现求助
粒子物理研究中的向量配对优化问题
我正在为个人粒子物理研究开发一种向量排序算法,但自己是编程新手。当向量元素数量较多时,暴力枚举所有可能的元素组合会变得极其混乱,而且整个代码需要循环执行多达1e5次,效率根本跟不上。
核心需求如下:
- 现有四种味向量:A+、A-、B+、B-
- 必须同味配对:只能A+与A-组合,B+与B-组合,不同味的元素不能配对
- 需要找出一组或多组配对,使得计算值
k(V+, V-)最大化;如果B组中有多个配对的k值大于A组的最优k值,这些B组配对都可以保留
示例说明
示例1:
A+ = {a1+},A- = {a1-}
B+ = {b1+, b2+},B- = {b1-}
- A组只有唯一配对:
k(a1+, a1-)- B组有两种可选配对:
k(b1+, b1-)或k(b2+, b1-),需要保留k值更大的那个
示例2:
若B+和B-各有两个元素:
B+ = {b1+, b2+},B- = {b1-, b2-}
可能的组合包括:k(b1+, b1-)、k(b2+,b2-)、k(b1+, b2-)、k(b2+, b1-),需要从中选出k值最优的组合;如果其中有两个组合的k值都大于A组的k值,这两个组合都可以保留
我尝试写了一段代码,但没法完成后续的实现,代码如下:
#include <iostream> #include <vector> #include <algorithm> using namespace std; static bool sortbypair(const pair<double, double> &a, const pair<double, double> &b) { return (k(a.first, a.second) > k(b.first, b.second)) && k(a.first, b.second) < k(a.second, b.first); }
希望能得到帮助,优化这个配对逻辑,避免暴力枚举,提升代码的执行效率!
内容的提问来源于stack exchange,提问作者mangoman
相关产品推荐
相关产品推荐

