Как сохранить промежуточное состояние генератора для дальнейшего перезапуска

  • Автор темы Автор темы DevOps
  • Дата начала Дата начала

DevOps

Client
Регистрация
30.11.2020
Сообщения
497
Реакции
316
Баллы
63
Добрый день форум. Прошу совета как решить следующую проблему
Имеется следующий генератор, который выдает все возможные значения из вводных данных
В текущем случае это предоставление всех возможных комбинаций в 22 ячейках каждая из которых принимает одно из 8 состояний

C#:
Развернуть Свернуть Копировать
using (var writer = new StreamWriter(new BufferedStream(File.OpenWrite(@"C:\Users\Maersk\Desktop\outlist.txt"), 10 * 1024 * 1024)))
{
  string[] a_s =
    {
        "011001", "010101", "100101", "010110", "101010", "011010", "100110", "101001"
    };
    ulong m = 8, n = 22;
    for (ulong i = 0; i < Math.Pow(m, n); i++)
    {
        string s = "";
        ulong ii = i;
        for (ulong j = 0; j < n; j++)
        {
            s = a_s[ii % m] + s;
            ii /= m;
        }
        writer.WriteLine(s);
    }
}
Претензий к самой работе кода нет, но вытекают проблемы следующего плана
Основная проблема это обьем данных. Так как всего ячеек 22 каждая из которых может принимать одно из 8 состояний, то имеем общее количество вариантов 22^8 = 54 875 873 536 вариантов. Каждый вариант строковый который весит 1384 бита (129 байт). Таким образом, общий вес файла будет составлять 9 438 650 248 192 байта, или в пересчете на терабайты, приблизительно 8,58 Тб. Это обстоятельство усугубляется тем, что данные значения предварительные и подлежат обработке, после которой, каждая строка увеличивается в 6 раз. Конечно StreamReader умеет обрабатывать файлы любого размера, но у меня тупо нет такого объема памяти на дисках чтобы записать 54 875 873 536 вариантов предварительных данных.
************
Как можно поправить код таким образом, чтобы он, к примеру, выдавал данные порционно, допустим по 1 000 000 000 вариантов, записывал в файл текущее положение рассчета и при перезапуске ПРОДОЛЖАЛ с места остановки рассчета, а не начинал его заново? Почти неделя "курю форумы" скоро выплюну меха, но адекватного ответа или варианта так и не нашел.
Спасибо
 
i и j сохраняй в файле стороннем и при запуске считывай из этого файла и стартуй циклы не с нуля как сейчас, а с этих самых значений.
 
  • Оценить
Реакции: DevOps и Astraport
i и j сохраняй в файле стороннем и при запуске считывай из этого файла и стартуй циклы не с нуля как сейчас, а с этих самых значений.
Я не могу задать количество выполнений, допустим тот же 1 000 000 000 по счетчику. Код работает в цикле "до упора", ну и плюс еще вложенный цикл
PS В принципе "допер", спасибо, буду пробовать
 
Я не могу задать количество выполнений, допустим тот же 1 000 000 000 по счетчику. Код работает в цикле "до упора", ну и плюс еще вложенный цикл
PS В принципе "допер", спасибо, буду пробовать
можно добавить еще один счетчик, который будет увеличиваться при каждой записи и на него повесить условие 1 000 000 000 , при срабатывание которого будет прерываться цикл и сохраняться состояние i и j
 
  • Оценить
Реакции: DevOps
можно добавить еще один счетчик, который будет увеличиваться при каждой записи и на него повесить условие 1 000 000 000 , при срабатывание которого будет прерываться цикл и сохраняться состояние i и j
Да, я именно так и догадался с Вашего первого коммента, спасибо
Буду сейчас тестить
 
Вопрос закрыт
!ОШИБКА!

Количество состояний не 22^8 а 8^22
Это 73 786 976 294 838 206 464 вариантов, расчет займет несколько лет
 
  • Оценить
Реакции: djaga и edbaz

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)