计算机科学

动态规划

动态编程:第5级挑战

序列 年代 1 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1 2 ... s =[1、2、2、1、1、2、1、2、2、1、2、2、1、1、2、1、1、2、2、1,2 \点) 可以被描述为

1一个,22,2的,1两个,1一个,22,1一个,等等。

值得注意的是,在这个描述中出现的计数正是的元素 年代 年代 本身!因此, 年代 年代 是一个自描述序列。

1 1 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 2 2 2 1 1 2 2 1 1 1 2 \ underbrace {1} _ {1} \ \ underbrace {2 \ 2} _ {2} \ \ underbrace {1 \ 1} _ {2} \ \ underbrace {2} _ {1} \ \ underbrace {1} _ {1} \ \ underbrace {2 \ 2} _ {2} \ \ underbrace {1} _ {1} \ \ underbrace {2 \ 2} _ {2} \ \ underbrace {1 \ 1} _ {2} \ \ underbrace {2} _ {1} \ \ underbrace {1 \ 1} _ {2} \ \ cdots

在这个序列的前1,000,000个元素中有多少个2 ?

奖金:在这个问题的原始版本中,在计算过程中使用的内存不超过2000字节。


:很久以前荷兰学生和专业人员之间的计算机编程比赛(如果我没记错的话是1996年或1997年)。我们的团队是唯一一个解决了这个问题的团队,而且是在比赛的前五分钟内。你能打破我们的记录吗?:)

在这里是一个集合 年代 年代 的数字。

有一些子集 X 年代 X \子集S 的所有元素 X X 形成一个等差数列当排序。

的最大可能值是多少 X X | | ?

额外学分:最小化时间复杂度你的解。

考虑一幅图像,它非常详细,完全正方形,但最初表示为一个单一的、统一的像素,是它所有内容的平均值。自然,人们会希望看到更多——更多的细节,更多的像素,更多的深度,但接收所有这些信息的瞬间,完美,可以如此……无聊。

相反,让我们逐块逐象限地探索图像。第一个像素是免费提供给我们的,要看更多,我们必须探索它——深入挖掘,一个“像素”可能被分成四个,每个分别是它所覆盖的左上、右上、左下和右下子空间的平均值,所有子空间的大小相等。然后,我们可以依次探索其中的每一个,随着我们的探索,揭示出越来越多的细节,直到揭示出的像素实际上是像素,除了它们本身,不再产生更多的细节。

通过这种方式,曾经固定的、线性的旅行——一排一排、一列一列——变得更加丰富了!有很多不同的方法一个人可以揭示整个景观,可以通过许多不同的路径来揭示每个细节。对于一个 1 × 1 1 \乘以1 图像,或者 2 × 2 2 \乘以2 形象,只有一条路可走,只有一条路可走 4 × 4 4 \乘以4 图像,有 24 24 揭示一切的方法!在中间点一下就能看到了 4 4 截然不同的 2 × 2 2 \乘以2 “像素”,当然,这可以在 4 4! 不同的顺序来揭示整个景观的内容。然而,这个数字会很快变得更丰富。


一个 8 × 8 8 \乘8 图像可以在 3892643213082624 3892643213082624 的方式。没错,完毕 3. 3. 千的五次方道路是可以走的。

N N 是a出现的次数 512 × 512 512 \乘512 景观可以充分探索。数量 N N 有超过30万的十进制数字,所以计算它不是简单的铅笔和纸的操作。

的数字和是什么 N N ?


受这堂课的启发交互式动画

(我花了好长时间才找到链接!很难搜索,这些在几年前有点流行。)


图片来源:http://mentationaway.com/wp-content/uploads/2010/08/fractal.jpg
×

问题加载…

注意加载…

设置加载…