-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
312 lines (264 loc) · 34.2 KB
/
index.html
File metadata and controls
312 lines (264 loc) · 34.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0,viewport-fit=cover"><title>XuHui</title><meta name="author" content="xu"><meta name="copyright" content="xu"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="学习和生活日常">
<meta property="og:type" content="website">
<meta property="og:title" content="XuHui">
<meta property="og:url" content="https://xyuechen/github.io/index.html">
<meta property="og:site_name" content="XuHui">
<meta property="og:description" content="学习和生活日常">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://xyuechen/github.io/img/star.png">
<meta property="article:author" content="xu">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://xyuechen/github.io/img/star.png"><link rel="shortcut icon" href="/img/star.png"><link rel="canonical" href="https://xyuechen/github.io/index.html"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.min.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: undefined,
translate: undefined,
noticeOutdate: undefined,
highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
copy: {
success: '复制成功',
error: '复制错误',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '天',
dateSuffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'fancybox',
Snackbar: undefined,
source: {
justifiedGallery: {
js: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.js',
css: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.css'
}
},
isPhotoFigcaption: false,
islazyload: false,
isAnchor: false,
percent: {
toc: true,
rightside: true,
},
autoDarkmode: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: 'XuHui',
isPost: false,
isHome: true,
isHighlightShrink: false,
isToc: false,
postUpdate: '2026-01-14 14:21:03'
}</script><noscript><style type="text/css">
#nav {
opacity: 1
}
.justified-gallery img {
opacity: 1
}
#recent-posts time,
#post-meta time {
display: inline !important
}
</style></noscript><script>(win=>{
win.saveToLocal = {
set: function setWithExpiry(key, value, ttl) {
if (ttl === 0) return
const now = new Date()
const expiryDay = ttl * 86400000
const item = {
value: value,
expiry: now.getTime() + expiryDay,
}
localStorage.setItem(key, JSON.stringify(item))
},
get: function getWithExpiry(key) {
const itemStr = localStorage.getItem(key)
if (!itemStr) {
return undefined
}
const item = JSON.parse(itemStr)
const now = new Date()
if (now.getTime() > item.expiry) {
localStorage.removeItem(key)
return undefined
}
return item.value
}
}
win.getScript = url => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
script.onerror = reject
script.onload = script.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
script.onload = script.onreadystatechange = null
resolve()
}
document.head.appendChild(script)
})
win.getCSS = (url,id = false) => new Promise((resolve, reject) => {
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = url
if (id) link.id = id
link.onerror = reject
link.onload = link.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
link.onload = link.onreadystatechange = null
resolve()
}
document.head.appendChild(link)
})
win.activateDarkMode = function () {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
win.activateLightMode = function () {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
const t = saveToLocal.get('theme')
if (t === 'dark') activateDarkMode()
else if (t === 'light') activateLightMode()
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
if (asideStatus === 'hide') {
document.documentElement.classList.add('hide-aside')
} else {
document.documentElement.classList.remove('hide-aside')
}
}
const detectApple = () => {
if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
document.documentElement.classList.add('apple')
}
}
detectApple()
})(window)</script><meta name="generator" content="Hexo 6.3.0"></head><body><div id="web_bg"></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/img/star.png" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">28</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">12</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">10</div></a></div><hr class="custom-hr"/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 时间轴</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url('/img/huasanli.jpg')"><nav id="nav"><span id="blog-info"><a href="/" title="XuHui"><img class="site-icon" src="/img/star.png#%20image"/><span class="site-name">XuHui</span></a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 时间轴</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div></div><div id="toggle-menu"><a class="site-page" href="javascript:void(0);"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">XuHui</h1><div id="site_social_icons"><a class="social-icon" href="https://github.com/xyuechen" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="/2624313195@qq.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #4a7dbe;"></i></a></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2026/01/11/%E9%9B%A8%E6%B0%B4%E5%AE%B9%E5%99%A8/" title="雨水容器">雨水容器</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2026-01-11T12:29:15.000Z" title="发表于 2026-01-11 20:29:15">2026-01-11</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/algorithm/">algorithm</a></span></div><div class="content">盛最多水的容器题目:给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
示例:
如上图所示,线的高度为:[1,8,6,2,5,4,8,3,7],如果我们选择图中的两条线,那么蓝色区域就是能容纳水的部分。我们假设左边的线向中间选取,可以发现有两种情况:
选取的中间线比左边红线短,那么,容器宽度和高度都减少,容积一定不会增加
选取的中间线比左边红线长,那么,容器宽度减少,高度不变(高度取决于左右线的最短那根),容积仍然不会增加
也就是说,如果我们要找到一个更大容积的容器,一定不能移动较长的那根线。假设上图中存在一个更大容积的容器,一定是比右边红线更长的线。
思路:定义两个指针L 和R,哪条线短就移动哪根,在这之前先计算容积,如果移动后容积更大就更新答案。
代码:
1234567891011121314class Solution: def maxArea(self, ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2026/01/11/%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C/" title="两数之和">两数之和</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2026-01-11T10:09:30.000Z" title="发表于 2026-01-11 18:09:30">2026-01-11</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/algorithm/">algorithm</a></span></div><div class="content">两数之和题目:给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。
函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 ,所以答案数组应当满足 0 <= answer[0] < answer[1] < numbers.length 。
假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次。
示例:
输入:numbers = [1,2,4,6,10], target = 8
输出:[1,3]
暴力解法直接循环遍历该数组两次,直到找到解。
12345678class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: numDict = dict() for i in range(len(nums)): if target - nums[i] in numDict: ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2026/01/06/python%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/" title="python单元测试">python单元测试</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2026-01-06T12:13:25.000Z" title="发表于 2026-01-06 20:13:25">2026-01-06</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/python/">python</a></span></div><div class="content">发现规则pytest默认按照以下规则搜索测试:
test_*.py
*_test.py
以test_开头的函数
以Test开头的类
基本用法首先应该明确测试条件,然后创建一个基本框架:
创建一个 test_ 开头的文件
创建一个 Test 的类
创建一个 test_ 开头的方法然后可以在命令行输入 pytest,他就会执行对应的测试用例(函数和方法),例如:12345def test_a(): passclass Test: def test_b(self): pass
上面的例子中有两个测试用例 test_a 和 test_b,pytest 会输出测试用例执行和汇总信息
我们可以使用断言抛出错误信息
测试用例中没有异常即为通过
测试用例存在异常,判定为失败
高级用法
mark 标记是为了用例彼此不同,实现用例筛选,使用步骤为
注册标记
使用标记 标记的配置文件在根目录下,命名为 pytest.ini,在里面写入需要的内容,例如: 123456[pytest]markers = apiuiute2e
我们可以在测试用例上加上装饰器 @pytest.mark.xx 其中的 ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/04/28/python%E5%B7%A5%E5%85%B7uv/" title="python工具uv">python工具uv</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-04-28T12:55:30.000Z" title="发表于 2025-04-28 20:55:30">2025-04-28</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/daily/">daily</a></span></div><div class="content">背景在此之前常使用conda管理python环境和包,但是conda体积较大,而uv是一个用Rust写的工具,其优势在于速度快,兼容性强;当然,他不能处理发布包、运行脚本、管理项目元数据的,这是poetry的长处。
安装他的安装很简单。
使用curl(推荐)
在Linux或者Mac上:curl -LsSf https://astral.sh/uv/install.sh | sh
在window上,可以使用powershell:powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
使用pipx:命令为pipx install uv
安装后可以在终端使用uv --version来验证安装是否成功
工作流
创建虚拟环境
在开始安装前,通常需要先创建一个独立的环境以避免依赖冲突,uv创建环境的命令为:
1uv venv env_name
其中可以给自己的环境换一个名字,这个命令将查找系统中可用的python解释器,如果需要指定python版本,可以加一个 ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/04/10/vscode%E8%BF%9C%E7%A8%8B%E9%80%9A%E9%81%93/" title="vscode远程通道">vscode远程通道</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-04-10T14:49:03.000Z" title="发表于 2025-04-10 22:49:03">2025-04-10</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/daily/">daily</a></span></div><div class="content">windows做服务器以Linux做远程服务器的教程很多,但是有时候需要Windows系统做服务器,这种情况的设置我也想记录一下。
安装Windows中的openssh用ssh连接时,本地称为client,远程主机称为host。
我们以Windows系统做host,需要安装一个连接工具,这里使用openssh。
启动设置,然后转到应用>应用和功能>管理可选功能。
扫描列表后,查看OpenSSH客户端是否已安装,如果没有,在页面顶部选择“添加功能”,然后:
若要安装OpenSSH客户端,请找到“OpenSSH客户端”,然后单击“安装”。
若要安装OpenSSH服务器,请找到“OpenSSH服务器”,然后单击“安装”。
安装完成后,就可以看到列出的OpenSSH组件。
SSH的初始设置若要配置OpenSSH,以管理员身份启动PowerShell,然后运行一下命令来启动SSHD服务:
12345678Start-Service sshd# OPTIONAL but recommended:Set-Service -Name sshd -StartupType 'Au ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/04/08/AnnData%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" title="AnnData数据结构">AnnData数据结构</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-04-08T15:00:34.000Z" title="发表于 2025-04-08 23:00:34">2025-04-08</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/daily/">daily</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/daily/experience/">experience</a></span></div><div class="content">
AnnData对象几乎可以匹配R语言中单细胞数据分析的Seurat对象,今天试一下对python中AnnData进行数据提取和回吐操作。
这个图来源于AnnData的文档
数据读取这里使用单细胞转录组数据GSE163558
这个数据集共10个样本,我们下载网页中的GSE163558_RAW.tar,解压后将文件夹格式处理成下面这样。
123456789101112131415161718GSE163558├── GSM5004180_PT1│ ├── barcodes.tsv.gz│ ├── features.tsv.gz│ └── matrix.mtx.gz├── GSM5004181_PT2│ ├── barcodes.tsv.gz│ ├── features.tsv.gz│ └── matrix.mtx.gz├── GSM5004182_PT3│ ├── barcodes.tsv.gz│ ├── features.tsv.gz│ └── matrix.mtx.gz├── GSM5004183_NT1│ ├── barcodes.tsv ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/02/24/hexo-%E8%BF%81%E7%A7%BB/" title="hexo_迁移">hexo_迁移</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-02-24T12:14:57.000Z" title="发表于 2025-02-24 20:14:57">2025-02-24</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/daily/">daily</a></span></div><div class="content">
最近换了电脑,因此想将原始文件夹转移到新电脑上
直接复制直接将原电脑上的文件夹打包,利用网盘/移动硬盘转移,在新电脑配置好环境后复制过来,这里由于我的博客数量很少,所以可以直接复制,那么当我们的文件夹很大时,最好还是利用GitHub进行迁移
网络迁移首先,我们应该配置新电脑的环境,这一点在之前的hexo配置中介绍过,不再赘述
然后新建一个文件夹,并初始化为blog文件夹,接着clone你的blog仓库,将source,theme等资源文件复制过来
但是这种操作只能转移内容,而不能转移配置
另一种方法
原电脑操作:
给你的博客仓库新建一个分支,并设为默认分支,例如hexo
找到一个目录,使用git clone将仓库克隆到本地,删除除了.git外的所有内容
命令行将本地清空的仓库推送到hexo分支
将清空的仓库中的.git文件夹复制到博客目录下
将博客目录下的themes中每个主题文件夹下的.git和.gitgnore删掉
将上述博客目录推送到hexo分支
新电脑:
创建好空文件夹后,git clone
进入目录后,npm install,hexo g,hexo s ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2024/11/14/conda%E7%8E%AF%E5%A2%83%E8%BF%81%E7%A7%BB/" title="conda环境迁移">conda环境迁移</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-11-14T11:05:10.000Z" title="发表于 2024-11-14 19:05:10">2024-11-14</time></span></div><div class="content">前言在笔记本上配置好环境后发现同样的步骤在另一个电脑上无论如何都无法成功,于是想有没有一个办法无痛转移环境
迁移首先将已经配置好并确定可以使用的环境打包压缩,然后发送/转移到另一个电脑上
解压后进行如下操作
12conda env listconda config --append envs_dirs D:\ProgramAPP\anaconda\envs\test
</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2024/11/14/%E5%A6%82%E4%BD%95%E6%89%93%E5%BC%80%E5%B9%B6%E8%B4%A1%E7%8C%AE%E6%96%87%E6%A1%A3%E4%BB%93%E5%BA%93/" title="如何打开并贡献文档仓库">如何打开并贡献文档仓库</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-11-14T09:02:45.000Z" title="发表于 2024-11-14 17:02:45">2024-11-14</time></span></div><div class="content">前言git作为常用的版本管理工具,我们应该学会如何使用git与文档仓库连接
本文以GitHub为例
配置我们使用git连接github
1ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这里的email填入注册GitHub用的邮箱
1ssh-add ~/.ssh/id_rsa
然后将~/.ssh/id_rsa.pub的内容复制到GitHub中,通过下面的命令验证是否连接
1ssh -T git@github.com
如果显示“welcome……”就表示连接成功
打开远程仓库我们可以直接clone到本地进行编辑
12cd ~/Document/git clone git@github.com:respo/respo.git
上面的地址根据具体情况填入
贡献开源代码对于自己创建的仓库,可以在本地的项目文件夹运行
12345git initgit add .git commit -m"the first commit"git remote add origin git@github ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2024/09/05/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/" title="动态规划">动态规划</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-09-05T07:54:44.000Z" title="发表于 2024-09-05 15:54:44">2024-09-05</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/experience/">experience</a></span></div><div class="content">步骤
定义状态:确定问题的状态表示
状态转移方程(核心步骤):建立状态之间的递推关系。通常,当前状态最优解可通过之前计算的状态最优解得到
初始化:确定初始状态的值或设置起始条件
计算最优解:根据状态转移方程,逐步计算所有可能的状态的值
示例假设有一个二维的网络,每个单元格中有一个非负整数,目标为从左上角到右下角,每次只能向右或向下移动,要求路径上的数字之和最小
定义状态:定义dp[i][j]为到达第i行第j列的最小路径和
状态转移方程:由于只能向右或向下移动,因此,状态转移方程为 $dp[i][j] = min(dp[i-1][j],dp[i],[j-1]) + grid[i][j]$
这里grid[i][j]是网格中第i行第j列的值
初始化条件:初始化左上角的值dp[0][0] = grid[0][0];第一行只能从左边来,所以dp[0][j] = dp[0][j-1] + grid[0][j];第一列只能从上面来,所以dp[i][0] = dp[i-1][0] + grid[i][0]
填充DP表:按行或按列迭代填充整个DP表,最终dp[m-1][n-1]将包含 ...</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span><a class="page-number" href="/page/2/#content-inner">2</a><a class="page-number" href="/page/3/#content-inner">3</a><a class="extend next" rel="next" href="/page/2/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/img/star.png" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">xu</div><div class="author-info__description">学习和生活日常</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">28</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">12</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">10</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/xyuechen"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/xyuechen" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="/2624313195@qq.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #4a7dbe;"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">This is my Blog</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2026/01/11/%E9%9B%A8%E6%B0%B4%E5%AE%B9%E5%99%A8/" title="雨水容器">雨水容器</a><time datetime="2026-01-11T12:29:15.000Z" title="发表于 2026-01-11 20:29:15">2026-01-11</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2026/01/11/%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C/" title="两数之和">两数之和</a><time datetime="2026-01-11T10:09:30.000Z" title="发表于 2026-01-11 18:09:30">2026-01-11</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2026/01/06/python%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/" title="python单元测试">python单元测试</a><time datetime="2026-01-06T12:13:25.000Z" title="发表于 2026-01-06 20:13:25">2026-01-06</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/04/28/python%E5%B7%A5%E5%85%B7uv/" title="python工具uv">python工具uv</a><time datetime="2025-04-28T12:55:30.000Z" title="发表于 2025-04-28 20:55:30">2025-04-28</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/04/10/vscode%E8%BF%9C%E7%A8%8B%E9%80%9A%E9%81%93/" title="vscode远程通道">vscode远程通道</a><time datetime="2025-04-10T14:49:03.000Z" title="发表于 2025-04-10 22:49:03">2025-04-10</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
<i class="fas fa-folder-open"></i>
<span>分类</span>
<a class="card-more-btn" href="/categories/" title="查看更多">
<i class="fas fa-angle-right"></i></a>
</div>
<ul class="card-category-list" id="aside-cat-list">
<li class="card-category-list-item "><a class="card-category-list-link" href="/categories/algorithm/"><span class="card-category-list-name">algorithm</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/daily/"><span class="card-category-list-name">daily</span><span class="card-category-list-count">9</span></a><ul class="card-category-list child"><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/daily/error/"><span class="card-category-list-name">error</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/daily/experience/"><span class="card-category-list-name">experience</span><span class="card-category-list-count">1</span></a></li></ul></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/dairy/"><span class="card-category-list-name">dairy</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/experience/"><span class="card-category-list-name">experience</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/experient/"><span class="card-category-list-name">experient</span><span class="card-category-list-count">4</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/hexo/"><span class="card-category-list-name">hexo</span><span class="card-category-list-count">3</span></a></li>
</ul></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/tags/experient/" style="font-size: 1.2em; color: #999da3">experient</a> <a href="/tags/archliux/" style="font-size: 1.1em; color: #999">archliux</a> <a href="/tags/study/" style="font-size: 1.2em; color: #999da3">study</a> <a href="/tags/linux/" style="font-size: 1.4em; color: #99a5b6">linux</a> <a href="/tags/magic/" style="font-size: 1.1em; color: #999">magic</a> <a href="/tags/dl/" style="font-size: 1.3em; color: #99a1ac">dl</a> <a href="/tags/daily/" style="font-size: 1.5em; color: #99a9bf">daily</a> <a href="/tags/archlinux/" style="font-size: 1.3em; color: #99a1ac">archlinux</a> <a href="/tags/R/" style="font-size: 1.1em; color: #999">R</a> <a href="/tags/experience/" style="font-size: 1.2em; color: #999da3">experience</a> <a href="/tags/dl/" style="font-size: 1.1em; color: #999">-dl</a> <a href="/tags/hexo/" style="font-size: 1.2em; color: #999da3">hexo</a></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span><a class="card-more-btn" href="/archives/" title="查看更多">
<i class="fas fa-angle-right"></i></a></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2026/01/"><span class="card-archive-list-date">一月 2026</span><span class="card-archive-list-count">3</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2025/04/"><span class="card-archive-list-date">四月 2025</span><span class="card-archive-list-count">3</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2025/02/"><span class="card-archive-list-date">二月 2025</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/11/"><span class="card-archive-list-date">十一月 2024</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/09/"><span class="card-archive-list-date">九月 2024</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/07/"><span class="card-archive-list-date">七月 2024</span><span class="card-archive-list-count">4</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/06/"><span class="card-archive-list-date">六月 2024</span><span class="card-archive-list-count">3</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/05/"><span class="card-archive-list-date">五月 2024</span><span class="card-archive-list-count">2</span></a></li></ul></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站资讯</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">28</div></div><div class="webinfo-item"><div class="item-name">已运行时间 :</div><div class="item-count" id="runtimeshow" data-publishDate="2023-07-28T16:00:00.000Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2026-01-14T06:21:03.345Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">©2023 - 2026 By xu</div><div class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div><div class="footer_custom_text">Hi,welcome to my blog!</div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.umd.min.js"></script><div class="js-pjax"></div></div></body></html>