Не понимаю часть того, что вы спрашиваете, но я предоставлю отличный способ сравнить две строки, которые затем можно использовать для сравнения созданного вами словаря с n перестановками.
В информатике и математике существует понятие, называемое Расстояние Левенштейна , которое используется для измерения разницы между двумя последовательностями символов.
Это отличная база длялитературный анализ и вычислительный способ сравнения строк, и вы можете использовать его, чтобы определить, сколько изменений потребуется, чтобы получить от одной строки к другой посредством вставок, удалений и подстановок.
Математически это расстояниестрок a и b измеряется следующим образом:
Какой-то код псевдо для Расстояние Левенштейна :
function LevenshteinDistance(char s[1..m], char t[1..n]):
// for all i and j, d[i,j] will hold the Levenshtein distance between
// the first i characters of s and the first j characters of t
// note that d has (m+1)*(n+1) values
declare int d[0..m, 0..n]
set each element in d to zero
// source prefixes can be transformed into empty string by
// dropping all characters
for i from 1 to m:
d[i, 0] := i
// target prefixes can be reached from empty source prefix
// by inserting every character
for j from 1 to n:
d[0, j] := j
for j from 1 to n:
for i from 1 to m:
if s[i-1] = t[j-1]:
substitutionCost := 0
else:
substitutionCost := 1
d[i, j] := minimum(d[i-1, j] + 1, // deletion
d[i, j-1] + 1, // insertion
d[i-1, j-1] + substitutionCost) // substitution
return d[m, n]
Другим аналогичным методом является расстояние Дамерау – Левенштейна .
По моему опыту, это то, чтоЯ рекомендуюd, чтобы найти, какие из них являются наиболее близкими, поскольку вы можете получить расстояние (любой формулы) между двумя последовательностями ДНК, а затем выбрать ту, которая имеет наименьшее расстояние из всех сравнений.Поскольку это звучит как домашнее задание, я не хочу предлагать решение, так как вам нужно учиться, но есть много ресурсов в Интернете, и это должно дать хорошее начало тому, что вы пытаетесь сделать.