Beispiel #1
0
        private void prime(int index)
        {
            IVector <int> vertexSet = Vector <int> .VectorFactory();

            vertexSet.Insert(index);
            IVector <int> vertexCutSet = CaluCutSet(index);

            Status(index, VStatus.Visited);
            while (true)
            {
                Tuple <int, int> edge = MimimumEdge(vertexSet, vertexCutSet);
                if (edge == null)
                {
                    break;
                }
                vertexSet.Insert(edge.Item2);
                vertexCutSet.Remove(vertexCutSet.Find(edge.Item2));
                Status(edge.Item2, VStatus.Visited);
                if (Exist(edge.Item1, edge.Item2))
                {
                    Status(edge.Item1, edge.Item2, EStatus.Tree);
                }
                else
                {
                    Status(edge.Item2, edge.Item1, EStatus.Tree);
                }
            }
        }
Beispiel #2
0
 public void Concat(IString other)
 {
     for (int i = 0; i < other.Length; i++)
     {
         _vector.Insert(other.CharAt(i));
     }
 }
Beispiel #3
0
 public override int Insert(TV e)
 {
     for (int i = 0; i < N; i++)
     {
         _e[i].Insert(null);
     }
     ++N;
     _e.Insert(CreateEdges());
     _v.Insert(new Vertex <TV>(e));
     return(_v.Size - 1);
 }
Beispiel #4
0
 public void TestFind()
 {
     _vector.Insert(new Coordinate()
     {
         X = 0, Y = 0
     });
     Assert.AreEqual(_vector.Find(new Coordinate()
     {
         X = 0, Y = 0
     }), 0);
 }
Beispiel #5
0
        private IVector <BinNode <HuffChar> > InitHuffChars()
        {
            IVector <BinNode <HuffChar> > huffChars =
                Vector <BinNode <HuffChar> > .VectorFactory();

            foreach (var charItem in _charweights.Keys)
            {
                huffChars.Insert(new BinNode <HuffChar>(
                                     new HuffChar(charItem, _charweights[charItem])));
            }
            return(huffChars);
        }
Beispiel #6
0
        private IVector <IVector <int> > BuildVertex()
        {
            IVector <IVector <int> > vertexs = Vector <IVector <int> > .VectorFactory();

            for (int i = 0; i < N; i++)
            {
                IVector <int> vertex = Vector <int> .VectorFactory();

                vertex.Insert(i);
                vertexs.Insert(vertex);
            }
            return(vertexs);
        }
Beispiel #7
0
        /// <summary>
        /// 获取顶点的补集
        /// </summary>
        /// <param name="index">起始的位置</param>
        /// <returns>返回</returns>
        private IVector <int> CaluCutSet(int index)
        {
            IVector <int> cutSet = Vector <int> .VectorFactory();

            for (int i = 0; i < N; i++)
            {
                if (i != index && Status(i) != VStatus.Visited)
                {
                    cutSet.Insert(i);
                }
            }
            return(cutSet);
        }
Beispiel #8
0
        private void BuildTree()
        {
            IVector <BinNode <HuffChar> > huffchars = InitHuffChars();

            while (huffchars.Size > 1)
            {
                Tuple <Int32, Int32> twoMin = FindTwoMin(huffchars, 0, huffchars.Size);
                int first  = Math.Min(twoMin.Item1, twoMin.Item2);
                int second = Math.Max(twoMin.Item1, twoMin.Item2);
                var node1  = huffchars.Remove(second);
                var node2  = huffchars.Remove(first);

                BinNode <HuffChar> newNode = new BinNode <HuffChar>(
                    new HuffChar('^', node1.Data.Weight + node2.Data.Weight), null, node1, node2);
                node1.Parent = newNode;
                node2.Parent = newNode;
                huffchars.Insert(newNode);
            }
            _huffmanRoot = huffchars[0];
        }
Beispiel #9
0
 public override void Push(T e)
 {
     _vector.Insert(e);
 }
Beispiel #10
0
 private void InsertVector()
 {
     _vector.Insert(4);
     _vector.Insert(5);
     _vector.Insert(6);
 }