Como você está procurando palavras que sejam inferiores a 20 characters , isso inclui palavras com 1, 2, 3 .. or 19 characters de comprimento (não tenho certeza se há uma palavra no idioma inglês com 19 caracteres). O número total de possibilidades é então 26 19 + 26 18 + 26 17 .. + 26 1 .
A maneira da força bruta de abordar esse problema é criar uma lista que inclua todos os 26 alfabetos do idioma inglês. Em seguida, dentro de um loop for i = 0; i < 20; i++ , você cria todas as palavras possíveis de comprimento i usando os 26 caracteres da matriz de alfabeto. A recursão é sua amiga aqui. Depois de ter uma palavra de comprimento i , você pode passá-la por meio de filtering rules a ser usado para definir palavras no idioma inglês, por exemplo nenhuma palavra pode existir sem uma vogal como mencionado por slm.
Nota: Escrever o chamado filtering rules não é uma tarefa trivial. Por exemplo, é bastante fácil verificar se a palavra contém aieou , mas passar essa verificação não significa que você encontrou uma palavra ... ainda há um longo caminho a percorrer.
Por quanto tempo esse método de força bruta será usado?
Jimmij postou que 26^20 = 19928148895209409152340197376 ~ 2e28 . Agora, digamos que seu computador tenha um quad core 1.5 GHz processor e seu programa possa explorar cada núcleo 100% . Isso lhe dá 1.5e9 x 4 = 6e9 ciclos em um segundo. Cada permutação em si levará multiple CPU cycles , já que tem que considerar 26 characters para cada permutação, etc. Esse número, no entanto, é insignificante quando comparado ao # of permutations , então digamos que cada permutação leva 6 instructions (e cada instrução leva 1 CPU cycle ) para simplificar as contas. Finalmente, você recebe (6 instructions/permutation x 2e28 permutations)/(6e9 instructions/second) = (2e19 seconds) ~ 6.35e11 years .