Здравствуйте, Lloyd, Вы писали:
L>Дык, 2, 3, 4 — это разновидности 1-го.
L>Поскольку слов немного, то каждому слову пожно сопоставить 2-х байтовое число. Поучаем массив 2-х байтовых чисел A.
L>1. Чтобы найти частоты слов, достаточно найти частоты соответствующих 2-х байтовых чисел.
L>2. Чтобы найти частоты пар, достаточно сформировать другой массив 4-х байтовых чисел: B[i] = A[i] + A[i+1] >> 16. И найти частоты этих чисел.
L>3. Для трех слов можно поступить так же, только в формуле будет учавствовать еще и B[i] = A[i] + A[i+1] >> 16 + A[i+2] >> 32
L>4. Разновидность 2-го: B[i] = A[i] + A[i+2] >> 16
Причём, если для пункта 1 можно устроить подсчёт частот через обычный массив, то для остальных пунктов целесообразно будет использовать какой-нибудь список/дерево с хешированием. Например, в C# очень хорошо для этого подойдёт
Dictionary<long, int>
, где первый параметр (ключ) — это число, представляющее пару/тройку слов, а второй параметр (значение) — это счётчик употреблений данной пары/тройки.