![](/img/trans.png)
[英]Is there a known fast algorithm for finding all pairs of numbers that multiply to a given number?
[英]Finding Unpaired Numbers From Given Number Pairs
是否有任何算法可從給定的成對數字列表中查找未成對數字。例如,在{(1,2),(2,3),(3,4)}中,成對(1,3)和(2,4 )從未配對過。
您可以按照以下步驟進行操作:
當然,這假定您只關心原始集中的值對。 例如,在您的示例中也不存在(1,5)對。 兩者都不是(貓,狗)。
這在時間O(n 2 )中運行,其中n是原始對對中表示的數字數。
希望這可以幫助!
使用LINQ和對稱技巧來利用(1,3)和(3,1)相同的事實,因此忽略第二個數字大於第一個數字的情況:
public static IEnumerable<Tuple<int, int>> GetUnpairedNumbers(IEnumerable<Tuple<int, int>> existingPairs ) {
var uniqueNumbers = existingPairs.SelectMany(p => new[] {p.Item1, p.Item2}).Distinct().ToList();
var isUsed = uniqueNumbers.ToDictionary(n => n, n => uniqueNumbers.Where(inner => n < inner).ToDictionary(inner => inner, inner => false));
foreach(var currentPair in existingPairs) {
isUsed[currentPair.Item1][currentPair.Item2] = true;
}
return isUsed.Keys.SelectMany(n => isUsed[n].Where(kvp => !kvp.Value).Select(kvp => Tuple.Create(n, kvp.Key)));
}
public static void Main(string[] args) {
var unpairedNumbers = GetUnpairedNumbers(new[] { P(1, 2), P(2, 3), P(3, 4) });
}
private static Tuple<int, int> P(int a, int b) {
return Tuple.Create(a, b);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.