2009-03-15 4 views
2

Я пытаюсь запрограммировать Matlab для перечисления всех перестановок чисел с 1 по n в лексикографическом порядке. То, что я до сих пор, ниже. Я использую рекурсию, чтобы попытаться написать программу, которая сначала будет работать для n = 3, а затем посмотреть, могу ли я получить представление о написании программы для любого n. Пока у меня есть 2 из 6 столбцов для n = 3: P=[1 2 3;1 3 2]. Мне нужны следующие два столбца, чтобы просто поменять их и два. Я не знаю, как начать это делать.Список всех перестановок чисел 1, ..., n в лексикографическом порядке

function [P] = shoes(n) 

if n == 1 
    P = 1; 
elseif n == 2 
    P = [1 2; 2 1]; 
else 
    T = shoes(n-1) + 1; 
    G = ones(factorial(n-1),1); 
    P(1:2,1:3) = [G T];    
end 
+0

домашнее задание? –

+0

Пожалуйста, отметьте домашние вопросы с тегом «домашняя работа». Благодарю. –

+0

Буду рад. Можете ли вы сказать мне, как это сделать? – 2009-03-15 01:22:39

ответ

2

См. the documentation для начала. Если по лексикографическому порядку вы имеете в виду алфавитное имя по английскому, вы можете заполнить свой ввод именами, отсортировать их, а затем переставить.

Если я неправильно понял, что вы хотите, прокомментируйте или отредактируйте вопрос & Я вернусь позже.

Подсказка:

  • перестановки пустого список легко найти.
  • Индукция - важное понятие в математике. Вы должны быть знакомы с этим.
  • Окружающая среда, в которой вы работаете, поддерживает рекурсию
  • Перестановки более длинного списка могут быть созданы в том порядке, в котором вы хотите по рекурсии; сначала выясните, какой вы хотите, первым элементом, а затем выясните остальное.

Если вы снова застряли, отредактируйте вопрос о том, что вы получили до сих пор, и где/почему вы думаете, что застряли.

Подсказки после просмотра вашего кода.

  • Ваша основная функция переставляет вектор, и поэтому они должны взять вектор в качестве аргумента, а не целое число
  • Не начать решение п = 3 случая; попробуйте случай n = 0 (это []), а затем перейдите прямо к случаю n = 20.
  • Подумайте о случае n = 20, прежде чем писать какой-либо код. Каким будет первый столбец? Существуют ли примеры случая n = 19, скрытые в ответе на случай n = 20? (Ответ - да, и все они разные).
  • Перечитайте первый набор подсказок
+0

Привет и спасибо за быстрый ответ.На самом деле, мне не разрешено использовать встроенные функции perms. И, чтобы xlarify, мне нужно сделать, если n = 3, например, выход должен быть точно A = [1 2 3; 1 3 2; 2 1 3; 2 3 1; 3 1 2; 3 2 1] , Является ли это более ясным? – 2009-03-15 01:00:24

+0

Отметьте его тегом «домашняя работа», и я вернусь позже. Между тем, я добавлю намек. – MarkusQ

1

Вы кажетесь задал этот вопрос twice. Вместо того, чтобы переставлять вопросы, вы должны просто нажать ссылку «изменить» под своим вопросом и обновить его. Я отвечу здесь ответ, который я дал вашему другому вопросу, но вы действительно должны удалить один из них.


Если у вас есть следующая матрица:

A = [1 2 3; 1 3 2]; 

и вы хотите, чтобы все те, чтобы стать двоек и двоек, чтобы стать теми, следующий будет самый простой способ сделать это:

B = A; 
B(A == 1) = 2; 
B(A == 2) = 1; 
+0

Привет, я просто хочу поблагодарить вас за помощь. Этот ответ позволил мне написать всю программу. Я очень ценю это. – 2009-03-15 20:35:58

+0

Рад, что я мог помочь. знак равно – gnovice

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