Учитывая набор строк (первый столбец) вместе с количеством (второй столбец), например:
aaaa 10
aaab 5
abbb 3
cbbb 2
dbbb 1
cccc 8
Существуют ли какие-либо алгоритмы или даже реализации (в идеале в виде исполнителя Unix, R или python), которые сворачивают этот набор в новый набор на основе заданного расстояния Хэмминга.
- Сворачивание подразумевает добавление счетчика
- Строки с меньшим числом сворачиваются в строки с большим числом.
Например, скажем, для расстояния Хэмминга 1 приведенный выше набор свернет вторую строку aaab
в aaaa
, поскольку они находятся на расстоянии 1 Хэмминга друг от друга, а aaaa
имеет более высокий счет. Свернутая запись будет иметь общий счет, здесь aaaa 15
Таким образом, для этого набора мы получили бы следующий свернутый набор:
aaaa 15
abbb 6
cccc 8
В идеале реализация должна быть эффективной, поэтому приветствуются даже эвристики, не гарантирующие оптимального решения.
Дополнительная предыстория и мотивация
Вычисление расстояния Хэмминга между двумя строками (парой) реализовано в большинстве языков программирования. Решение грубой силы будет вычислять расстояние между всеми парами. Может быть, нет никакого способа обойти это. Однако, например. Я полагаю, что эффективные решения позволили бы избежать вычисления расстояния для всех пар и т. д. Возможно, есть умные способы сохранить некоторые вычисления, основанные на метрической теории (поскольку расстояние Хэмминга является метрикой), например. если расстояние Хэмминга между x и z равно 3, а x и y равно 3, я могу не вычислять между y и z. Может быть, есть умный подход k-mer или, может быть, какое-то эффективное решение для постоянного расстояния (скажем, d=1
).
Даже если бы это было только решение грубой силы, мне было бы любопытно, было ли это реализовано раньше и как его использовать (в идеале, без необходимости реализовывать его самому).