Пример #1
0
        public SymbolGraph(T[,] inputs)
        {
            indexes = new LinearProbingHashSymbolTable <T, int>();

            // 构建顶点到索引的映射
            for (int i = 0; i < inputs.GetLength(0); i++)
            {
                for (int j = 0; j < inputs.GetLength(1); j++)
                {
                    if (!indexes.Contains(inputs[i, j]))
                    {
                        indexes.Put(inputs[i, j], indexes.Size);
                    }
                }
            }

            // 构建索引到顶点的映射
            keys = new T[indexes.Size];
            foreach (var item in indexes)
            {
                keys[indexes.Get(item.Key)] = item.Key;
            }

            // 构建图
            graph = new UndirectedGraph(indexes.Size);
            for (int i = 0; i < inputs.GetLength(0); i++)
            {
                int v = indexes.Get(inputs[i, 0]);

                for (int j = 1; j < inputs.GetLength(1); j++)
                {
                    graph.AddEdge(v, Index(inputs[i, j]));
                }
            }
        }
Пример #2
0
        public void LinearProbingHashSymbolTableTest()
        {
            int[] xs = { 3, 4, 5, 2, 6 };
            var   st = new LinearProbingHashSymbolTable <int, int>(xs.Length * 2);

            for (int i = 1; i <= xs.Length; i++)
            {
                // can not use index 0! default(int) == 0
                st.Put(i, xs[i - 1]);
            }
            int v;

            for (int i = 1; i <= xs.Length; i++)
            {
                if (st.TryGet(i, out v))
                {
                    Assert.Equal(xs[i - 1], v);
                }
                else
                {
                    Assert.False(true);
                }
            }
        }