算法设计与分析基础 第六章谜题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30432997/article/details/84613523

习题6.1

9.数字填空 给定n个不同的整数以及一个包含n个空格的序列,每个空格之间事先给定有不等(>或<)符号,请设计一个算法,将n个整数填入这n个空格中并满足不等式约束。例如,数4,6,3,1,8可以填在这样的5个空格中:

解答:将n个正整数从小到大排序,然后将数字填入空格之中:从左到右遍历每一个空格,若空格之后是小于号,则填入当前正整数序列中的最小值;若为大于号,则填入当前正整数序列中的最大值。最后一个空格填入序列中最后留下的数字。

习题6.2

11.关灯游戏 这个单人游戏有一块n×n的面板,都是1×1的电灯小面板组成的。每个小面板都有一个开关可以打开或关闭,这会同时打开或关闭水平和垂直邻接的4块小面板的灯(因此,拨动角上的面板的开关会改变3个面板的灯,拨动边界上的非角落的面板开关会改变4个面板的灯)。如果知道初始时那些灯是点亮的,如何关闭所有的灯呢?

a. 请说明求解该问题可以利用mod2运算和解线性方程,该方程的系数和等式右边都是0/1。

解答:用0/1表示灯灭/灯亮,分别用S,F表示起始和目标面板状态,求解该问题可以用以下方程表示:

                                                          

其中xij  表示所求解,Aij  表示按下第i行第j列开关对状态的改变,例如在n=3时:

                                                                

扫描二维码关注公众号,回复: 4508596 查看本文章

b. 利用高斯消去法解该问题的2×2全1实例,也就是说2×2面板上所有的灯一开始都亮着。

解答:线性方程为

 

利用高斯消去法得

解得    

c. 利用高斯消去法解该问题的3×3全1实例,也就是说3×3面板上所有的灯一开始都亮着。

解答:  ,其余项为零。

 

习题6.3

9.为包含实数的2-3树设计一个算法,来计算它的值域(也就是说,最大数和最小数的差),并确定该算法的最差效率。

解答:2-3树中的最小和最大键分别是最左边叶子中的第一个键和最右边叶子中的第二个键。因此,搜索从根到叶的最左指针的路径以及从根到叶的最右指针的路径。由于2-3树的高度始终为Θ(logn)算法的时间效率为Θ(logn)+Θ(logn)+Θ(1)=Θ(logn)。

 

习题6.4

12.面条排序 想象一把意大利生面条,每一根面条代表一个需要排序的数字。

a. 描述一个“面条排序”算法——一种利用了这种非正统描述的排序算法。

解答:将一堆意大利面条杆垂直放在桌面上,重复地取出其中剩余的最高杆,直到不再留下杆。 这将按照长度的降序对杆进行分类。

b. 这个在计算机科学界流传的例子,如何从一般性上阐述了本章的主题,又如何特别阐述了堆排序?

解答:该方法与堆排序共享其主要思想:以一种简单地查找和删除最大项目的方式来排序。 从更一般的角度来看,意大利面条排序是表示变治算法的一个例子。

 

习题6.5

12.多项式内插 给定n个数据点(xi, yi)的集合,其中任意两个xi均不同。求一个至多n-1阶的多项式p(x),使得对于每个i=1,2,…,n,都有p(xi) = yi。

解答 , 当x=xi时,只有包含yi的那一项不为零。

 

习题6.6

11.吃醋的丈夫谜题 有n对夫妇要越过一条河。他们有一条船,但一次最多只能载两个人。为了使情况复杂化,我们假设所有的丈夫都爱吃醋,因此在过河的全过程中,即使有他人在场,如果没有本人的陪伴,丈夫也不会允许妻子和其他妻子的丈夫在河的同一个岸上。在这种约束下,他们能越过河去吗?

a. 对于n=2的情况,解这个问题。

解答:用H代表丈夫,W代表妻子,画出状态空间图,共有四条路径:

b. 对于n=3的情况,解这个问题,这是该问题的经典版本。

解答:

 

c. 对于任何n>=4的情况,这个问题有解吗?如果有解,请指出他们一共要过多少次河;如果无解,请解释一下原因。

解答:该问题n≥4时无解。在3对夫妇的基础上,如果我们从1个或多个额外的夫妇开始,将不会产生新的状态,并且在六次过河之后,将到达n-1对夫妇和船在初始河岸,有一对夫妇在另一岸的状态。 从该状态唯一允许的变化是将该夫妇运送到另一岸而回到之前的状态。

 

12.双n多米诺 多米诺是一种骨牌,两面刻有点数。一幅标准的“双六”多米诺有28块骨牌:每一块为从(0,0)到(6,6)的无序整数对。也就是说,一幅“双n”多米诺是由从(0, 0)到(n, n)的无序整数对构成。请确定n的所有值,使得在“双n”多米诺里的所有骨牌能组成一个环。

解答:可以将该问题转化为具有n + 1个顶点的完全图的欧拉回路问题。在该图中顶点i表示在双n多米诺两面上的点数,顶点i和j之间的边表示有i和j点的多米诺骨牌,组成一个环可以转化成欧拉回路问题。根据定理可知当n为偶数时具有偶数连通度,此时可以构成一个环。

猜你喜欢

转载自blog.csdn.net/qq_30432997/article/details/84613523