public void Connect_4_with_3_and_3_with_8_and_9_with_4() { var uf = new QuickFindUF(10); uf.Union(4, 3); uf.Union(3, 8); uf.Union(9, 4); for (int i = 0; i < uf.Length; i++) { if (i == 3) { Assert.Equal(8, uf.Nodes[i]); } else if (i == 4) { Assert.Equal(8, uf.Nodes[i]); } else if (i == 9) { Assert.Equal(8, uf.Nodes[i]); } else { Assert.Equal(i, uf.Nodes[i]); } } }
static void Compute() { char[] split = { '\n', '\r' }; var input = TestCase.Properties.Resources.mediumUF.Split(split, StringSplitOptions.RemoveEmptyEntries); var size = int.Parse(input[0]); var quickFind = new QuickFindUF(size); var quickUnion = new QuickUnionUF(size); string[] pair; int p, q; var quickFindResult = new int[size]; var quickUnionResult = new int[size]; for (var i = 1; i < size; i++) { pair = input[i].Split(' '); p = int.Parse(pair[0]); q = int.Parse(pair[1]); quickFind.Union(p, q); quickUnion.Union(p, q); quickFindResult[i - 1] = quickFind.ArrayVisitCount; quickUnionResult[i - 1] = quickUnion.ArrayVisitCount; quickFind.ResetArrayCount(); quickUnion.ResetArrayCount(); } Draw(quickFindResult); Draw(quickUnionResult); }
public void testUnionAndConnected_MultiConnection() { QuickFindUF quickFindUF = new QuickFindUF(10); quickFindUF.Union(0, 1); quickFindUF.Union(2, 1); Assert.IsTrue(quickFindUF.Connected(0, 1)); Assert.IsTrue(quickFindUF.Connected(2, 1)); Assert.IsTrue(quickFindUF.Connected(2, 0)); Assert.AreEqual(8, quickFindUF.Count()); Assert.AreEqual(1, quickFindUF.Find(1)); Assert.AreEqual(1, quickFindUF.Find(0)); Assert.AreEqual(1, quickFindUF.Find(2)); quickFindUF.Union(2, 5); Assert.IsTrue(quickFindUF.Connected(0, 1)); Assert.IsTrue(quickFindUF.Connected(2, 1)); Assert.IsTrue(quickFindUF.Connected(2, 0)); Assert.IsTrue(quickFindUF.Connected(5, 0)); Assert.IsTrue(quickFindUF.Connected(5, 1)); Assert.IsTrue(quickFindUF.Connected(5, 2)); Assert.AreEqual(7, quickFindUF.Count()); Assert.AreEqual(5, quickFindUF.Find(1)); Assert.AreEqual(5, quickFindUF.Find(0)); Assert.AreEqual(5, quickFindUF.Find(2)); Assert.AreEqual(5, quickFindUF.Find(5)); }
static void Compute() { var size = 200; var quickFind = new QuickFindUF(size); var quickUnion = new QuickUnionUF(size); var weightedQuickUnion = new WeightedQuickUnionUF(size); var connections = ErdosRenyi.Generate(size); var quickFindResult = new int[size]; var quickUnionResult = new int[size]; var weightedQuickUnionResult = new int[size]; int p, q; for (var i = 0; i < size; i++) { p = connections[i].P; q = connections[i].Q; quickFind.Union(p, q); quickUnion.Union(p, q); weightedQuickUnion.Union(p, q); quickFindResult[i] = quickFind.ArrayVisitCount; quickUnionResult[i] = quickUnion.ArrayVisitCount; weightedQuickUnionResult[i] = weightedQuickUnion.ArrayParentVisitCount + weightedQuickUnion.ArraySizeVisitCount; quickFind.ResetArrayCount(); quickUnion.ResetArrayCount(); weightedQuickUnion.ResetArrayCount(); } Draw(quickFindResult, "Quick-Find"); Draw(quickUnionResult, "Quick-Union"); Draw(weightedQuickUnionResult, "Weighted Quick-Union"); }
public void A_big_test() { var uf = new QuickFindUF(10); uf.Union(4, 3); uf.Union(3, 8); uf.Union(6, 5); uf.Union(9, 4); uf.Union(2, 1); Assert.True(uf.IsConnected(8, 9)); Assert.False(uf.IsConnected(5, 0)); uf.Union(5, 0); uf.Union(7, 2); uf.Union(6, 1); Assert.Equal(1, uf.Nodes[0]); Assert.Equal(1, uf.Nodes[1]); Assert.Equal(1, uf.Nodes[2]); Assert.Equal(8, uf.Nodes[3]); Assert.Equal(8, uf.Nodes[4]); Assert.Equal(1, uf.Nodes[5]); Assert.Equal(1, uf.Nodes[6]); Assert.Equal(1, uf.Nodes[7]); Assert.Equal(8, uf.Nodes[8]); Assert.Equal(8, uf.Nodes[9]); }
public void testFind() { QuickFindUF quickFindUF = new QuickFindUF(10); for (int i = 0; i < 10; i++) { Assert.AreEqual(i, quickFindUF.Find(i)); } }
public void testUnionAndConnected_NewConnection() { QuickFindUF quickFindUF = new QuickFindUF(10); Assert.IsFalse(quickFindUF.Connected(0, 1)); Assert.AreEqual(10, quickFindUF.Count()); quickFindUF.Union(0, 1); Assert.IsTrue(quickFindUF.Connected(0, 1)); Assert.AreEqual(9, quickFindUF.Count()); Assert.AreEqual(1, quickFindUF.Find(1)); Assert.AreEqual(1, quickFindUF.Find(0)); }
static void Main(string[] args) { var qu = new QuickFindUF(10); var line = Console.ReadLine(); foreach (var par in line.Split(' ')) { qu.union(int.Parse(par.Split('-')[0]), int.Parse(par.Split('-')[1])); } foreach (var _id in qu.id) { Console.Write(_id); Console.Write(" "); } Console.ReadLine(); }
public static void Main() { QuickFindUF uf = new QuickFindUF(10); uf.Union(0, 5); Console.WriteLine("Connected(0,5) " + uf.Connected(0, 5)); Console.WriteLine("Connected(5,6) " + uf.Connected(5, 6)); uf.Union(5, 6); uf.Union(1, 2); uf.Union(2, 7); uf.Union(3, 4); uf.Union(4, 8); uf.Union(8, 9); Console.WriteLine("Connected(0,7) " + uf.Connected(0, 7)); Console.WriteLine("Connected(1,2) " + uf.Connected(1, 2)); Console.WriteLine("Connected(3,4) " + uf.Connected(3, 4)); Console.WriteLine("Connected(5,9) " + uf.Connected(5, 9)); Console.WriteLine("Connected(8,9) " + uf.Connected(8, 9)); }
public void Connect_4_with_3() { int from = 4; int to = 3; var uf = new QuickFindUF(10); uf.Union(from, to); for (int i = 0; i < uf.Length; i++) { if (i == from) { Assert.Equal(to, uf.Nodes[i]); } else { Assert.Equal(i, uf.Nodes[i]); } } }
static void Main(string[] args) { //Quick-find QuickFindUF grid = new QuickFindUF(10); grid.Union(2, 3); grid.Union(3, 6); grid.Union(6, 5); Console.WriteLine($"Does 2 and 5 connect? {grid.Connected(2, 5)}"); Console.WriteLine($"Does 6 and 1 connect? {grid.Connected(1, 6)}"); //Quick-union QuickUnionUF quuf = new QuickUnionUF(10); quuf.Union(2, 3); quuf.Union(3, 6); quuf.Union(6, 5); Console.WriteLine($"Does 2 and 5 connect? {quuf.Connected(2, 5)}"); Console.WriteLine($"Does 6 and 1 connect? {quuf.Connected(1, 6)}"); Console.WriteLine(GreatestCommonDenominator.GetGCD(9, 0)); }
static void Main(string[] args) { var input = "9-0 3-4 5-8 7-2 2-1 5-7 0-3 4-2".Split(' '); var quickFind = new QuickFindUF(10); foreach (var s in input) { quickFind.ResetArrayCount(); var numbers = s.Split('-'); var p = int.Parse(numbers[0]); var q = int.Parse(numbers[1]); var id = quickFind.GetParent(); quickFind.Union(p, q); foreach (var root in id) { Console.Write(root + " "); } Console.WriteLine("数组访问:" + quickFind.ArrayVisitCount); } }
static void Main(string[] args) { var n = 2000; for (var t = 0; t < 5; t++) { var input = ErdosRenyi.Generate(n); var quickFind = new QuickFindUF(n); var quickUnion = new QuickUnionUF(n); Console.WriteLine("N:" + n); var quickFindTime = RunTest(quickFind, input); var quickUnionTime = RunTest(quickUnion, input); Console.WriteLine("quick-find 耗时(毫秒):" + quickFindTime); Console.WriteLine("quick-union 耗时(毫秒):" + quickUnionTime); Console.WriteLine("比值:" + (double)quickFindTime / quickUnionTime); Console.WriteLine(); n *= 2; } }
static void Main(string[] args) { char[] split = { '\n', '\r' }; string[] input = TestCase.Properties.Resources.mediumUF.Split(split, StringSplitOptions.RemoveEmptyEntries); int size = int.Parse(input[0]); QuickFindUF quickFind = new QuickFindUF(size); WeightedQuickFindUF weightedQuickFind = new WeightedQuickFindUF(size); int p, q; string[] pair; for (int i = 1; i < size; i++) { pair = input[i].Split(' '); p = int.Parse(pair[0]); q = int.Parse(pair[1]); quickFind.Union(p, q); weightedQuickFind.Union(p, q); } Console.WriteLine("quick-find: " + quickFind.ArrayVisitCount); Console.WriteLine("weighted quick-find: " + weightedQuickFind.ArrayVisitCount); }
public static void Main(String[] args) { int n = Convert.ToInt32(Console.ReadLine()); QuickFindUF uf = new QuickFindUF(n); string line; while ((line = Console.ReadLine()) != null && line != "") { string[] a_temp = line.Split(' '); int[] array = Array.ConvertAll(a_temp, Int32.Parse); int p = array[0]; int q = array[1]; if (uf.Connected(p, q)) { continue; } uf.Union(p, q); Console.WriteLine(p + " " + q); } Console.WriteLine(uf.Count() + " components"); Console.ReadLine(); }
public void QuickFindTest() { var UF = new QuickFindUF(Algorithms.DynamicConnectivity.length); Run(UF, Algorithms.DynamicConnectivity.commands); }
public void testConnected_ParameterValidation_PLargerThanN() { QuickFindUF quickFindUF = new QuickFindUF(10); quickFindUF.Connected(11, 4); }
public void testConnected_ParameterValidation_QLessThan0() { QuickFindUF quickFindUF = new QuickFindUF(10); quickFindUF.Connected(4, -1); }
public void testUnion_ParameterValidation_QLargerThanN() { QuickFindUF quickFindUF = new QuickFindUF(10); quickFindUF.Union(4, 11); }
public void testConnected_ParameterValidation_PEqualN() { QuickFindUF quickFindUF = new QuickFindUF(10); quickFindUF.Connected(10, 4); }
public void testUnion_ParameterValidation_QLessThan0() { QuickFindUF quickFindUF = new QuickFindUF(10); quickFindUF.Union(4, -1); }
public void testUnion_ParameterValidation_QEqualN() { QuickFindUF quickFindUF = new QuickFindUF(10); quickFindUF.Union(4, 10); }
static void Main(string[] args) { var n = 40; var t = 4; // quick-find Console.WriteLine("Quick-Find"); long last = 0; long now = 0; for (var i = 0; i < t; i++, n *= 2) { Console.WriteLine("N:" + n * n); var connections = RandomGrid.GetConnections(n); var quickFind = new QuickFindUF(n * n); now = RunTest(quickFind, connections); if (last == 0) { Console.WriteLine("平均用时(毫秒):" + now); last = now; } else { Console.WriteLine("平均用时(毫秒):" + now + "\t比值:" + (double)now / last); last = now; } } // quick-union Console.WriteLine("Quick-Union"); n = 40; for (var i = 0; i < t; i++, n *= 2) { Console.WriteLine("N:" + n * n); var connections = RandomGrid.GetConnections(n); var quickFind = new QuickUnionUF(n * n); now = RunTest(quickFind, connections); if (last == 0) { Console.WriteLine("平均用时(毫秒):" + now); last = now; } else { Console.WriteLine("平均用时(毫秒):" + now + "\t比值:" + (double)now / last); last = now; } } // 加权 quick-union Console.WriteLine("Weighted Quick-Union"); n = 40; for (var i = 0; i < t; i++, n *= 2) { Console.WriteLine("N:" + n * n); var connections = RandomGrid.GetConnections(n); var quickFind = new WeightedQuickUnionUF(n * n); now = RunTest(quickFind, connections); if (last == 0) { Console.WriteLine("平均用时(毫秒):" + now); last = now; } else { Console.WriteLine("平均用时(毫秒):" + now + "\t比值:" + (double)now / last); last = now; } } }
public void TestInit() { var qf = new QuickFindUF(10); Assert.AreEqual(10, qf.Count()); }
static void Main(string[] args) { long lastTimeQuickFind = 0; long lastTimeQuickUnion = 0; long lastTimeWeightedQuickUnion = 0; long nowTime = 0; for (int n = 2000; n < 100000; n *= 2) { Console.WriteLine("N:" + n); QuickFindUF quickFindUF = new QuickFindUF(n); QuickUnionUF quickUnionUF = new QuickUnionUF(n); WeightedQuickUnionUF weightedQuickUnionUF = new WeightedQuickUnionUF(n); // quick-find Console.WriteLine("quick-find"); nowTime = RunTest(quickFindUF); if (lastTimeQuickFind == 0) { Console.WriteLine("用时:" + nowTime); lastTimeQuickFind = nowTime; } else { Console.WriteLine("用时:" + nowTime + " 比值:" + (double)nowTime / lastTimeQuickFind); lastTimeQuickFind = nowTime; } Console.WriteLine(); // quick-union Console.WriteLine("quick-union"); nowTime = RunTest(quickUnionUF); if (lastTimeQuickUnion == 0) { Console.WriteLine("用时:" + nowTime); lastTimeQuickUnion = nowTime; } else { Console.WriteLine("用时:" + nowTime + " 比值:" + (double)nowTime / lastTimeQuickUnion); lastTimeQuickUnion = nowTime; } Console.WriteLine(); // weighted-quick-union Console.WriteLine("weighted-quick-union"); nowTime = RunTest(weightedQuickUnionUF); if (lastTimeWeightedQuickUnion == 0) { Console.WriteLine("用时:" + nowTime); lastTimeWeightedQuickUnion = nowTime; } else { Console.WriteLine("用时:" + nowTime + " 比值:" + (double)nowTime / lastTimeWeightedQuickUnion); lastTimeWeightedQuickUnion = nowTime; } Console.WriteLine(); Console.WriteLine(); } }
public void testFind_ParameterValidation_PLargerThanN() { QuickFindUF quickFindUF = new QuickFindUF(10); quickFindUF.Find(11); }
public void testFind_ParameterValidation_PEqualN() { QuickFindUF quickFindUF = new QuickFindUF(10); quickFindUF.Find(10); }
public void testFind_ParameterValidation_PLessThan0() { QuickFindUF quickFindUF = new QuickFindUF(10); quickFindUF.Find(-1); }
static void Main(string[] args) { // 查看 UnionFound 类库里面的相关类即可。 QuickFindUF quickFindUF = new QuickFindUF(100); QuickUnionUF quickUnionUF = new QuickUnionUF(100); }