Матч
272, Расстояние Хемминга (HammingDistance)
Дивизион 2, Уровень
1
Расстоянием Хемминга между двумя
строками, содержащими бинарный код числа, называется количество позиций, в
которых они отличаются. Например, строки “11010” и “01100” различаются в первой,
третьей и четвертой позициях, поэтому расстояние между ними равно 3.
Массив строк numbers содержит
набор строк одинаковой длины. Необходимо среди них найти две строки, расстояние
Хемминга между которыми наименьшее.
Класс: HammingDistance
Метод: int
minDistance(vector<string> numbers)
Ограничения:
numbers содержит от 2 до 50, все элементы numbers содержат одинаковое
количество символов ‘0’ или ‘1’.
Вход. Массив строк numbers.
Выход. Наименьшее расстояние Хемминга между двумя строками из
массива numbers.
Пример входа
numbers |
{"11010", "01100"} |
{"00", "01", "10",
"11"} |
{"000", "011", "101",
"110"} |
{"000000", "000111",
"111000", "111111"} |
Пример выхода
3
1
2
3
РЕШЕНИЕ
элементарные вычисления
Перебираем все пары строк, для
каждой из которой вычисляем расстояние Хемминга при помощи функции Hamming.
Среди всех расстояний находим наименьшее.
ПРОГРАММА
#include <cstdio>
#include <vector>
#include <string>
using namespace std;
int Hamming(string a, string b)
{
int i, c;
for(c = i = 0; i < a.size(); i++)
if (a[i] != b[i]) c++;
return c;
}
class HammingDistance
{
public:
int minDistance(vector<string> numbers)
{
int i, j, temp, res = 2000000000;
for(i = 0; i < numbers.size(); i++)
for(j = i + 1; j < numbers.size();
j++)
{
temp = Hamming(numbers[i],numbers[j]);
if (temp < res) res = temp;
}
return res;
}
};