一道算法题

2021-08-12 06:55:07 +08:00
 feuto

Q1: 设计一种算法,依次输出自然数序列 N 的元素, 0,1,2,3,4,... (这题很简单) 像这一个死循环就完事了 i = 0; do {print(i++)} while(i>=0)

Q2: 尝试设计一种算法,输出所有“由(互不相等的)自然数”构成的无穷序列

1183 次点击
所在节点    算法
5 条回复
nvkou
2021-08-12 07:32:26 +08:00
Q1 简单? 没考虑数值上限吗?
Q2 没看懂,是需要排列组合的穷举吗?
Raven316
2021-08-12 07:34:38 +08:00
你是不是对算法有什么误解
jmc891205
2021-08-12 08:59:37 +08:00
An algorithm is a *finite* sequence of well-defined, computer-implementable instructions.
raaaaaar
2021-08-12 09:43:56 +08:00
确定,有限,定义上来说的确是算法吧。
wffnone
2021-12-03 03:01:29 +08:00
不懂数学纯胡扯。以下的话都是毫无价值的废话。

Q2 。

如果是顺序输出,就是一个序列一个序列输出。那么,程序无法完成第一个序列,永远只在输出第一个序列。

所以显然我们不能用顺序输出,那怎么输出呢?我们可以考虑把这无穷个序列排序出来,组成一个二维的无穷数阵,每一行是一个要求的无穷序列,每一列就是按照这个排序的所有无穷序列的第 N 项构成的序列。我们可以沿着 i+j<=k ,递增 k 来输出。这样看起来是规避了输出的问题。

先尝试去解决有限元素的序列,作为启发。

显然,对有限元素,就是一个全排列。找一个简单的遍历方法:依次两两对换。这个办法对无穷序列的问题是,对换第一个元素的过程又是无限的,所以我们的第二个维度又被占用了。

没关系,我们可以把这个序列的输出,表示成任意维度的数阵。其中一个维度是序列,其他的维度作为遍历序列的顺序。然后输出,( m 维时)按照 d1+d2+...+dm <= k ,递增 k ,就可以了。

到这里我已经没有特别的兴致去往下进行了。我猜想 m<10 的时候就应该有一个解。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/795221

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX