Li Kai

  • 主页
  • 所有文章
文章分类 友情链接 关于我

Li Kai

  • 主页
  • 所有文章

算法(九)记忆化搜索

2019-06-09

本文简单介绍一下记忆化搜索(即有状态DFS),并举例分析。

1. 简介

记忆化搜索,实际上就是有状态的DFS,即在DFS过程中缓存中间变量,从而在后续计算的时候避免重复计算。

2. 举例分析

题目: 单词拆分

给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。

说明: 分隔时可以重复使用字典中的单词。
你可以假设字典中没有重复的单词。

1
2
3
4
5
6
7
8
9
10
11
示例 1:

输入:
s = "catsanddog"
wordDict = ["cat", "cats", "and", "sand", "dog"]

输出:
[
  "cats and dog",
  "cat sand dog"
]

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#带返回结果的dfs
class Solution:
def wordBreak(self, s: str, wordDict: List[str]) -> List[str]:
wordSet = set(wordDict)

@lru_cache(None)
def dfs(index):
if index >= len(s):
return [[]]
res = []
for i in range(index+1, len(s)+1):
word = s[index:i]
if word in wordSet:
tmp = dfs(i)
for x in tmp:
res.append(x.copy()+[word])
return res

res = dfs(0)
return [ " ".join(x[::-1]) for x in res]
  • 算法

扫一扫,分享到微信

微信分享二维码
算法(十)快速排序
linux常用指令
  1. 1. 1. 简介
  2. 2. 2. 举例分析
© 2021 Li Kai
Hexo Theme Yilia by Litten
  • 文章分类
  • 友情链接
  • 关于我

tag:

  • test
  • 数据结构
  • shell
  • 计算机网络
  • 数据库
  • 负载均衡
  • ovn
  • 算法
  • linux
  • kubernetes
  • sql
  • python
  • openstack
  • designate
  • neutron
  • golang
  • timewheel

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 我的博客园
  • 我的CSDN1
  • 我的CSDN2
李凯
研究生毕业于北邮
现就职于腾讯

一名奋斗在
OpenStack(Python)
Kubernetes(Golang)
的搬运工