генерация перестановок с помощью mathematica 4.0

Привет, я использую Mathematica 4.0. Я пытаюсь найти все перестановки, например, скажем, есть два числа 0 и 1. Я пытаюсь сгенерировать все перестановки, используя эти два числа в 3 (скажем) местах с повторением, например {1,1,1}, {1,1,0},{1,0,1},{1,0,0}... Также я пытаюсь поместить каждую перестановку в массив. Есть ли какой-нибудь код или команда в Mathematica 4.0, с помощью которой я могу делать все это. Помогите пожалуйста с этой задачей...


person rajib arefin    schedule 30.01.2011    source источник
comment
Позвольте мне поприветствовать вас на StackOverflow и напомнить три вещи, которые мы обычно здесь делаем: 1) Когда вы получаете помощь, старайтесь также оказывать ее, отвечая на вопросы в вашей области знаний 2) Read the FAQs 3) Когда вы увидите хорошие вопросы и ответы, проголосуйте за нихusing the gray triangles, так как доверие к системе основано на репутации, которую пользователи получают, делясь своими знаниями. Также не забудьте принять ответ, который лучше решает вашу проблему, если таковой имеется, by pressing the checkmark sign   -  person Dr. belisarius    schedule 30.01.2011
comment
reference.wolfram.com/legacy   -  person dbjohn    schedule 30.01.2011


Ответы (3)


В Mathematica 5.1 и выше есть функция Tuples, которая делает то, что вы хотите. Вы можете попробовать

getTuples[elements_List, length_Integer] :=
  Flatten[Outer[List, Sequence @@ Table[elements, {length}]], length - 1]

Например:

In[6]:= getTuples[{0, 1}, 3]

Out[6]= {{0, 0, 0}, {0, 0, 1}, {0, 1, 0}, {0, 1, 1}, {1, 0, 0}, {1, 0, 1}, {1, 1, 0}, {1, 1, 1}}

Но я не знаю, работает ли это в M4.0. Должен, наверное, но проверить не могу. Как правило, при работе с такой устаревшей версией, как 4.0, вы столкнетесь с массой разного рода сложностей, в том числе с отсутствием функциональности, низкой производительностью и интерфейсом (front-end), некоторыми ошибками, которые были исправлены в более поздних версиях, несовместимостью с кодом, написанным в более поздних версиях. версии и получить помощь. Это особенно верно для Mathematica, учитывая огромный прогресс во всех направлениях, появившихся после версии 4.0. Так что, если вы планируете использовать его регулярно, я настоятельно рекомендую обновить его.

person Leonid Shifrin    schedule 30.01.2011
comment
спасибо, я уже обновил свою версию до 5.2 и получил результат. Теперь я хочу поместить каждую перестановку в отдельный массив, например lst1={0,0,0};lst2={0,0,1}.. , с помощью цикла.потому что если нет. перестановок становятся большими, тогда нецелесообразно писать отдельное имя списка для каждого из массивов. плиз помогите мне в этом задании - person rajib arefin; 01.02.2011
comment
@rajib arefin: Извините, но SO (переполнение стека) работает не так. Пожалуйста, опубликуйте это как отдельный вопрос, и люди здесь будут рады ответить. Таким образом, он будет проиндексирован и полезен для новых пользователей, которые ищут тот же ответ. - person Leonid Shifrin; 01.02.2011

Вид археологического вопроса :D. Версия 4 довольно старая!

<<DiscreteMath`Combinatorica`

perm1[l_,n_]:=Union[KSubsets[Flatten[Table[l,{n}]],n]]  

In[70]:= perm1[{1,2,1},4]
Out[70]= {{1,1,1,1},{1,1,1,2},{1,1,2,1},{1,1,2,2},{1,2,1,1},
          {1,2,1,2},{1,2,2,1},{1,2,2,2},{2,1,1,1},{2,1,1,2},
          {2,1,2,1},{2,1,2,2},{2,2,1,1},{2,2,1,2},{2,2,2,1},{2,2,2,2}}  

In[73]:= perm1[{1,0},3]
Out[73]= {{0,0,0},{0,0,1},{0,1,0},{0,1,1},{1,0,0},{1,0,1},{1,1,0},{1,1,1}}
person Dr. belisarius    schedule 30.01.2011
comment
спасибо за ваш ответ. Но это не работает в Mthma4.0, показывая этот результат: In[45]:= perm[n_] := Permutations[Flatten[Table[{1, 0}, {n}]], { n}] In[46]:= perm[3] From In[46]:= Permutations::argx: \!(Permutations) вызывается с \!(2) аргументами; 1 \ ожидается аргумент. Out[46]= перестановки[{1, 0, 1, 0, 1, 0}, {3}] - person rajib arefin; 30.01.2011
comment
Хорошо, я могу собрать Mathematica 5.0. Будет ли этот код поддерживаться в Mathematica 5.0? - person rajib arefin; 30.01.2011
comment
@rajib Permutations последний раз изменялся в v6, поэтому я не уверен, потому что в имеющемся у меня документе не указано, какая модификация была сделана в какой версии. - person Dr. belisarius; 30.01.2011
comment
Решения, предоставленные belisarius и Leonid Shifrin, работают с Mma v5.2, если это нужно (установлено на старом Mac). Но нет версии 4.0. - person tomd; 30.01.2011
comment
@TomD Ваш музей потрясающий :D - person Dr. belisarius; 30.01.2011
comment
@belisarius Это еще более удивительно. Нашел старый имак, которым никто не пользовался годами, купил мешок угля, засыпал его лопатой и запустил Mma v4.2 ;). Оба решения работали точно так, как описано, без каких-либо проблем. - person tomd; 31.01.2011
comment
Я уже обновил свою версию до 5.2 и получил результат. Теперь я хочу поместить каждую перестановку в отдельный массив, например lst1={0,0,0};lst2={0,0,1}... используя петля.потому что если нет. перестановок становятся большими, тогда нецелесообразно писать отдельное имя списка для каждого из массивов. плиз помогите мне в этом задании - person rajib arefin; 01.02.2011

Кстати, обратите внимание, что документация для всех предыдущих версий Mathematica находится в свободном доступе в Интернете по адресу http://reference.wolfram.com/legacy — специально для версии 4 см. http://reference.wolfram.com/legacy/v4.

Вы можете искать документы v4 через Google:

сайт перестановок:reference.wolfram.com/legacy/v4

который включает функцию v4 Permutations http://reference.wolfram.com/legacy/v4/RefGuide/Permutations.html с примерами и несколькими ссылками на другие части старой книги Mathematica.

person Bill White    schedule 30.01.2011
comment
Перестановки в V4 не сделали того, чего хочет ОП. Позже он был изменен, и теперь можно было просто сказать Permutations[{1,0},3]... но в то время он был недоступен. - person Dr. belisarius; 31.01.2011