// TODO Complete algorithm public static bool AreIsomorphic(IGroup group1, IGroup group2) { if (group1.Order != group2.Order) { return(false); } if (group1.Equals(group2)) { return(true); } // Assumes order //for (int k = 0; k < group1.Order; k++) // if (group1.Elements[k].Order != group2.Elements[k].Order) // return false; if (IsCyclic(group1) && IsCyclic(group2)) { return(true); } Dictionary <IElement, IElement> map = new Dictionary <IElement, IElement>(); if (TryMap(group1, group2, map)) { return(true); } return(false); }
public void MultiplyGenerateSymmetricGroup() { IGroup group1 = new GeneratedGroup(Element.CreateRotation(4)); IGroup group2 = new GeneratedGroup(Element.CreateSwap(4)); IGroup group3 = GroupUtilities.Multiply(group1, group2); Assert.AreEqual(24, group3.Order); IGroup symm = new SymmetricGroup(4); Assert.IsTrue(GroupUtilities.AreEqual(group3, symm)); Assert.IsTrue(group3.Equals(symm)); }
// TODO Complete algorithm public static bool AreIsomorphic(IGroup group1, IGroup group2) { if (group1.Order != group2.Order) return false; if (group1.Equals(group2)) return true; // Assumes order //for (int k = 0; k < group1.Order; k++) // if (group1.Elements[k].Order != group2.Elements[k].Order) // return false; if (IsCyclic(group1) && IsCyclic(group2)) return true; Dictionary<IElement, IElement> map = new Dictionary<IElement, IElement>(); if (TryMap(group1, group2, map)) return true; return false; }