Перестановка массива объектов - PullRequest
1 голос
/ 18 января 2010

У меня есть arraylist, который содержит некоторые объекты, и я должен получить перестановку этих объектов? Как я могу это сделать? Предположим, MyList является массивом, который содержит 4 объекта.

ArrayList myList = new ArrayList();
myList.Add(1);
myList.Add(2);
myList.Add(3);
myList.Add(4);

так что число arraylist равно 4, поэтому я хочу 4! = 24 Я хочу 24 перестановок этих объектов. Как я могу сделать это в C #. Пожалуйста, помогите мне.

Спасибо!

Ответы [ 5 ]

1 голос
/ 18 января 2010

Стэнфордская лекция из класса «Программирование абстракций» действительно хорошо объясняет рекурсивное решение.

http://www.youtube.com/watch?v=uFJhEPrbycQ#t=37m25s

0 голосов
/ 18 января 2010
0 голосов
/ 18 января 2010

Вот хорошая статья, подробно описывающая реализацию next_permutation на C ++. Да, это в C ++, но синтаксис не сильно отличается, и объяснение достаточно хорошее. Приветствия.

0 голосов
/ 18 января 2010

Может быть и так, но не проверено.

public static IEnumerable<string> permute(string s){
    if (s.Count() > 1)
        return from c in s
               from p in permute(s.Remove(s.IndexOf(c), 1))
               select string.Format("{0}{1}", c, p);
    else
        return new string[] { s };
}
0 голосов
/ 18 января 2010

Вы можете сделать это с прекрасной прекрасной рекурсией.

Базовый случай: перестановка массива размера 1 является самим массивом.

Рекурсивный случай: перестановка массиваразмером n, каждая перестановка размера (n - 1) с добавлением n-го элемента в каждой возможной позиции.

Имеет ли это смысл?

...