【发布时间】:2018-02-10 21:47:31
【问题描述】:
我正在尝试生成配对,然后想根据设置的参数选择最佳配对。生成对并不难,但棘手的是从中选出最好的。
我认为最好继续举例,假设我们目前有 4 个元素并将它们命名为 element1,element2,element3,element4。每个元素都有在生成对时很重要的属性:
while ($element = mysqli_fetch_assoc($queryToGetElements)){
$elementId = $element['eid'];
$elementOpponents = getElementOpponents($elementId); //Returns opponents Id's as an array. These are the possible elements which can be paired.
$elementPairs = generatePairsWithElement($elementId,$elementOpponents); //Pair generating function, this uses the possible pairs which is defined below. Pretty much checks who hasn't paired before and puts them together in the pair.
$bestPair = chooseBest($elementPairs,$allOtherPairs) // This should select the best pair out of the elementPairs considering uniqueness with other pairs.
}
//So let's define our four elements:
$element1Place = 1;
$element2Place = 2;
$element3Place = 3;
$element4Place = 4;
//execute while loop with $element1:
$element1Opponents = [$element2,$element3,$element4];
$elementPairs = [[$element1,$element3],[$element1,$element3],[$element1,$element4]];
$element2Opponents = [$element3]
$elementPairs = [[$element2,$element3],[$element2,$element1]];
$elemenet3Opponents = [$element2]
$elementPairs = [[$element2,$element3],[$element1,$element3]];
$element4Opponents = [$element1]
$elementPairs = [[$element1,$element4];
//Pairs returned should be: [$element1,$element4] & [$element2,$element3].
-
Possible pairs- 这是可以与当前元素配对的其他元素的数组。在当前示例中,我确实有 4 个元素,但其中一些元素不能配对在一起,因为它们之前可能已经配对在一起(并且不允许将某人配对两次)。此约束应用于函数generatePairsWithElements。 -
Place- 这是一个唯一的整数值,两个元素不能相同。选择配对元素时,将选择Place较低的元素。此约束应用于函数chooseBest。 - 组合必须是唯一的 - 例如,如果
element1可以与element2和element3配对,并且element4只能与element2配对,那么element1只能与element3配对,即使element1迭代较早,element2位置较低。所以组合将是[element1,element3] and [element2,element4]。此约束应用于函数chooseBest。
如果没有第三个方面,生成独特的组合,这项任务不会那么困难。迭代可能的对手并选择最好的对手非常容易,但是生成独特的组合对我的项目至关重要。
【问题讨论】:
-
将所有的pairs放入一个数组中,然后按参数对数组进行排序。那么数组中的第一个元素将是最好的对。
-
您对如何排序保证唯一性有什么建议吗?
-
这是创建所有配对的一部分。你说那部分并不难。
-
我认为您误解了或者我措辞不当。可能的pair在开始时不会过滤掉唯一性约束,它只是映射尚未配对的人,并且约束在
chooseBest函数中设置。 -
生成对时,将它们放入数组中。在向阵列添加新对之前,请检查它是否已经存在。
标签: php