个人对bfs的时间复杂度以前总是不太会分析 总以为时间复杂度就是 O(总的状态数) 对于一些简单的问题(状态数很少的问题)这么近似的确可以 但是随着题目做的多了
有时候 对于状态数 为1e7 1e8 的题目 觉得能1s过 却发现会‘迷之’tle 其实tle是理所应当的 下面说一下对于bfs 时间复杂度的新认识 :
bfs 的复杂度 大体由两点决定 1.状态数2.转移代价(由一种状态到另一种状态的复杂度)
由于一次转移会得到一种状态 so
他的复杂度大致为O(状态数*转移代价)因为对于每个第一次访问到的状态总要进行一次搜索 当然了在状态数*转移代价中不乏很多失败的转移 比如搜索到的状态已经vis过 再或者那个地方是有障碍物的
所以对于tle的题目怎么做呢?
1.减少状态总数 (uva The Rotation Game 旋转游戏)
2.减少失败转移次数(即减少了转移代价)(预处理 uva三只幽灵)
可能还有其他办法 遇到了题目继续更新