2014-02-13 3 views
0

Во-первых, я понимаю только псевдокод.Все возможные Перестановка списка функций

У меня есть список функций. Я пытаюсь применить все перестановки в списке. Затем для каждой перестановки примените первый элемент в pos 1, затем один в pos 2, до конца. И повторите для каждой перестановки.

Как, например:

mylist = [ sum(1+1) , sum(2+2) , sum(3+3) ] 

#This should outputs 

[2 , 4 , 6] 
[4 , 6 , 2] 
[6 , 2 , 4] 
[2 , 6 , 4] 
[6 , 4 , 2] 
[4 , 2 , 6] 

Реальная проблема, я знаю, что это легко настроить в C, Python, Java, как только у вас есть библиотека для него, но я могу использовать только , и понять псевдокод.

ответ

0

Получение всех перестановок из списка может осуществляться по-разному, одним из них является рекурсия.

Вы попросили псевдокод:

findPermutations (list,i): 
    if i == list.length: 
     foo(list) 
     return 
    for each j from i to list.length: 
     swap(list,j,i) 
     findPermutations (list,i+1) 
     swap(list,j,i) #clean up - return to previous condition. 

Где swap(list,i,j) свопы между элементом с индексом i и элементом с индексом j (легко реализовать).

Теперь ваш foo (список) может быть любым. Например, если у вас есть список [A B C], и вы хотите, чтобы вычислить (a/b)/c (пример в комментариях), это может быть сделано следующим образом:

foo(list): 
    if list.size() == 0: //sanity check for empty lists 
     return 0 
    res = list[0] 
    for each i from 1 to list.length: 
     res = res/list[i] 
    return res 

Легко видеть, что на самом деле п! различные подстановки создаются с помощью псевдокода findPermutations, потому что каждый уровень рекурсирует i раз, а i монотонно убывает на 1.

+0

Если мне не нужно печатать каждый список, а делать какие-то дальнейшие вычисления на нем? Например, в первом списке, если бы я хотел сделать 2, деленный на 4, разделенный на 6, как я мог это сделать? – user3307705

+0

Тогда я не понимаю вопроса. Вместо 'print list' вы можете делать все, что хотите. – amit

+0

Например, если у меня есть свой новый список, я бы хотел разделить каждый элемент на следующий, возможно ли это? – user3307705

Смежные вопросы