Пример #1
0
        static void Main(string[] args)
        {
            var t = TreeCreator.CreateTree();
            //DepthPreOrderNLR(t);
            //DepthInOrderLNR(t);
            //DepthPostOrderLRN(t);

            var q = new Queue <TreeNode>();

            BreadthSearch.BreadthFirstSearch_BottomTopLeftRight(t, q, new Stack <TreeNode>());
            System.Console.WriteLine();
            System.Console.WriteLine("Program end.");
            System.Console.Read();
        }
Пример #2
0
        static void Main(string[] args)
        {
            TreeCreator<int> creator = new TreeCreator<int>();
            creator.ConsoleReader();
            Tree<int> sampleTree = creator.CreateTree();

            TreeInterator<int> interator = new TreeInterator<int>(sampleTree);
            Console.WriteLine("Enter sum(int) of elements to look for:");
            int seekedSum = int.Parse(Console.ReadLine());
            interator.DepthFirstSearch(seekedSum);
            Console.WriteLine(interator.NodesInformation);

            Console.WriteLine("Lognest path from root to leaf: " + interator.LongestPathStepCount + " jumps.");

            Console.WriteLine(interator.LongestPathSteps);
            Console.WriteLine("Paths sum equlas to {0}:", seekedSum);
            Console.WriteLine(interator.PathsWithSpecifedSum);
        }
Пример #3
0
        static void Main(string[] args)
        {
            string filePath = @"..\..\..\data\";            //visual studio
            //string filePath = @".\data\";//visual studio code (project scope)
            //string filePath = @".\C45\data\";//visual studio code (solution scope)
            string fileName = "connect-4.csv";
            IList <IList <string> > data        = new List <IList <string> >();
            IList <Column>          columns     = new List <Column>();
            IList <string>          columnNames = null;
            var distinctValues = new List <HashSet <string> >();

            #region Read File
            Console.WriteLine("Start Reading File");
            bool isFirstLine = true;

            foreach (string line in File.ReadLines(Path.Combine(filePath, fileName)))
            {
                if (isFirstLine)
                {
                    isFirstLine = false;
                    columnNames = line.Split(',');
                    for (int i = 0; i < columnNames.Count; i++)
                    {
                        distinctValues.Add(new HashSet <string>());
                    }
                    continue;
                }
                data.Add(line.Split(','));
            }
            Console.WriteLine("End Reading File");
            Console.WriteLine("--------------------------");
            #endregion

            #region Split Data
            Console.WriteLine("Start Splitting Data");
            IList <IList <string> > trainingData = new List <IList <string> >();
            IList <IList <string> > testData     = new List <IList <string> >();
            int seed = 13;
            IList <IList <string> > shuffledData = ShuffleListOfLists(data, seed);
            float testSize   = 0.3f;
            int   testLength = (int)(data.Count * testSize);

            for (int i = 0; i < testLength; i++)
            {
                testData.Add(shuffledData[i]);
            }
            for (int i = testLength; i < shuffledData.Count; i++)
            {
                trainingData.Add(shuffledData[i]);
            }
            Console.WriteLine($"Test set: {testLength} records");
            Console.WriteLine($"Traing set: {shuffledData.Count - testLength} records");
            Console.WriteLine("End Splitting Data");
            Console.WriteLine("--------------------------");
            #endregion

            #region Process Data
            Console.WriteLine("Start Processing Data");
            for (int i = 0; i < trainingData.Count; i++)
            {
                for (int j = 0; j < trainingData[i].Count; j++)
                {
                    if (trainingData[i][j] != "?")
                    {
                        distinctValues[j].Add(trainingData[i][j]);
                    }
                }
            }

            for (int i = 0; i < columnNames.Count; i++)
            {
                bool isNominal = false;
                foreach (string val in distinctValues[i])
                {
                    if (!double.TryParse(val, out double val2))
                    {
                        isNominal = true;
                        break;
                    }
                }
                Column col = new Column(columnNames[i], i, isNominal);
                col.Values = distinctValues[i].ToList();
                columns.Add(col);
            }
            Console.WriteLine("End Processing Data");
            Console.WriteLine("--------------------------");
            #endregion

            #region Create Tree
            Console.WriteLine("Start Creating Tree");
            Node tree = TreeCreator.CreateTree(trainingData, columns);
            Console.WriteLine("End Creating Tree");
            Console.WriteLine("--------------------------");
            #endregion

            #region Predict

            /*Console.WriteLine("Deciding");
             * int rightDecisions = 0;
             * int missingRows = 0;
             * foreach (var row in data)
             * {
             *      if (row.Any(s => s == "?"))
             *      {
             *              missingRows++;
             *              continue;
             *      }
             *      string decision = tree.Decide(row);
             *      if (decision == row[row.Count - 1])
             *              rightDecisions++;
             *      //Console.WriteLine($"[{decision}] | [{row[row.Count - 1]}]");
             * }
             * Console.WriteLine($"{rightDecisions}/{data.Count - missingRows} right decisions");
             * Console.WriteLine("Decided");
             * Console.WriteLine("--------------------------");*/
            Console.WriteLine("Start Predicting");
            int rightPredictions = 0;
            foreach (var row in testData)
            {
                string decision = tree.Decide(row);
                if (decision == row[row.Count - 1])
                {
                    rightPredictions++;
                }
            }
            Console.WriteLine($"{rightPredictions}/{testData.Count} right predictions");
            Console.WriteLine("End Predicting");
            Console.WriteLine("--------------------------");
            #endregion

            Console.WriteLine("Done!");
        }