MapGuessing

作者:冯哲

关键字:模拟 容斥 搜索

题目简述

已知有一个初始值均未知的长度为图灵机和一个磁头,定义以下种操作:

将磁头左移一位.

将磁头右移一位.

将磁头当前所在位置的值赋为.

将磁头当前所在位置的值赋为.

现在给出一个长度为的操作序列和某个状态,求有多少初始图灵机状态,满足存在一个磁头的初始位置,使得磁头在移动中始终不移出图灵机,且存在一个中间状态等于给出的状态.

初步分析

由于的范围比较大,不能直接枚举图灵机的状态,考虑从磁头的初始位置入手。

假设枚举了磁头的初始位置,那么我们就可以通过模拟操作,得到磁头是否会移出图灵机以及被修改的位置,如果被修改的位置对不上,那么这种初始位置一定是不合法,否则 考虑最后一次所有被修改的位置都能对应给出状态的时刻(此时被修改的位置一定最多),所有被修改的位置都可以任意选,而未被修改的位置就要和给出状态一致.

现在已经得出了一个磁头初始位置能够满足的所有初始序列,但是一个初始序列可能会被多个磁头满足,所以需要去重.

去重

设磁头初始位置能自由选择的位置集合为,所有的可重集为,根据经典的容斥定理,可以得到正确的答案为

,其中中所有的交集.

通过搜索可以在的复杂度内解决这个问题.

复杂度分析

如果在搜索时,当为空集时就停止搜索,就可以通过此题了,下面来分析算法的正确性。

考虑一个磁头在操作中的移动范围,设移动范围长度为,则可行的磁头位置数量至多为,而每个磁头可能的被修改位置为,即个数最多为.

由于集合要非空,而可能被修改位置是一段区间,那么每次可以选择的那些集合之间最大的左端点距离差不能超过,也就是说能够使得交集非空的磁头位置之间最大的距离差不超过,那么能够使得交集非空的磁头集合数量不会超过.

由以上分析可得搜索的最大复杂度为,则时间复杂度约为.

时间复杂度,空间复杂度.

results matching ""

    No results matching ""