Если вы изучаете Java, я бы посоветовал вам сначала сосредоточиться на моделировании проблемы с классами и методами Java.
Марковская цепь - это модель или статистическая проработка исходного текста, верно?Используя его для моделирования текста, он обычно описывает, как часто за каждым словом следуют слова.(обычно вы разделяете текст на границы слов).Такое ощущение, что ему нужен класс;это можно назвать MarkovChain
.
В классе MarkovChain вам нужно что-то для хранения каждого слова, встречающегося в тексте, и сопоставления этого слова с другими словами в тексте, а также для подсчета частоты этих других слов.
Предположим, слово "и".В тексте «и» сопровождается «четыре раза» и «затем» 3 раза.Таким образом, вам понадобится некоторая структура данных для хранения чего-то вроде этого:
and -->
the (4)
then (3)
Один из способов сделать это - использовать ArrayList для хранения всех слов, затем Map<T1,T2>
, который содержит отношения между словами ичастота следующих слов.В этом случае T1, вероятно, является строкой, а T2, вероятно, ArrayList пар - строка и число (целое число) для этой строки.
Но подождите, теперь вам не нужна база ArrayList<>
для хранения слов, потому что это всего лишь ключи на карте.
... и так далее.Следующим шагом будет выяснить, как заполнить эту структуру данных.Вероятно, это внутренний (частный) метод, который вызывается, когда вызывающая сторона создает экземпляр класса MarkovChain с начальным текстом.
Возможно, вы также хотите, чтобы этот класс MarkovChain предоставил другой метод, открытый., вызывающие стороны вызывают, когда они хотят сгенерировать некоторую случайную последовательность из цепочки, полагаясь на вероятности, основанные на частотных счетчиках.
...
Это всего лишь один из способов думать о моделировании проблемы.
В любом случае, я бы сосредоточился на этом упражнении по моделированию / дизайну, прежде чем писать код.