Генерация комбинации букв - PullRequest
0 голосов
/ 03 июля 2010

Учитывая набор букв, скажем, от A .. F, как можно сгенерировать комбинацию этих букв для определенной длины. т.е. для длины 4, сгенерируйте всю строку, содержащую эти буквы {AAAA, ABCD, ...} (включая дубликаты). Я не могу понять, как получить код, который это делает. Это относится к игре Mastermind, которую я пытаюсь симулировать. Есть ли алгоритм для выполнения этого поколения.

С уважением,
Негр

Ответы [ 2 ]

2 голосов
/ 03 июля 2010

Существует алгоритм под названием Heap's Algorithm для генерации перестановок. Это может удовлетворить ваши цели. Я нашел пример реализации здесь

1 голос
/ 03 июля 2010

Я не уверен, как называется такой алгоритм, но он рекурсивный.То есть имейте метод, который вычисляет один символ, и просто продолжайте вызывать себя, пока вы не достигнете желаемой длины строки, которую вы хотите, затем начните заполнять свой массив.Вот пример кода C #, который должен помочь:

    public void GetPermutations()
    {
        string currentPrefix = ""; // Just a starting point
        int currentLength = 1; // one-based
        int desiredLength = 4; // one-based
        string alphabet = "ABCDEF"; // Characters to build permutations from
        List<string> permutations = new List<string>();

        FillPermutations(currentPrefix, currentLength, alphabet, desiredLength, permutations);
    }

    public void FillPermutations(string currentPrefix, int currentLength, string alphabet, int desiredLength, List<string> permutations)
    {
        // If we're not at the desired depth yet, keep calling this function recursively
        // until we attain what we want.
        for (int i = 0; i < alphabet.Length; i++)
        {
            string currentPermutation = currentPrefix + alphabet[i].ToString();

            if (currentLength < desiredLength)
            {
                // Increase current length by one and recurse.  Current permutation becomes new prefix
                int newCurrentLength = currentLength + 1;
                FillPermutations(currentPermutation, newCurrentLength, alphabet, desiredLength, permutations);
            }
            else
            {
                // We're at the desired length, so add this permutation to the list
                permutations.Add(currentPermutation);
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...