コード例 #1
0
        static void Main()
        {
            Stopwatch sw = new Stopwatch();
            TrieNode start = new TrieNode();
            Dictionary<string, int> wordsInDictionary = new Dictionary<string, int>();
            var allWords = SetInputText();

            List<string> wordsToSearch = new List<string>();
            // change number to increase searched words count
            for (int i = 0; i < 50; i++)
            {
                wordsToSearch.Add(allWords[i].ToString());
            }

            AddWordsForSearchInDictionary(sw, wordsToSearch, wordsInDictionary);
            AddWordsForSearchInTrie(sw, start, wordsToSearch);

            IncrementOccuranceCountTrie(sw, start, allWords);
            IncrementOccuranceCountDictionary(sw, wordsInDictionary, allWords);

            Console.WriteLine("Searched words count trie: ");
            foreach (var word in wordsToSearch)
            {
                Console.WriteLine("{0}: {1}", word, start.CountWords(start, word));
            }

            Console.WriteLine("\nSearched words count dictionary: ");
            foreach (var item in wordsInDictionary)
            {
                Console.WriteLine("{0}: {1}", item.Key, item.Value);
            }
        }
コード例 #2
0
 private static void AddWordsForSearchInTrie(Stopwatch sw, TrieNode start, List<string> words)
 {
     sw.Start();
     foreach (var item in words)
     {
         start.AddWord(start, item.ToString());
     }
     sw.Stop();
     Console.WriteLine("Time to populate the trie: {0}\n", sw.Elapsed);
 }
コード例 #3
0
        private static void IncrementOccuranceCountTrie(Stopwatch sw, TrieNode start, MatchCollection allWords)
        {
            sw.Restart();
            foreach (var word in allWords)
            {
                start.AddOccuranceIfExists(start, word.ToString());
            }

            sw.Stop();
            Console.WriteLine("Adding searched words count trie for: {0}", sw.Elapsed);
        }
コード例 #4
0
ファイル: Trie.cs プロジェクト: ekostadinov/CoursesProjects
        private void AddOccuranceIfExists(TrieNode node, string word, int indexInWord)
        {
            if (word.Length == indexInWord)
            {
                node.Words += 1;
            }
            else
            {
                int nextCharIndex = word[indexInWord] - 'a';
                indexInWord++;
                node.Prefixes += 1;

                if (node.edges[nextCharIndex] == null)
                {
                    return;
                }
                else
                {
                    AddOccuranceIfExists(node.edges[nextCharIndex], word, indexInWord);
                }
            }
        }
コード例 #5
0
ファイル: Trie.cs プロジェクト: ekostadinov/CoursesProjects
        private TrieNode AddWord(TrieNode node, string word, int indexInWord)
        {
            if (word.Length != indexInWord)
            {
                node.Prefixes += 1;

                int index = word[indexInWord] - 'a';
                indexInWord++;

                if (node.edges[index] == null)
                {
                    node.edges[index] = new TrieNode();
                }

                node.edges[index] = AddWord(node.edges[index], word, indexInWord);
            }

            return node;
        }
コード例 #6
0
ファイル: Trie.cs プロジェクト: ekostadinov/CoursesProjects
 public int CountWords(TrieNode node, string word)
 {
     return this.CountWords(node, word, 0);
 }
コード例 #7
0
ファイル: Trie.cs プロジェクト: ekostadinov/CoursesProjects
 public int CountPrefix(TrieNode node, string word)
 {
     return this.CountPrefix(node, word, 0);
 }
コード例 #8
0
ファイル: Trie.cs プロジェクト: ekostadinov/CoursesProjects
 public TrieNode AddWord(TrieNode node, string word)
 {
     return this.AddWord(node, word, 0);
 }
コード例 #9
0
ファイル: Trie.cs プロジェクト: ekostadinov/CoursesProjects
 public void AddOccuranceIfExists(TrieNode node, string word)
 {
     AddOccuranceIfExists(node, word, 0);
 }
コード例 #10
0
ファイル: Trie.cs プロジェクト: ekostadinov/CoursesProjects
 private int CountWords(TrieNode node, string word, int indexInWord)
 {
     if (word.Length == indexInWord)
     {
         return node.words;
     }
     else
     {
         int nextCharIndex = word[indexInWord] - 'a';
         indexInWord++;
         if (node.edges[nextCharIndex] == null)
         {
             return 0;
         }
         else
         {
             return CountWords(node.edges[nextCharIndex], word, indexInWord);
         }
     }
 }