一道数学不明难度难题出自:《算法竞赛入门经典》——刘汝佳求证存在一个无限长的数列,只由数字1、2、3构成,使得不存在相邻

一道数学不明难度难题
出自:《算法竞赛入门经典》——刘汝佳
求证存在一个无限长的数列,只由数字1、2、3构成,使得不存在相邻的相同的两个子数列.
如1 3 1 2 1 2中前一个1 2与后一个1 2相邻且相等,是不合要求的.
3 1 2 1 3 2 1 2 3 2 1则是合要求的.
书中只提到这个命题成立,但不知其具体过程.
GUYINGYUN 1年前 已收到1个回答 举报

故乡明月几时有 幼苗

共回答了21个问题采纳率:71.4% 举报

思路可以是这样的.假如 前一个子数列为1 2 3的任意某种排列如:3 1 2
那么下个子数列中,第一个数字不能是上个子列的最后一个数字“2”,于是有两种取法,一种是 3 2 1,另一种是 1 3 2 (首数取上个子列第一和第二个数的情况).只要这两种取法交替的出现就不会出现相邻重复了.
例如,我们以3 1 2开始,那么接下来按照 取法1 和 取法2 轮流出现,即可得到
3 1 2 3 2 1 2 3 1 2 1 3 1 2 3 1 3 2 ...
再仔细想了下,觉得这样的方法可能是不存在的.假设我们存在某种算法A可以构造出以3 1 2 开始的无限长不重复的子数列A(3,1,2).即通过该算法,以3 1 2 开始可以唯一的确定接下来任意某个位置的值 (否则我们无法制造数列).由于该数列中再次出现3 1 2的情况是肯定 (因为连续三个数且不重复的所有可能是有限的,取1,2,3所有数字有6种情况 3 1 2,3 2 1,2 1 3,2 3 1,1 2 3,1 3 2,不取所有数字也有6种情况 3 1 3,3 2 3,2 1 2,2 3 2,1 2 1,1 3 1).那么,当再此出现3 1 2 的时候,根据该算法A,以 3 1 2开始的子数列任意某个位置的值就会被唯一的确定为A(3,1,2),因此就一定会制造出重复子列.这与算法A可以制造无限长不重复的子数列是相矛盾.因此,这样的算法是不存在的.
逻辑上觉得道理应该是这样的,若有任何算法存在可能性的逻辑,请把他介绍一下吧.

1年前 追问

4

GUYINGYUN 举报

既然首先说了算法A从3 1 2 开始,后来就不能再单纯从头开始用算法A
我所想的是:
从1开始将1生成下一个可以的子序列放置到1后变为12
将12生成下一个可以的子序列生成到后面变成1213
……12131231……
每一次过后序列长度都会变为它的两倍,而变化的程度该是不及增加的量的。
但……我这么做毫无科学依据,只是看上去有点道理罢了……

举报 故乡明月几时有

312开始只是一个例子,其实,以哪个数字开始应该是完全没有影响的。因为只要能造出一个这样的数列,完全可以通过一个双射,构造出以任意数字开始的数列出来。
你说的这个构造方法我觉得还是有一定的道理的。只要能证明: 对于任意长度的不重复数列,都能构造出一个等长数列,使得两个数列拼接起来是一个不重复的数列。那么这个方法就是成立的。
首先,要构造一个等长德不重复数列是完全可以的,通过一个双射即可。如1->2, 2->3, 3->1
但是两个数列拼接后,新数列中是否能保证不重复却不好证明。主要问题是当相邻的两个数列之一横跨前后两个子列的时候。
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 18 q. 0.192 s. - webmaster@yulucn.com