matlab - 按字典顺序列出数字 1,...,n 的所有排列

标签 matlab swap lexicographic

我正在尝试编写一个 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/

相关文章:

matlab - 散布一个非零元素岛

matlab - 如何等高线绘制自定义函数?

使用 CPLEX API 的 MEX 文件的编译器错误

matlab - 使用matlab求解方程组

javascript - 多个 html data-* 属性和 js 函数不起作用

python - 所有按字典顺序排列的可变字符串的迭代器,长度不超过 n

c++ - C++ 和数组中的通用交换函数

audio - 将float转换为java签名的PCM的wav是javax.sampled的缩写。

C++:按字典顺序比较字符串

c++ - 根据优先级按字典顺序对 vector 列表进行排序