我試圖生成對,然後想根據設置的參數選擇最佳對。生成配對並不困難,但棘手的是要從中選擇最好的配對。生成組合並根據三個參數選擇最佳
我覺得這是最好的,如果我會用例子繼續,讓我們我們目前有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
。
如果不存在第三方面的話,這個任務就不會那麼困難,會產生獨特的組合。迭代可能的對手並選擇最好的對手是相當容易的,但是生成獨特的組合對於我的項目至關重要。
將所有對放入數組中,然後按參數對數組進行排序。那麼陣列中的第一個元素將是最好的一對。 – Barmar
如何對保證唯一性進行排序有什麼建議嗎? – Banana
這是創建所有對的一部分。你說這部分並不難。 – Barmar