Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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);
 }