关于word search的复杂度,和暴力解法的疑问

来源:8-6 二维平面上的回溯法 Word Search

软件工程小白菜

2019-07-28

波波老师您好,关于这道题,我还有两个地方不太理解。

  1. 在老师给出的答案中,时间复杂度为O(m*n*m*n),空间复杂度为O(m*n)。我对这两个复杂度的理解不知道是否正确,希望老师指正。以下是我所做出的尝试:

    1. 对于时间复杂度而言,首先我们要对m*n的每一个格子都进行搜索(对应代码中的两个for循环),这是第一个m*n。然后对于每一个格子来说,我们最坏的情况是把除了这个格子外的所有格子搜索一遍,每一次搜索对应一次递归调用占用的时间,这对应了后一个m*n。

    2. 对于空间复杂度而言,显而易见我们使用了m*n的二维数组,但我想问递归调用不会占用空间复杂度吗?

  2. 除了老师给出的回溯解法,我还在思考这道题是否有暴力解法,以及暴力解法的时间,空间复杂度,但我想了很久,感觉回溯法就是这道题的暴力解法,请问老师是否正确,还是说有别的暴力解法?我实在想不出还有什么所谓的“暴力方法”能解决这道题,我也尝试对这道题使用迭代法进行解决,参考了老师之前运用stack把递归转化成迭代的技术,但这样迭代后,感觉时间复杂度和空间复杂度应该和递归解法一致?

写回答

1回答

liuyubobobo

2019-07-29

时间复杂度,你的分析完全正确:)

空间复杂度,是的,递归会使用空间。但是二维数组使用的空间和递归使用的空间没有嵌套关系。我们没有在递归的过程中不断地开空间,所以,使用的是二维数组的空进 m * n 加上递归的空间 m * n ,即O(2 * m * n) = O(m * n)


2

是的!回溯法就是暴力解法!暴力法的本质是遍历所有可能。但是怎么遍历所有可能?对于很多问题来说,需要使用回溯法!:)


3

对的,递归转非递归不会带来复杂度的变化,除了个别问题空间复杂度会变低以外(没有了递归栈深度),算法本身不可能通过递归转非递归,产生时间复杂度的差距。因为两个写法本质逻辑是等价的,只不过是使用系统栈,还是自己调用栈操作的区别而已:)


继续加油!:)

3
1
软件工程小白菜
非常感谢老师!
2019-07-29
共1条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7410 学习 · 1150 问题

查看课程