元素分组和排序问题
元素分组和排序问题
大家好,这是我在实际工作中遇到的一个对集合中的元素分组和排序问题,现在我把它抽象如下:
输入:一个集合SET,里面有N个元素(A1,A2……An),用其中任意两个元素可以计算出一个关系值B,公式如下:
Bx = F(Ai, Aj);
输出:要求将SET里面的元素依据相似关系进行两两分组,并对这些分组按照关系值进行排序,得到
(<Aa,Ab>, <Ac,Ad>…..<Ay,Az>) //当N为偶数(Aa,Ab…Az ∈ SET)
或
(<Aa,Ab>, <Ac,Ad>…..<Az>) //当N为奇数
其中 F(Aa, Ab)为SET中任意两元素的最大关系值。F(Ac,Ad)为SET中除去Aa,Ab两元素以后的最大关系值,Ay,Az为最后两个元素(当N为偶数),Az为最后一个元素(当N为奇数)。
例如SET里有5个元素A1,A2,A3,A4,A5,其B值如下表:
A1 A2 A3 A4 A5
A1
A2 1
A3 2 3
A4 7 4 9
A5 8 6 10 5
则输出为(<A3,A5>, <A1,A4>, <A2>)。
以上应该是把需求写明白了。
想找一个复杂度为优于n2的算法。能写出思路或伪码即可,最好用C++实现的程序。