public static PersDiagram ReadPersDiag(string _filename) //читаем из файла, заносим повторяющиеся строки в кратности { try { PersDiagram persD = new PersDiagram(); using (StreamReader reader = new StreamReader(_filename)) { var line = ReadLine(reader); while (line != null) { var data = line.Split(_separators, 2, StringSplitOptions.RemoveEmptyEntries); var birth = double.Parse(data[0]); var death = double.Parse(data[1]); if (birth != death) ///сейчас учитываем только недиагональные точки { Dot addedDot = new Dot(birth, death); ///создаём точку с единичной кратностью Dot toDot = persD.AddDot(addedDot); ///добавляем её в перс диаграмму, с учётом повторений меняется кратность } line = ReadLine(reader); } return(persD); } } catch (Exception e) { Console.WriteLine("Cannot parse a file", e); throw; } }
public Dist(string filenameA, string filenameB) ///конструктор { _filenameA = filenameA; _filenameB = filenameB; _inpA = Readers.ReadPersDiag(_filenameA); //выдели в отдельные классы _inpB = Readers.ReadPersDiag(_filenameB); //выдели в отдельные классы AcupB = PersDiagram.PersDiagramCup(_inpA, _inpB); BcupA = PersDiagram.PersDiagramCup(_inpB, _inpA); _inpAsize = _inpA.SourceSize(); _inpBsize = _inpB.SourceSize(); _inpAcupBsize = AcupB.SourceSize(); _inpBcupAsize = BcupA.SourceSize(); AcupB.BuildDictIndex(); ///соответствие между точками и индексами BcupA.BuildDictIndex(_inpAcupBsize + 1); graphG = new BipartiteGraph(); graphG.BuildAllDistGraph(AcupB, BcupA); ///строим граф связей и размеров из всез точек AcupB во все точки BcupA lefts = AcupB.FullSetOfIndex; rights = BcupA.FullSetOfIndex; //int? index = BinS.BinarySearch(graphG.DistI, BinS.LoopDelegate); //ищем в списке возможных дистанций ту, которая удовлетворяет условию LoopDelegate }
public BipartiteGraphDistI(PersDiagram A, PersDiagram B, BipartiteGraph G, int i) ///конструктор : base(A, B) { BuildGraphGdistI(G, i); }