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.


3
Parece que você deseja a distância de edição (também conhecida como distância de Levenshtein)?


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.


É 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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.