Alternativa à distância de Hamming para permutações

8

Eu tenho duas cordas, onde uma é uma permutação da outra. Eu queria saber se existe uma alternativa à distância de Hamming, onde, em vez de encontrar o número mínimo de substituições necessárias, ele encontraria o número mínimo de translocações necessárias para ir da string a para a string b.

Minhas strings são sempre do mesmo tamanho e sei que não há erros / substituições.

Exemplo:

1 2 3 4 5
3 2 5 4 1

Isso me daria dois:

3 2 5 4 1 (start)
-> 3 2 1 4 5 
-> -> 1 2 3 4 5

Se isso já estiver implementado em R, seria ainda melhor.

user1357015
fonte
3
Parece que você deseja a distância de edição (também conhecida como distância de Levenshtein)?
Veja esta pergunta no Stackoverflow .
The Unfun Cat
2
No seu exemplo específico em que os caracteres da sequência têm uma ordem implícita, convém contar as inversões. pt.wikipedia.org/wiki/Inversion_(discrete_mathematics)
Joe
11
Pode ser falso chamar todas essas métricas de funções de distância, pois muitas podem não obedecer à desigualdade do triângulo.
Nicholas Mancuso
11
Por translocação, você quer dizer tirar a imagem espelhada de parte da sequência?
highBandWidth

Respostas:

3

Encontrar a distância mínima é chamado de problema "Classificação por translocação". Parte de um resumo de um artigo :

"Dados dois genomas multicromossômicos assinados Pi e Gamma com o mesmo conjunto de genes, o problema de classificar por translocações (SBT) é encontrar uma sequência mais curta de translocações que transformem Pi em Gamma, onde o comprimento da sequência é chamado de distância de translocação entre Pi e Gamma. Em 1996, Hannenhalli forneceu pela primeira vez a fórmula da distância de translocação, com base na qual O(n3)algoritmo para SBT foi dado. Em 2005, Anne Bergeron et al. revisitou esse problema e deu uma prova elementar da fórmula da distância de translocação que leva a uma novaO(n3) algoritmo para SBT ".

O que é chamado "translocação" aqui é chamado de transposição, isto é, uma permutação de exatamente dois elementos em uma lista, na linguagem combinatória tradicional.

Bit a bit
fonte
É exatamente disso que eu preciso! Você conhece alguma implementação de trabalho, em C ou R? Parece que não há um no jornal!
user1357015
@ user1357015 pesquise no google um pouco e veja as referências deles, tenho certeza que você encontrará uma implementação. Eu também vou olhar. Além disso, observe a última linha que foi adicionada por alguém - você pode estar procurando algo um pouco diferente, chamado "reversões". Pavel Pevzner tem vários artigos sobre isso.
Bitwise
@ user1357015 encontrou algum código python aqui e isso também pode ser útil.
Bitwise
@ Bitwise Observe que o Stack Overflow é o site que você deseja acessar para obter o código real.
Raphael
0

Precisamos encontrar o número mínimo de transposições que levam uma string uma para outra string b, Onde uma,bsão permutações. Parece que você está procurando a distância mínima entre dois vértices dadosuma,bSn no gráfico de transposição completo, que é o gráfico de Cayley de Sn gerado pelo conjunto de todas as transposições.

Ashwin Ganesan
fonte