Верно ли нахожу Индекс совпадений для отдельной буквы и общий в шифре Виженера?
Пытаюсь определить длину в тексте, зашифрованном Виженером. Правильно ли я нахожу Индекс Совпадений для отдельной буквы, формула: n*(n-1)/L*(L-1) для каждой буквы. Где n - число раз, когда буква встречается в строке, L - длина строки. Просто по итогу, если буква встречается всего один раз, то её ИС будет = 0, нормально ли это?
Так же, подскажите, верно ли я понял, что общий ИС всей строки будет средним арифметическим всех ИС букв?
Заранее спасибо за помощь.
Ответы (1 шт):
Автор решения: kos channel
→ Ссылка
Формула используется верно. ИС для каждой длины ключа находится по ней. Пример реализации на C++:
for (int key_length = 2; key_length <= max_key_length; key_length++)
{
int tmp_counter = 0;
string substr_result;
for (int i = 0; i < strlen(encoded_text.c_str()); i++)
{
if (++tmp_counter % key_length == 0)
substr_result += encoded_text[i];
}
pair<int, string> _p = pair<int, string>(key_length, substr_result);
key_length_and_substring.push_back(_p);
}