Разбиение множества на уникальные последовательности - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день Задача такова: имеется множество А {a,b,c,d ...}. Из этого множества нужно составить уникальные последовательности заданного размера(это часть ассоциативного алгоритма А'приори). Если размер 1, то это соответственно a,b,c,d и тд. Если размер 2, то - ab,ac,ad,bc,bd,cd... Если размер 3, то - abc,abd,bcd. Сложность состоит в том, что размер множества можно задавать динамически (N). Соответственно размер последовательностей будет расти от 1 до N-1. Я пока что совсем не понимаю как к этому всему подступится. Возможно нужно реализовывать через рекурсию. Но если я понимаю хотя бы, по какому принципу выбирать последовательности при N<= 3, то вот как программно описать, что творится дальше - не знаю.

Решение задачи: «Разбиение множества на уникальные последовательности»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApplication13
{
    class Program
    {
        static void Main()
        {
            const string input = "ABCDEF";
            var gen = Generate(input);
            foreach (string s in gen.Where(x => x.Length == 3))
            {
                Console.WriteLine(s);
            }
            Console.ReadKey();
        }
 
        private static IEnumerable<string> Generate(string s)
        {
            return PowerSet(s).Select(x => new string(x.ToArray()));
        }
 
        static IEnumerable<IEnumerable<T>> PowerSet<T>(IEnumerable<T> initialSet)
        {
            var set = new List<IEnumerable<T>> { Enumerable.Empty<T>() };
            return initialSet.Aggregate((IEnumerable<IEnumerable<T>>)set, (x, y) => x.Concat(x.Select(z => z.Concat(new List<T> { y }))));
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5
Похожие ответы