Каждая перестановка алфавита до 29 символов? - PullRequest
3 голосов
/ 06 января 2011

Я пытаюсь написать программу, которая будет генерировать текстовый файл с каждой возможной перестановкой алфавита от одного символа до двадцати девяти символов.Я выбрал 29 как самое длинное английское слово, которое все знают, это antidisestablishmentarianism длиной 28 символов.Есть более длинные, но они в основном очень технические и непонятные.

Я понимаю, что это создаст огромное количество строк.Однако я не знаю, с чего начать или даже как выяснить, сколько комбинаций это сгенерирует.

Ответы, пожалуйста, для решений на PHP, Обработка , C ++ или Java (ятолько знакомый с ними, PHP предпочтительнее, но, вероятно, не лучший для этого я должен представить).

Или даже просто псевдокод / ​​идеи будут оценены.

Кроме того, прежде чем кто-то это скажет, это не для грубого принуждения или чего-то в этом роде.Я художник, хотя и немного неизвестный и не совсем понимающий мои концепции.

Ответы [ 13 ]

1 голос
/ 06 января 2011

Вот генератор перестановок, написанный на java http://www.merriampark.com/perm.htm.

Однако, как он упоминает

  //-----------------------------------------------------------
  // Constructor. WARNING: Don't make n too large.
  // Recall that the number of permutations is n!
  // which can be very large, even when n is as small as 20 --
  // 20! = 2,432,902,008,176,640,000 and
  // 21! is too big to fit into a Java long, which is
  // why we use BigInteger instead.
  //----------------------------------------------------------

Поскольку ваш n равен 29, вы будете ждать долго, много времени.Он слишком велик, о чем EboMike пытается рассказать в своих комментариях.

0 голосов
/ 11 мая 2011

Даже если бы вы могли сохранить это на диске, как указывал вервидот, у вас не хватило бы времени на это.

Просто генерация (и не сохранение) всех 6-буквенных вариантов заняла на моем компьютере 24 секунды:

$ time perl letters.pl

real    0m24.837s
user    0m24.765s
sys     0m0.030s

Что составляет 7,7 × 10 ^ -8 с на слово. Это означает, что для этого потребуется 8,4 × 10 ^ 33 с или 2,6 × 10 ^ 26 лет.

Вам нужно больше думать о своем алгоритме.

0 голосов
/ 06 января 2011

Самый простой способ, с помощью которого я могу придумать каждую перестановку от 1 до 29 символов в псевдокоде:

loop from i = 1 to 26^29 or 27^29 if you want to include spaces
{
   convert i to base 26 or 27;
   translate each number to the corresponding letter;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...