Moneybag Posted May 4, 2018 at 11:25 PM Report #610455 Posted May 4, 2018 at 11:25 PM 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 ?
Tiago Taquelim Posted May 4, 2018 at 11:50 PM Report #610456 Posted May 4, 2018 at 11:50 PM (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 May 4, 2018 at 11:51 PM by Tiago Taquelim
vikcch Posted May 5, 2018 at 01:22 AM Report #610457 Posted May 5, 2018 at 01:22 AM 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... 1 Report
Moneybag Posted May 7, 2018 at 10:13 PM Author Report #610469 Posted May 7, 2018 at 10:13 PM 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now