Проблема с памятью

112
28 сентября 2021, 22:00

Практика «Частотность N-грамм»

В проверяющей программе возникает проблема с памятью: MemoryLimit. Подскажите что нужно переделать в коде, чтобы решить эту проблему? Пример моего кода:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TextAnalysis
{
    static class FrequencyAnalysisTask
    {
        public static Dictionary<string, Dictionary<string,int>> GetBigramms(List<List<string>>list, Dictionary<string, Dictionary<string, int>> dictionaryNotSort)
        {
            foreach (var e in list)
                for (var i = 0; i < e.Count; i++)
                {
                    if (i == e.Count - 1)
                        continue;
                    else
                    {
                        DictionaryCheckAndAdd(dictionaryNotSort, e[i], e[i + 1]);
                    }
                    if (e.Count >= 3)
                    {
                        if (i == e.Count - 2)
                            continue;
                        else
                        {
                            DictionaryCheckAndAdd(dictionaryNotSort, e[i] + " " + e[i + 1], e[i + 2]);
                        }
                    }      
                }
            return dictionaryNotSort;
        }
        public static Dictionary<string,Dictionary<string,int>> DictionaryCheckAndAdd(Dictionary<string, Dictionary<string,int>> dictionary, string key, string value)
        {
            if (dictionary.ContainsKey(key))
            {
                foreach (Dictionary<string, int> e in dictionary.Values)
                {
                    if (e.ContainsKey(value))
                        e[value]++;
                    else
                        e.Add(value, 1);
                }
            }
            else
            {
                var keyValues = new Dictionary<string, int>();
                keyValues.Add(value, 1);
                dictionary.Add(key, keyValues);
            }
            return dictionary;
        }
        public static Dictionary<string, string> GetSortDictionaryMain(Dictionary<string, Dictionary<string, int>> dictionary, Dictionary<string,string> result)
        {
            foreach (var e in dictionary.Keys)
            {
                if (dictionary[e].Count == 1)
                {
                    foreach (var r in dictionary[e].Keys)
                    {
                        result.Add(e, r);
                        break;
                    }
                }
                else
                    result.Add(e, GetSortDictionary(dictionary[e]));  
            }
            return result;
        }
        public static string GetSortDictionary(Dictionary<string, int> keyValues)
        {
            var maxValue = 0;
            var endWord = "";
            foreach (var pair in keyValues)
            {
                if (pair.Value > maxValue)
                {
                    maxValue = pair.Value;
                    endWord = pair.Key;
                }
                else
                {
                    if (pair.Value == maxValue)
                        if (string.CompareOrdinal(pair.Key, endWord) < 0)
                            endWord = pair.Key;
                }
            }
            return endWord;
        }
        public static Dictionary<string, string> GetMostFrequentNextWords(List<List<string>> text)
        {
            var dictionaryNotSort = new Dictionary<string, Dictionary<string,int>>();
            var result = new Dictionary<string, string>();
            return GetSortDictionaryMain(GetBigramms(text, dictionaryNotSort), result);
        }
    }
}
READ ALSO
Корректно оформить строку

Корректно оформить строку

Получаю из базы данных строку valuesОна представляет собой числа через запятую

130
Поднять объект в воздух [закрыт]

Поднять объект в воздух [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

109
Удалить систему управления версиями в VS 2019

Удалить систему управления версиями в VS 2019

Возможно удалить систему управления версиями из решения в Visual Studio 2019 с помощью интерфейса?

177