我正在尝试编写一个 Matlab 程序,以按字典顺序列出数字 1 到 n 的所有排列。到目前为止我所拥有的如下。我正在使用递归尝试编写一个首先适用于 n=3 的程序,然后看看我是否可以深入了解为任何 n 编写该程序。到目前为止,我有 n=3 的 6 列中的 2 列:P=[1 2 3;1 3 2]
。我需要接下来的两列来简单地交换一个和两个。我不知道如何开始这样做。
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
最佳答案
参见the documentation作为一个开始。如果按照字典顺序,您的意思是按英文名称的字母顺序排列,您可能需要用名称填充您的输入,对它们进行排序,然后对其进行排列。
如果我误解了您想要的内容,请发表评论或编辑问题,我稍后会再回来查看。
提示:
- 空列表的排列很容易找到。
- 归纳法是数学中的一个重要概念。你应该很熟悉。
- 您所在的环境支持递归
- 可以通过递归按照您想要的顺序生成较长列表的排列;首先弄清楚你想要的第一个元素是什么,然后再弄清楚其余的。
如果您再次陷入困境,请编辑问题,发布您到目前为止所得到的信息以及您认为陷入困境的位置/原因。
看到代码后的提示。
- 您的核心函数会排列向量,因此应采用向量作为参数,而不是整数
- 不要开始解决 n=3 的情况;尝试 n=0 的情况(它是 []),然后直接进入 n=20 的情况。
- 在编写任何代码之前请考虑 n=20 的情况。第一列会是什么样子? n=20 情况的答案中是否隐藏了 n=19 情况的示例? (答案是肯定的,而且都是不同的)。
- 重读第一组提示
关于matlab - 按字典顺序列出数字 1,...,n 的所有排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/647030/