Jump to content

Recommended Posts

Posted

Boas Malta

Quero faze uma aplicação que contrua uma lista num ficheiro .txt com todas as combinações possiveis de A a Q com 10 caracters de tamanho por palavra. Se não me engano é 16 elevado a 10 = 1 099 511 627 776 palavras escritas na lista gerada pela aplicação.

E quero contruir essa lista de forma aleatoriamente ou seja que a aplicação na contrução da lista não vá incrementando as letras por linha do tipo:

AAAAAAAAAA

AAAAAAAAAB

AAAAAAAAAC

 

mas que contruia a lista assim:

 

ADEGHJNCEA

FEACMNFGEL

DALHIENNDE

 

E para a app fazer o que prentendo acho que devo usar uma variavel random e nesse caso a app têm de verificar se esta mesma palavra gerada aleatoriamente ja foi escrita na lista:

Algoritmo: 

while (ficheiro.lines < 1 099 511 627 776)

palavra = randomString();

if(!exists(palavra)

    writeline

Ou seja com etse algoritmo que pensei até agora, por cada linha criada será necessário procurar se a palavra gerada, existe num ficheiro que acabará por ter biliões de linhas. Gostava de saber se existe uma maneira mais eficiente de construir esta aplicação ?

Posted (edited)

Olá, já que estás a usar C# e queres criar números únicos podes usar a estrutura GUID, https://msdn.microsoft.com/en-us/library/system.guid.newguid(v=vs.110).aspx, que cria números/chaves de forma random e unicas, por exemplo, "0f8fad5b-d9cb-469f-a165-70867728950e".

Mas se quiseres mesmo utilizar esse método que estas a utilizar com as letras, não te recomendava a verificar assim, não sei até que ponto isso iria demorar.

O que podes fazer é criar uma forma de gerar as tuas "chaves" únicas com um método, utilizando algum algoritmo existente ou podes até pensar tu num.

Edited by Tiago Taquelim
Posted

1 trilião de palavras com 10 caracteres são 10 triliões de caracteres (10 Terabytes) a 1 byte por caracteres, como só usas 16 caracteres diferentes podes reduzir para metade...4 bits por caracter...

completar essa lista com palavras criadas aleatoriamente iria ser quase impossivel.... imagina que já só te faltava uma palavra, olha só a quantidade de vezes que o computador tinha que gerar palavras até acertar a que faltava...

o que podias fazer era preencher uma lista (List<string>), com AAAAAAAAAA, AAAAAAAAAB, etc... e escolheres um index aleatório (de zero ao count-1 da list) e copiares para o *.txt...  depois removeres esse elemento da List<string>.... assim já não precisavas de verificar se existe no *.txt...

o maximo de elementos da list são 2.147.483.647 (2^31-1)... tinhas de criar umas poucas...

  • Vote 1
Posted
On 5/5/2018 at 2:22 AM, vikcch said:

1 trilião de palavras com 10 caracteres são 10 triliões de caracteres (10 Terabytes) a 1 byte por caracteres, como só usas 16 caracteres diferentes podes reduzir para metade...4 bits por caracter...

completar essa lista com palavras criadas aleatoriamente iria ser quase impossivel.... imagina que já só te faltava uma palavra, olha só a quantidade de vezes que o computador tinha que gerar palavras até acertar a que faltava...

o que podias fazer era preencher uma lista (List<string>), com AAAAAAAAAA, AAAAAAAAAB, etc... e escolheres um index aleatório (de zero ao count-1 da list) e copiares para o *.txt...  depois removeres esse elemento da List<string>.... assim já não precisavas de verificar se existe no *.txt...

o maximo de elementos da list são 2.147.483.647 (2^31-1)... tinhas de criar umas poucas...

Gostei da tua abordagem, mas acho que vou optar por contruir a lista de modo incremental e depois vou criar um script para baralhar a lista de forma aleatória. Obrigado pela ajuda.

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
×
×
  • 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.