Jump to content
Sign in to follow this  
alves077

[Dúvida] problema distancia de hamming

Recommended Posts

alves077

Boa tarde,

Tenho um problema que estou com dúvidas em certas partes da resolução. Tenho uma cadeia de caracteres, que o alfabeto, tenho que encriptar a cadeia, colocando cada no lugar de cada caracter o seu correspondente no alfabeto andando a distancia de hamming dada. Por exemplo se a distancia for 3, e tiver um a passa para d. Só que não sei como resolver o problema das extremidades.

Como tenho o alfabeto declarado estaticamente como cadeia de caracteres. Não sei bem como simular como se a cadeia fosse circular, mas não sendo...

Outro problema é que a distancia tanto pode ser positiva ou negativa. Como estava pensar fazer não é possível andar nos dois sentidos...

Alguma ideia que me ajuda?

Um começo que tenho:

def encripta(palavra,num):
   alfabeto = 'abcdefghijklmnopqrtuvxz'
   palavra_e = ""
   for i in range(len(palavra)):
    if(alfabeto.index(texto[i]) < len(alfabeto) - num):
	    palavra_e = palavra_e + texto[i]
   else:
	   pass

Só que agora estou a pensar como resolver e estou um bocado encravado...

Obrigado pela atenção,

alves077

Share this post


Link to post
Share on other sites
Pedro C.

Olá,

O teu problema pode ser resolvido de várias maneiras. A mais fácil é criares a repetição do alfabeto e teres algo como:

alfabeto = alfabeto + alfabeto + alfabeto

Desta maneira, sabendo que o alfabeto do meio começa em -index: 23 (se não me engano)-, seguramente podes fazer a distância total de 23 caracteres para trás ou para a frente que não sairás da string.

Não é contudo a maneira mais graciosa. Para emulares uma cadeia circular poderás fazer um contador circular e isto pode ser feito com trignometria (da mesma maneira que divides um circulo em 2pi ou 360 também podes dividi-lo em 23). Assim, independentemente do teu ângulo terias o resultado correcto (porque o coseno de 20 é igual ao coseno de 360+20, por exemplo). Para alem disso conseguirias evitar as statement if de todo e com algum trabalho até poderias evitar o ciclo for (de python, pois ele tem de acontecer pode é acontecer mais rápido).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.