From 9dd80fb073ec7284294c7fcfa9694c338d417923 Mon Sep 17 00:00:00 2001 From: handsomezhuzhu <2658601135@qq.com> Date: Sat, 4 Apr 2026 23:04:27 +0800 Subject: [PATCH] chore: update @sugarat/theme to version 0.5.17 and add pnpm as a dependency --- README.md | 224 +-- docs/.vitepress/config.mts | 164 +-- .../theme/components/BackgroundSlider.vue | 304 ++--- .../theme/components/MusicPlayer.vue | 312 ++--- docs/.vitepress/theme/style.scss | 46 +- docs/sop/maindocs/ai-role-play-sequel.md | 170 +-- .../china-marriage-generational-mismatch.md | 148 ++ docs/sop/maindocs/esa-ds.md | 142 +- docs/sop/maindocs/esa.md | 72 +- docs/sop/maindocs/fanghua.md | 218 +-- .../killing-line-vs-roadside-stove.md | 220 +-- docs/sop/maindocs/openclaw.md | 254 ++-- docs/sop/notes/acm-cpp-cheatsheet.md | 796 +++++------ .../notes/data-structure-algorithm-notes.md | 1194 ++++++++-------- docs/sop/notes/discrete-math-notes.md | 1206 ++++++++--------- docs/sop/notes/mayuan-notes.md | 816 +++++------ package-lock.json | 557 +++++--- package.json | 3 +- pnpm-lock.yaml | 96 +- 19 files changed, 3726 insertions(+), 3216 deletions(-) create mode 100644 docs/sop/maindocs/china-marriage-generational-mismatch.md diff --git a/README.md b/README.md index 1f4a7c8..589074b 100644 --- a/README.md +++ b/README.md @@ -1,112 +1,112 @@ -# 我的个人博客 - -本项目基于 [VitePress](https://vitepress.dev/) 构建,并使用了 [@sugarat/theme](https://theme.sugarat.top/) 主题。 - -## 安装与启动 - -**1. 环境准备** - -请确保你的环境中已经安装了 [Node.js](https://nodejs.org/en/) (版本 >= 18) 和 [pnpm](https://pnpm.io/installation)。 - -```sh -# 安装 pnpm -npm i -g pnpm -``` - -**2. 安装依赖** - -你可以使用 `pnpm` 或者 `bun` 来安装项目依赖。 - -```sh -# 使用 pnpm -pnpm install - -# 或者使用 bun -bun install -``` - -**3. 本地开发** - -执行以下命令启动本地开发服务器: - -```sh -pnpm dev -``` - -**4. 项目构建** - -构建用于生产环境的静态文件: - -```sh -pnpm build -``` - -**5. 本地预览** - -在本地预览构建后的产物: - -```sh -pnpm serve -``` - -## 主题与更新 - -### 更新主题 - -本项目使用 `@sugarat/theme` 主题,要升级到最新版本,请执行: - -```sh -pnpm add @sugarat/theme@latest -``` - -### 更新 VitePress - -通常,主题包会依赖最新的 VitePress 版本。如果你需要手动更新 VitePress,可以执行: - -```sh -pnpm add vitepress@latest -``` - -## Github Pages 部署 - -① 开启 Github Pages 的 Git Actions 部署支持。 - -![](https://img.cdn.sugarat.top/mdImg/sugar/8a2454c628d0e2abcc7a0451ddd7d2dc) - -② 复制 `.github/workflows/deploy.yml` 文件到你的项目相同目录下(如果已有则忽略)。 - -③ 修改 `docs/.vitepress/config.mts` 里的构建配置 `base`。 - -**如果你的仓库名是 `username.github.io`,则不需要修改 `base`,保持默认值 `/` 即可。** - -否则,需要将 `base` 修改为 `"/仓库名/"`。 - -```ts -// docs/.vitepress/config.mts -import { defineConfig } from 'vitepress' - -export default defineConfig({ - // ... 其他配置 - base: '/你的仓库名/', -}) -``` - -④ 推送代码到 `main` 分支即可触发自动部署。 - -如果需要进一步修改部署和构建配置,请直接编辑 `.github/workflows/deploy.yml` 文件。 - -## 阿里云 ESA 部署 - -为了在阿里云 ESA(函数与 Pages)中完成一键部署,项目根目录新增了 `esa.json` 配置文件,内容包含安装命令、构建命令、输出目录及 Node.js 版本要求。ESA 会自动读取这些信息完成依赖安装和静态产物构建,无需额外脚本: - -```json -{ - "installCommand": "npm install", - "buildCommand": "npm run build", - "outputDirectory": "docs/.vitepress/dist", - "nodeVersion": "18.20.4" -} -``` - -如果后续需要调整构建流程,只需按需修改对应字段即可。 - +# 我的个人博客 + +本项目基于 [VitePress](https://vitepress.dev/) 构建,并使用了 [@sugarat/theme](https://theme.sugarat.top/) 主题。 + +## 安装与启动 + +**1. 环境准备** + +请确保你的环境中已经安装了 [Node.js](https://nodejs.org/en/) (版本 >= 18) 和 [pnpm](https://pnpm.io/installation)。 + +```sh +# 安装 pnpm +npm i -g pnpm +``` + +**2. 安装依赖** + +你可以使用 `pnpm` 或者 `bun` 来安装项目依赖。 + +```sh +# 使用 pnpm +pnpm install + +# 或者使用 bun +bun install +``` + +**3. 本地开发** + +执行以下命令启动本地开发服务器: + +```sh +pnpm dev +``` + +**4. 项目构建** + +构建用于生产环境的静态文件: + +```sh +pnpm build +``` + +**5. 本地预览** + +在本地预览构建后的产物: + +```sh +pnpm serve +``` + +## 主题与更新 + +### 更新主题 + +本项目使用 `@sugarat/theme` 主题,要升级到最新版本,请执行: + +```sh +pnpm add @sugarat/theme@latest +``` + +### 更新 VitePress + +通常,主题包会依赖最新的 VitePress 版本。如果你需要手动更新 VitePress,可以执行: + +```sh +pnpm add vitepress@latest +``` + +## Github Pages 部署 + +① 开启 Github Pages 的 Git Actions 部署支持。 + +![](https://img.cdn.sugarat.top/mdImg/sugar/8a2454c628d0e2abcc7a0451ddd7d2dc) + +② 复制 `.github/workflows/deploy.yml` 文件到你的项目相同目录下(如果已有则忽略)。 + +③ 修改 `docs/.vitepress/config.mts` 里的构建配置 `base`。 + +**如果你的仓库名是 `username.github.io`,则不需要修改 `base`,保持默认值 `/` 即可。** + +否则,需要将 `base` 修改为 `"/仓库名/"`。 + +```ts +// docs/.vitepress/config.mts +import { defineConfig } from 'vitepress' + +export default defineConfig({ + // ... 其他配置 + base: '/你的仓库名/', +}) +``` + +④ 推送代码到 `main` 分支即可触发自动部署。 + +如果需要进一步修改部署和构建配置,请直接编辑 `.github/workflows/deploy.yml` 文件。 + +## 阿里云 ESA 部署 + +为了在阿里云 ESA(函数与 Pages)中完成一键部署,项目根目录新增了 `esa.json` 配置文件,内容包含安装命令、构建命令、输出目录及 Node.js 版本要求。ESA 会自动读取这些信息完成依赖安装和静态产物构建,无需额外脚本: + +```json +{ + "installCommand": "npm install", + "buildCommand": "npm run build", + "outputDirectory": "docs/.vitepress/dist", + "nodeVersion": "18.20.4" +} +``` + +如果后续需要调整构建流程,只需按需修改对应字段即可。 + diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index a17674b..3229a4f 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -1,82 +1,82 @@ -import { defineConfig } from 'vitepress' - -// 导入主题的配置 -import { blogTheme } from './blog-theme' - -// 如果使用 GitHub/Gitee Pages 等公共平台部署 -// 通常需要修改 base 路径,通常为“/仓库名/” -// 如果项目名已经为 name.github.io 域名,则不需要修改! -// const base = process.env.GITHUB_ACTIONS === 'true' -// ? '/vitepress-blog-sugar-template/' -// : '/' - -// Vitepress 默认配置 -// 详见文档:https://vitepress.dev/reference/site-config -export default defineConfig({ - // 继承博客主题(@sugarat/theme) - extends: blogTheme, - // base, - lang: 'zh-cn', - title: 'SIMON BLOG', - description: '同是天涯沦落人,相逢何必曾相识', - lastUpdated: true, - markdown: { - math: true - }, - // 详见:https://vitepress.dev/zh/reference/site-config#head - head: [ - // 配置网站的图标(显示在浏览器的 tab 上) - // ['link', { rel: 'icon', href: `${base}favicon.ico` }], // 修改了 base 这里也需要同步修改 - ['link', { rel: 'icon', href: '/favicon.ico' }] - ], - themeConfig: { - // 展示 2,3 级标题在目录中 - outline: { - level: [2, 3], - label: '目录' - }, - // 默认文案修改 - returnToTopLabel: '回到顶部', - sidebarMenuLabel: '相关文章', - lastUpdatedText: '上次更新于', - - - - // 设置logo - logo: '/logo.jpg', - // editLink: { - // pattern: - // 'https://github.com/ATQQ/sugar-blog/tree/master/packages/blogpress/:path', - // text: '去 GitHub 上编辑内容' - // }, - nav: [ - { text: '首页', link: '/' }, -// { text: '导航页', link: 'http://home.zhuzihan.com/' }, - { text: '个人导航', link: 'https://home.zhuzihan.com/' }, - { text: '主题仓库', link: 'https://github.com/ATQQ/sugar-blog/tree/master/packages/theme' }, - { text: '关于作者', link: 'https://github.com/handsomezhuzhu' }, - { text: '探针', link: 'https://state.zhuzihan.com/' }, - { text: 'AI API测活', link: 'https://api-test.zhuzihan.com/' }, - { text: '文件快递柜', link: 'https://file.zhuzihan.com/' }, - { text: 'OpenWebUI', link: 'https://ai.zhuzihan.com/' }, - { text: '临时2fa', link: 'https://2fa.zhuzihan.com/' } - - ], - socialLinks: [ - { - icon: 'github', - link: 'https://github.com/handsomezhuzhu' - } - ] - }, - vite: { - css: { - preprocessorOptions: { - scss: { - api: 'modern-compiler' - } - } - } - } -}) - +import { defineConfig } from 'vitepress' + +// 导入主题的配置 +import { blogTheme } from './blog-theme' + +// 如果使用 GitHub/Gitee Pages 等公共平台部署 +// 通常需要修改 base 路径,通常为“/仓库名/” +// 如果项目名已经为 name.github.io 域名,则不需要修改! +// const base = process.env.GITHUB_ACTIONS === 'true' +// ? '/vitepress-blog-sugar-template/' +// : '/' + +// Vitepress 默认配置 +// 详见文档:https://vitepress.dev/reference/site-config +export default defineConfig({ + // 继承博客主题(@sugarat/theme) + extends: blogTheme, + // base, + lang: 'zh-cn', + title: 'SIMON BLOG', + description: '同是天涯沦落人,相逢何必曾相识', + lastUpdated: true, + markdown: { + math: true + }, + // 详见:https://vitepress.dev/zh/reference/site-config#head + head: [ + // 配置网站的图标(显示在浏览器的 tab 上) + // ['link', { rel: 'icon', href: `${base}favicon.ico` }], // 修改了 base 这里也需要同步修改 + ['link', { rel: 'icon', href: '/favicon.ico' }] + ], + themeConfig: { + // 展示 2,3 级标题在目录中 + outline: { + level: [2, 3], + label: '目录' + }, + // 默认文案修改 + returnToTopLabel: '回到顶部', + sidebarMenuLabel: '相关文章', + lastUpdatedText: '上次更新于', + + + + // 设置logo + logo: '/logo.jpg', + // editLink: { + // pattern: + // 'https://github.com/ATQQ/sugar-blog/tree/master/packages/blogpress/:path', + // text: '去 GitHub 上编辑内容' + // }, + nav: [ + { text: '首页', link: '/' }, +// { text: '导航页', link: 'http://home.zhuzihan.com/' }, + { text: '个人导航', link: 'https://home.zhuzihan.com/' }, + { text: '主题仓库', link: 'https://github.com/ATQQ/sugar-blog/tree/master/packages/theme' }, + { text: '关于作者', link: 'https://github.com/handsomezhuzhu' }, + { text: '探针', link: 'https://state.zhuzihan.com/' }, + { text: 'AI API测活', link: 'https://api-test.zhuzihan.com/' }, + { text: '文件快递柜', link: 'https://file.zhuzihan.com/' }, + { text: 'OpenWebUI', link: 'https://ai.zhuzihan.com/' }, + { text: '临时2fa', link: 'https://2fa.zhuzihan.com/' } + + ], + socialLinks: [ + { + icon: 'github', + link: 'https://github.com/handsomezhuzhu' + } + ] + }, + vite: { + css: { + preprocessorOptions: { + scss: { + api: 'modern-compiler' + } + } + } + } +}) + diff --git a/docs/.vitepress/theme/components/BackgroundSlider.vue b/docs/.vitepress/theme/components/BackgroundSlider.vue index 5603c4f..6ae8fb0 100644 --- a/docs/.vitepress/theme/components/BackgroundSlider.vue +++ b/docs/.vitepress/theme/components/BackgroundSlider.vue @@ -1,152 +1,152 @@ - - - - - + + + + + diff --git a/docs/.vitepress/theme/components/MusicPlayer.vue b/docs/.vitepress/theme/components/MusicPlayer.vue index c058dbb..df8bf9a 100644 --- a/docs/.vitepress/theme/components/MusicPlayer.vue +++ b/docs/.vitepress/theme/components/MusicPlayer.vue @@ -1,156 +1,156 @@ - - - - - + + + + + diff --git a/docs/.vitepress/theme/style.scss b/docs/.vitepress/theme/style.scss index b280cad..5501b5d 100644 --- a/docs/.vitepress/theme/style.scss +++ b/docs/.vitepress/theme/style.scss @@ -62,4 +62,48 @@ @media (max-width: 768px) { font-size: 2.2rem !important; } -} \ No newline at end of file +} + +/* 美化文章底部的 TIP 提示块和标题图标 */ +.vp-doc .custom-block.tip { + border: 1px solid rgba(25, 118, 210, 0.16); + background: + linear-gradient(135deg, rgba(25, 118, 210, 0.08), rgba(255, 255, 255, 0.92)); + border-radius: 16px; + box-shadow: 0 10px 24px rgba(25, 118, 210, 0.08); +} + +.dark .vp-doc .custom-block.tip { + background: + linear-gradient(135deg, rgba(77, 171, 247, 0.12), rgba(17, 24, 39, 0.9)); + border-color: rgba(77, 171, 247, 0.22); + box-shadow: 0 12px 28px rgba(0, 0, 0, 0.22); +} + +.vp-doc .custom-block.tip .custom-block-title { + display: flex; + align-items: center; + gap: 10px; + color: #1565c0; + font-weight: 700; + letter-spacing: 0.02em; +} + +.dark .vp-doc .custom-block.tip .custom-block-title { + color: #74c0fc; +} + +.vp-doc .custom-block.tip .custom-block-title::before { + content: "i"; + display: inline-flex; + align-items: center; + justify-content: center; + width: 22px; + height: 22px; + border-radius: 999px; + background: linear-gradient(135deg, #1e88e5, #42a5f5); + color: #fff; + font-size: 13px; + font-weight: 700; + box-shadow: 0 6px 14px rgba(30, 136, 229, 0.28); +} diff --git a/docs/sop/maindocs/ai-role-play-sequel.md b/docs/sop/maindocs/ai-role-play-sequel.md index 5a38e51..1fc3d83 100644 --- a/docs/sop/maindocs/ai-role-play-sequel.md +++ b/docs/sop/maindocs/ai-role-play-sequel.md @@ -1,85 +1,85 @@ ---- -title: 从酒馆到小手机:AI角色扮演的次世代进化 # 文章标题,支持副标题格式(用 - 分隔) -top: 0 # 置顶级别:1-3,数字越大越靠前,0表示不置顶 -date: 2025-12-12 18:00:00 # 发布日期和时间,格式:YYYY-MM-DD HH:MM:SS -descriptionHTML: ' -剧情聊天2.0时代 -' -tags: # 文章标签列表,用于分类和搜索 - - AI - - 酒馆 - - 小手机 -sidebar: true # 是否显示侧边栏:true显示,false隐藏 -readingTime: true # 是否显示阅读时间:true显示,false隐藏 -hiddenCover: true # 是否隐藏封面图:true隐藏,false显示 -cover: url # 封面图片路径,相对于public目录 -sticky: 85 # 精选文章设置:值越大在首页展示越靠前,0表示不精选 -hidden: false # 是否隐藏文章:true隐藏(模板用),false显示(正式文章用) -recommend: true ---- - -# 从酒馆到小手机:AI角色扮演的次世代进化 - -#### -##### 写在前面: -#### - - -  这是《从角色扮演到剧情聊天,翻开AI的另一面》的续篇。几个月过去,AI角色扮演的世界又发生了翻天覆地的变化。如果说酒馆是1.0时代,那么现在我们已经进入了2.0的"小手机"时代。 - - -
- -### [上一篇:《从角色扮演到剧情聊天,翻开AI的另一面》](ai-role-play.md) - -#### 没想到还能续上 - -## 壹 · 进化 - -
- -  最近出现了一个神秘的名字——"小手机"。起初我以为是某种新的AI硬件设备,后来才知道,这相当于酒馆的一个升级版,他将AI角色扮演推向全新的维度。 - -  技术栈还是网页,只是高度模仿手机。 - -#### 放几张图,你没看错,这是小手机的效果 - -![1](/10/1.jpg) - -![2](/10/2.jpg) - -  当然现在还不能做到很理想的状态,但是我看现在"小手机"的微信界面也和平常的微信没什么区别了。AI流式传输的时候对方显示"对方正在输入..."。后面输出就是消息气泡,而且可以做到和正常人聊天一样的效果,发比如一些表情,收发红包之类的。 - -  与酒馆长文不同,"小手机"完美复刻了现代社交软件的所有细节:消息的时间戳、已读未读状态、撤回消息的提示、甚至是"对方正在输入"的动画。 - -  当然最佳效果是AI还可以通过工具调用来回复表情包,做一些人类特有的操作。其实我认为完全可以做到了,这么大半年以来,大模型的工具调用能力只能说是越来越强了。甚至是接入语音,模仿微信的语音和通话功能。 - - - - -
- -## 贰 · 通话 & 语音 - -
- -  一个玩酒馆的朋友给我提起过这个功能,就是声音复刻和TTS嵌入。比如复刻一个用户期望的声音,然后嵌入在酒馆内朗读特定的对话内容。如果换到小手机里面,就是一段语音消息,甚至是通话功能。 - -  不过目前国内做复刻的也不多,试了一下豆包还不错。但是很好奇,比如谷歌、微软、OpenAI都没有在做复刻相关的开发。是需求度还不够吗?不过也有一些小厂家在做,目前来看需求不大。但从单身经济的眼光出发,定制化AI语音的未来还是一片光明。 - -
- -## 叁 · 模型 - -
- -  其实聊了两次AI角色扮演的文章,我一直在说AI衍生的工具,没有好好讲最底层的东西——模型。为了让这么多衍生的工具繁荣,模型能力绝对得强。我认为当前评估模型的标准不应该再是"xxx跑分"高于xxx模型xx倍,当然不是讽刺国内的模型厂商,只是再强的模型文本生成,他还是只能读取和生成文本。 - -  我认为一个模型的基础标准就得是多模态,包括视频,图片,文件,语音的多种输入,和多种输出,然后是工具调用,因为MCP空前发达,我接一堆MCP进去,你模型不用不也白搭。 - - -  期待国产模型能慢慢支持多模态和很好的工具调用吧,这样我也不会为了Gemini 3 Pro东奔西走。 - -![3](/10/3(1).png) - - +--- +title: 从酒馆到小手机:AI角色扮演的次世代进化 # 文章标题,支持副标题格式(用 - 分隔) +top: 0 # 置顶级别:1-3,数字越大越靠前,0表示不置顶 +date: 2025-12-12 18:00:00 # 发布日期和时间,格式:YYYY-MM-DD HH:MM:SS +descriptionHTML: ' +剧情聊天2.0时代 +' +tags: # 文章标签列表,用于分类和搜索 + - AI + - 酒馆 + - 小手机 +sidebar: true # 是否显示侧边栏:true显示,false隐藏 +readingTime: true # 是否显示阅读时间:true显示,false隐藏 +hiddenCover: true # 是否隐藏封面图:true隐藏,false显示 +cover: url # 封面图片路径,相对于public目录 +sticky: 85 # 精选文章设置:值越大在首页展示越靠前,0表示不精选 +hidden: false # 是否隐藏文章:true隐藏(模板用),false显示(正式文章用) +recommend: true +--- + +# 从酒馆到小手机:AI角色扮演的次世代进化 + +#### +##### 写在前面: +#### + + +  这是《从角色扮演到剧情聊天,翻开AI的另一面》的续篇。几个月过去,AI角色扮演的世界又发生了翻天覆地的变化。如果说酒馆是1.0时代,那么现在我们已经进入了2.0的"小手机"时代。 + + +
+ +### [上一篇:《从角色扮演到剧情聊天,翻开AI的另一面》](ai-role-play.md) + +#### 没想到还能续上 + +## 壹 · 进化 + +
+ +  最近出现了一个神秘的名字——"小手机"。起初我以为是某种新的AI硬件设备,后来才知道,这相当于酒馆的一个升级版,他将AI角色扮演推向全新的维度。 + +  技术栈还是网页,只是高度模仿手机。 + +#### 放几张图,你没看错,这是小手机的效果 + +![1](/10/1.jpg) + +![2](/10/2.jpg) + +  当然现在还不能做到很理想的状态,但是我看现在"小手机"的微信界面也和平常的微信没什么区别了。AI流式传输的时候对方显示"对方正在输入..."。后面输出就是消息气泡,而且可以做到和正常人聊天一样的效果,发比如一些表情,收发红包之类的。 + +  与酒馆长文不同,"小手机"完美复刻了现代社交软件的所有细节:消息的时间戳、已读未读状态、撤回消息的提示、甚至是"对方正在输入"的动画。 + +  当然最佳效果是AI还可以通过工具调用来回复表情包,做一些人类特有的操作。其实我认为完全可以做到了,这么大半年以来,大模型的工具调用能力只能说是越来越强了。甚至是接入语音,模仿微信的语音和通话功能。 + + + + +
+ +## 贰 · 通话 & 语音 + +
+ +  一个玩酒馆的朋友给我提起过这个功能,就是声音复刻和TTS嵌入。比如复刻一个用户期望的声音,然后嵌入在酒馆内朗读特定的对话内容。如果换到小手机里面,就是一段语音消息,甚至是通话功能。 + +  不过目前国内做复刻的也不多,试了一下豆包还不错。但是很好奇,比如谷歌、微软、OpenAI都没有在做复刻相关的开发。是需求度还不够吗?不过也有一些小厂家在做,目前来看需求不大。但从单身经济的眼光出发,定制化AI语音的未来还是一片光明。 + +
+ +## 叁 · 模型 + +
+ +  其实聊了两次AI角色扮演的文章,我一直在说AI衍生的工具,没有好好讲最底层的东西——模型。为了让这么多衍生的工具繁荣,模型能力绝对得强。我认为当前评估模型的标准不应该再是"xxx跑分"高于xxx模型xx倍,当然不是讽刺国内的模型厂商,只是再强的模型文本生成,他还是只能读取和生成文本。 + +  我认为一个模型的基础标准就得是多模态,包括视频,图片,文件,语音的多种输入,和多种输出,然后是工具调用,因为MCP空前发达,我接一堆MCP进去,你模型不用不也白搭。 + + +  期待国产模型能慢慢支持多模态和很好的工具调用吧,这样我也不会为了Gemini 3 Pro东奔西走。 + +![3](/10/3(1).png) + + diff --git a/docs/sop/maindocs/china-marriage-generational-mismatch.md b/docs/sop/maindocs/china-marriage-generational-mismatch.md new file mode 100644 index 0000000..c949795 --- /dev/null +++ b/docs/sop/maindocs/china-marriage-generational-mismatch.md @@ -0,0 +1,148 @@ +--- +title: 男的不贪财,女的不好色 +top: 0 +date: 2026-04-04 21:30:00 +descriptionHTML: ' +当性别失衡、教育分化与高婚育成本叠加,婚姻开始出现明显的代际错位 +' +tags: + - 社会观察 + - 随笔 +sidebar: true +readingTime: true +hiddenCover: true +sticky: 0 +hidden: false +recommend: true +publish: false +--- + +# 男的不贪财,女的不好色 + +#### +##### 写在前面: +#### + + +  说出来你可能不信, + + +  如果把今天中国婚姻市场理解成一个单纯的“年轻人不想结婚”故事,可能会漏掉更关键的结构性背景。真正的问题是,婚姻市场已经不只是“结不结”的问题,而是正在出现明显的**代际错配**: 出生端长期偏高的性别比,把男多女少的压力一路传导到了适婚年龄;与此同时,女性受教育程度提升、经济独立增强、晚婚观念普及,又改变了原有的配对逻辑。于是,00后、90后、80后看到的婚恋世界,并不是同一个市场。 + +  一端是00后女性开始进入登记和婚配阶段,同龄男性却从出生时就明显“超编”;另一端是90后女性的择偶标准越来越接近同质匹配,传统的“男高女低”教育婚配在松动;再往上看,80后和部分90后男性已经承受了更直接的婚姻挤压,尤其在农村、低学历和弱资源地区,这种压力更集中、更难靠个人努力化解。 + +  所以,这篇文章不想讨论“谁挑剔”“谁剩下”这类情绪化话题,而是想回答三个更现实的问题:**第一,婚姻市场为什么会出现跨代配对?第二,80/90后男性的单身压力到底从哪里来?第三,这种代际错配会带来哪些长期后果?** + +
+ +## 壹 + +
+ +  国家统计局早已给出过一个非常直白的判断:根据七普口径,**20-40岁的适婚年龄男性比女性多了1752万人,性别比为108.9**[1]。这不是抽象的“男女比例失衡”,而是婚恋市场里最硬的底层约束。只要这个人数差存在,同龄匹配就不可能让所有人都找到位置,必然会有人向上跨代、向下延后,或者最终被挤出婚姻市场。 + +  更需要注意的是,这个压力不是突然出现的。国家统计局关于人口发展的专题报告提到,“十五”时期中国**出生人口性别比为118.3**,明显高于正常区间[2]。而在《2020年中国儿童人口状况》报告中,儿童人口性别比从1982年的106.2一路升至2015年的118.2,到2020年虽已回落到**113.8**,但失衡并没有消失[3]。换句话说,00后进入婚恋市场时,面对的并不是一个已经修复好的环境,而是过去多年性别失衡的滞后结果。 + +```mermaid +xychart-beta + title "从出生端到婚配端:性别失衡的传导" + x-axis ["十五时期出生","2020年儿童人口","20-40岁适婚年龄"] + y-axis "每100名女性对应男性" 100 --> 120 + bar [118.3, 113.8, 108.9] +``` + +  这张图里放在一起的并不是完全同口径数据,但它足够说明一个事实:**失衡并没有在出生之后自动消失,而是在年龄推进中以另一种形式留了下来。** 从“多生了多少男孩”,变成“婚配年龄多了多少男性”,再变成婚姻市场上的真实挤压。 + +  也正因为如此,今天很多人看到的现象,比如00后女生更容易和年长几岁甚至十来岁的男性配对,并不只是个人偏好变化,更是人口结构把市场硬生生挤出来的结果。每一个年龄层的配对选择,都被前一阶段的人口结构悄悄设了边界。 + +
+ +## 贰 + +
+ +  说“00后女生上嫁80/90后”,如果只当成某种网络标签,会显得很夸张;但如果放进人口结构里,这件事其实并不难理解。00后女性开始进入婚姻登记时,同龄男性人数本来就更充裕,而年纪更大的90后、部分80后男性则处在“婚姻库存”尚未完全消化的阶段。于是,年轻女性向上匹配,和年龄更大的男性形成婚配,并不是偶发,而是结构挤压下的自然结果。 + +  这里有一个容易被忽视的细节:公开官方统计并没有持续发布“按出生年代、按性别拆开的全国结婚登记明细”,所以网络上流传的“00后男生登记很少、女生明显更多”之类说法,更多只能被看作阶段性观察,而不是稳定的全国硬口径。**但即使不依赖这些网传数字,仅凭适婚年龄男性多出1752万人这一条,也足以解释为什么00后女性更容易发生跨龄匹配。** + +  和00后相比,90后婚配模式的变化并不主要体现在“年龄差突然变大”,而更体现在**匹配逻辑本身变了**。卿石松基于CFPS 2010-2020年数据整理出的12523对夫妻样本显示,在最年轻的出生队列中,传统“梯度婚”持续下降,而**女性向下婚比例升至25.8%,已高于梯度婚的21.7%**[4]。这意味着,至少在教育维度上,年轻一代女性已经不再完全遵循“必须找学历更高的男性”这套旧规则。 + +```mermaid +xychart-beta + title "最年轻队列的教育匹配变化" + x-axis ["传统梯度婚","女性向下婚"] + y-axis "占比(%)" 0 --> 30 + bar [21.7, 25.8] +``` + +  这件事非常重要。它说明90后婚姻并没有简单走向“人人都嫁更年长、更强势的男性”,相反,很多90后女性更接受教育相近、生活方式相近,甚至学历略低于自己的伴侣。**年龄差未必更大,但教育和价值观的同质匹配变得更重要了。** + +  从这个角度看,今天的婚姻市场其实已经分成了两层:一层是更接近传统逻辑、资源导向更强、城乡差异更明显的跨龄婚配;另一层是更强调教育、城市生活方式和情感兼容性的同代婚配。00后和90后之所以呈现不同婚恋景观,不是因为一代人突然“变了”,而是她们进入市场时,所面对的供需结构和社会规则本来就不同。 + +
+ +## 叁 + +
+ +  很多关于“剩男”的讨论,喜欢把问题缩成个人能力问题,比如收入不够、性格不好、不够会说话。但从人口学角度看,80/90后男性的单身压力首先是**结构性挤压**。总量上,适婚年龄男性多于女性;匹配上,部分年轻女性向上跨龄,进一步吸收了中高年龄段男性需求;而在教育和城市资源维度上,女性又越来越偏向同质匹配。三股力量叠加后,被挤压得最明显的,往往就是资源偏弱的一批男性。 + +  这种分化在城乡之间尤其明显。城市里,高学历女性虽然也会晚婚,但她们通常并不缺少选择,只是更晚进入婚姻;真正更容易在婚姻市场长期滞留的,常常是农村、县域、低学历、经济条件一般的男性。国家统计局关于儿童人口和出生性别比的报告也提醒过,部分地区的性别失衡更重,由此带来的就是更典型的“婚姻挤压”[3]。 + +  再加上现实成本的上升,这种挤压会被继续放大。房价、彩礼、婚礼、育儿、教育支出,都在提高结婚门槛。女性初婚年龄推迟,意味着男性如果要竞争同一批婚配资源,往往需要更晚完成经济准备;而当准备周期变长,年纪也随之上移,又会进一步推动跨龄婚配和择偶焦虑。于是很多80/90后男性不是“不想结”,而是越往后拖,越发现自己进入了一个更难的赛道。 + +  所以,对这一代男性来说,单身并不一定是个人失败。更准确地说,它是人口结构、地域差异、教育分层与高婚育成本叠加后的结果。**有些人输的不是临门一脚,而是一开始就站在了更拥挤的位置上。** + +
+ +## 肆 + +
+ +  婚姻挤压最直接的后果,是婚姻稳定性和家庭关系都更容易承压。2025年2季度民政统计数据显示,截至上半年全国**结婚登记353.9万对、离婚登记133.1万对**;到2025年4季度累计,**结婚登记676.3万对、离婚登记274.3万对**[5][6]。与2024年全国**结婚610.6万对、离婚351.3万对**相比,2025年结婚有回升,但整体仍处低位区间,婚姻并没有回到过去那种高强度扩张状态[7]。 + +```mermaid +xychart-beta + title "2024-2025年全国婚姻登记变化" + x-axis ["2024","2025"] + y-axis "万对" 0 --> 700 + bar "结婚登记" [610.6, 676.3] + line "离婚登记" [351.3, 274.3] +``` + +  这意味着什么?意味着婚姻对很多人来说,已经不再是默认选项,而是一场更谨慎、更昂贵、也更容易后悔的决策。对于被婚姻市场持续挤压的群体而言,彩礼竞争、代际赡养、家庭关系紧张、长期单身后的健康与养老问题,都会在未来更集中地显现出来。 + +  另一个经常被忽视的问题,是**高龄父亲的生育健康风险**。如果00后女性和更年长的80/90后男性配对占比上升,那么“父龄上移”就是一个不得不面对的后果。既有遗传学研究显示,父亲年龄越大,子代新发突变数量通常越多。Nature 的经典研究指出,父龄上升与后代新发突变数增加密切相关[8];后续基于多孩家庭的研究也观察到,父龄每增加1岁,后代新发突变数大致会增加**1-2个**[9]。这并不等于“高龄父亲一定带来疾病”,但它意味着风险背景确实在上升。 + +  在生殖医学层面,越来越多研究也发现男性年龄和精子DNA碎片率、表观遗传改变之间存在关联。关于先进父龄与精子DNA碎片的系统综述指出,男性衰老可能与精子DNA完整性下降相关[10];2024年的研究则进一步提示,先进父龄在胎盘与既往精子研究中都能观察到与神经发育相关位点的DNA甲基化改变[11]。再结合精神病学和自闭症研究中的长期观察,合理而克制的说法应该是:**父龄上移并非不可生育,但确实值得更早做生育规划、精液质量评估和遗传咨询。** + +  也就是说,代际错配不会只停留在“谁和谁结婚”这个层面,它会一路延伸到家庭稳定、养育压力、健康风险和社会保障负担。婚姻看起来像私事,但当它背后站着1752万人的结构性缺口时,它就已经不是纯粹的私事了。 + +
+ +## 伍 + +
+ +  如果承认今天的婚姻问题有很大一部分是结构性的,那么解决思路也不能停留在责怪个体。对年轻人来说,最现实的建议不是“赶紧结婚”,而是尽量把婚恋和生育决策前移到**理性规划**层面: 能在身体状态、经济条件、职业节奏更平衡时完成婚育,当然更好;如果确实要延后,也应该把生育健康评估纳入计划,而不是只把年龄当成一个抽象数字。 + +  对父母一代而言,也许更需要放下那种“只要结了就行”的焦虑。结构性错配意味着,不是每个年龄段的人都还能按照上一代的节奏完成婚育。催婚有时并不能解决问题,只会把个体推入更仓促、质量更低的关系里。真正有帮助的,是在住房、育儿支持、双方家庭边界、地区流动上提供更具体的支持。 + +  对政策层面来说,问题同样不能只理解成“鼓励结婚生孩子”这么简单。出生人口性别比的长期纠偏、对女性教育与就业的平等保护、对高彩礼和过度婚嫁成本的治理、对农村和弱资源地区婚姻挤压的持续关注,以及更普惠的生育和托育支持,都是同一张答卷上的题目。只抓其中一项,效果都有限。 + +  婚姻从来不只是两个人的浪漫选择,它也是人口结构、性别观念、教育机会和社会成本的综合镜像。今天我们看到的00后跨龄婚、90后同龄匹配和80/90后男性单身潮,归根到底都不是某一代人的道德问题,而是一个时代在人口与社会转型中的真实回声。 + +  与其互相嘲讽,不如承认现实:**这不是谁“输给了爱情”,而是婚姻市场本身变了。** + +> [!TIP] 参考文献 +> [1] 国家统计局. 国家统计局新闻发言人就2021年4月份国民经济运行情况答记者问[EB/OL]. 2021-05-17. https://www.stats.gov.cn/sj/sjjd/202302/t20230202_1896489.html. +> [2] 国家统计局. “十五”时期我国人口保持低速增长[EB/OL]. https://www.stats.gov.cn/zt_18555/ztfx/15cj/202303/t20230301_1920492.html. +> [3] 国家统计局. 2020年中国儿童人口状况[EB/OL]. https://www.stats.gov.cn/zs/tjwh/tjkw/tjzl/202304/P020230419425666818737.pdf. +> [4] 卿石松. 女性教育提升与生育行为变迁: 基于夫妻匹配视角的研究[J]. 社会学研究, 2024(2): 179-202. +> [5] 中华人民共和国民政部. 2025年2季度民政统计数据[EB/OL]. https://www.mca.gov.cn/mzsj/xzqh/2025/202502tjsj.htm. +> [6] 中华人民共和国民政部. 2025年4季度民政统计数据[EB/OL]. https://www.mca.gov.cn/mzsj/xzqh/2025/202504tjsj.htm. +> [7] 中华人民共和国民政部. 2024年民政事业发展统计公报[EB/OL]. 2025-07-30. https://www.mca.gov.cn/n1288/n1294/n1554/c1662004999980006190/content.html. +> [8] Kong A, Frigge M L, Masson G, et al. Rate of de novo mutations and the importance of father's age to disease risk[J]. Nature, 2012, 488: 471-475. https://www.nature.com/articles/nature11396. +> [9] Jonsson H, Sulem P, Kehr B, et al. Parental influence on human germline de novo mutations in 1,548 trios[J]. Nature, 2017, 549: 519-522. https://www.nature.com/articles/nature24018. +> [10] Johnson S L, Dunleavy J, Gemmell N J, et al. Advanced Paternal Age and Sperm DNA Fragmentation: A Systematic Review[J]. World Journal of Men's Health, 2021, 39(1): 104-115. https://pubmed.ncbi.nlm.nih.gov/33987998/. +> [11] Dube-Linteau A, et al. Advanced Paternal Age Impacts Common Loci in the Sperm and Placenta DNA Methylomes[J/OL]. Clinical Epigenetics, 2024. https://pubmed.ncbi.nlm.nih.gov/41159265/ diff --git a/docs/sop/maindocs/esa-ds.md b/docs/sop/maindocs/esa-ds.md index 5a3a3f4..e99c9dc 100644 --- a/docs/sop/maindocs/esa-ds.md +++ b/docs/sop/maindocs/esa-ds.md @@ -1,72 +1,72 @@ ---- -title: 阿里云 ESA Pages 边缘开发大赛 -top: 0 -date: 2025-12-19 13:25:00 -descriptionHTML: '部署网站到 Pages,分 10 万奖金!' -tags: - - 阿里云 - - ESA -sidebar: true -readingTime: true -hiddenCover: true -cover: url -sticky: 0 -hidden: false -recommend: true ---- - -# 阿里云 ESA Pages 边缘开发大赛 - -#### - -::: details 什么是 ESA Pages - -阿里云 ESA Pages 是一个边缘即服务(Edge as a Service)平台,提供一站式的前端部署解决方案。它允许开发者将静态网站或前端应用快速部署到阿里云的边缘节点上,享受低延迟、高可用的访问体验。 - -::: - -阿里云正在举办 **ESA Pages 边缘开发大赛**,邀请广大开发者将网站部署到 Pages,共同瓜分 **10 万奖金**!无论你是前端大神还是技术爱好者,都有机会赢取丰厚大奖,单人最高可拿 **70000 元** 奖励! - -![阿里云ESA Pages 开发大赛](/11/1.png) - -## 赛事安排 - -- **报名与作品提交**:即日起 - 2026年01月20日 -- **截止报名与作品提交**:2026年01月20日 -- **人气作品统计截止**:2026年02月05日 -- **获奖名单公布**:2026年02月10日 - -## 奖项设置 - -本次大赛奖金丰厚,单人最高可拿 **70000 元** 奖励! - -### 一、积极参与奖 -**100份 | ¥50 天猫超市卡** -限前100名提交有效作品的参赛者,先到先得! - -### 二、打榜激励奖 -**无限打榜:每人可投多份作品,每份作品最高拿奖3次!** - -设立 **创意卓越奖**、**应用价值奖**、**技术探索奖** 三大赛道: -- **金奖**:每个奖项各 **1人** | 每人:**¥3,000** -- **银奖**:每个奖项各 **2人** | 每人:**¥2,000** -- **铜奖**:每个奖项各 **3人** | 每人:**¥1,000** -- **入围奖**:每个奖项各 **260人** | 每人:**¥50 天猫超市卡** - -### 三、人气作品奖 -- **前10名**:雷蛇键盘(约¥899) -- **前10名**:罗技鼠标(约¥599) -- **前10名**:东芝硬盘(约¥519) - -### 四、邀请有奖 -进入赛事活动页生成个人专属链接,邀请好友参赛,冲榜赢天猫超市卡! - -## 参赛报名引导 - -1. 在阿里云官网天池大赛页面搜索「**ESA Pages**」或者「**边缘开发**」。 -2. 点击「**立即报名**」即可参与。 -3. 赛事交流沟通钉钉群:118400030886 - -快来参与吧,用你的代码赢取丰厚大奖! - +--- +title: 阿里云 ESA Pages 边缘开发大赛 +top: 0 +date: 2025-12-19 13:25:00 +descriptionHTML: '部署网站到 Pages,分 10 万奖金!' +tags: + - 阿里云 + - ESA +sidebar: true +readingTime: true +hiddenCover: true +cover: url +sticky: 0 +hidden: false +recommend: true +--- + +# 阿里云 ESA Pages 边缘开发大赛 + +#### + +::: details 什么是 ESA Pages + +阿里云 ESA Pages 是一个边缘即服务(Edge as a Service)平台,提供一站式的前端部署解决方案。它允许开发者将静态网站或前端应用快速部署到阿里云的边缘节点上,享受低延迟、高可用的访问体验。 + +::: + +阿里云正在举办 **ESA Pages 边缘开发大赛**,邀请广大开发者将网站部署到 Pages,共同瓜分 **10 万奖金**!无论你是前端大神还是技术爱好者,都有机会赢取丰厚大奖,单人最高可拿 **70000 元** 奖励! + +![阿里云ESA Pages 开发大赛](/11/1.png) + +## 赛事安排 + +- **报名与作品提交**:即日起 - 2026年01月20日 +- **截止报名与作品提交**:2026年01月20日 +- **人气作品统计截止**:2026年02月05日 +- **获奖名单公布**:2026年02月10日 + +## 奖项设置 + +本次大赛奖金丰厚,单人最高可拿 **70000 元** 奖励! + +### 一、积极参与奖 +**100份 | ¥50 天猫超市卡** +限前100名提交有效作品的参赛者,先到先得! + +### 二、打榜激励奖 +**无限打榜:每人可投多份作品,每份作品最高拿奖3次!** + +设立 **创意卓越奖**、**应用价值奖**、**技术探索奖** 三大赛道: +- **金奖**:每个奖项各 **1人** | 每人:**¥3,000** +- **银奖**:每个奖项各 **2人** | 每人:**¥2,000** +- **铜奖**:每个奖项各 **3人** | 每人:**¥1,000** +- **入围奖**:每个奖项各 **260人** | 每人:**¥50 天猫超市卡** + +### 三、人气作品奖 +- **前10名**:雷蛇键盘(约¥899) +- **前10名**:罗技鼠标(约¥599) +- **前10名**:东芝硬盘(约¥519) + +### 四、邀请有奖 +进入赛事活动页生成个人专属链接,邀请好友参赛,冲榜赢天猫超市卡! + +## 参赛报名引导 + +1. 在阿里云官网天池大赛页面搜索「**ESA Pages**」或者「**边缘开发**」。 +2. 点击「**立即报名**」即可参与。 +3. 赛事交流沟通钉钉群:118400030886 + +快来参与吧,用你的代码赢取丰厚大奖! + ![阿里云ESA Pages 开发大赛](/11/2.png) \ No newline at end of file diff --git a/docs/sop/maindocs/esa.md b/docs/sop/maindocs/esa.md index f0b382f..7fd2866 100644 --- a/docs/sop/maindocs/esa.md +++ b/docs/sop/maindocs/esa.md @@ -1,37 +1,37 @@ ---- -title: 阿里ESA比其他CDN好在哪 -top: 0 -date: 2025-12-10 13:25:00 -descriptionHTML: '来聊聊CDN' -tags: - - 互联网 - - 广告 -sidebar: true -readingTime: true -hiddenCover: true -cover: url -sticky: 0 -hidden: false -recommend: true -publish: false ---- - -# 阿里ESA比其他CDN好在哪 - -#### - -::: details 什么是CDN - -CDN(内容分发网络)就像是快递在各地的分拨中心。它把网站的内容缓存到离用户最近的服务器上,这样用户访问时就不用千里迢迢去源站取数据,而是直接从家门口的节点获取,速度更快,也更稳定。 - -::: - -作为经常玩域名、网页、博客、web项目的人,真心觉得[阿里云 ESA](http://s.tb.cn/e6.0Fu67m) 在国内体验上吊打 Cloudflare。CF 虽强但国内访问常年“减速”,而 [ESA](http://s.tb.cn/e6.0Fu67m) 依托阿里国内节点,延迟低、丢包少,稳得一批。对于面向国内用户的业务,ESA 这种不用折腾优选 IP、开箱即用的丝滑感,才是真的省心。 - -链接:http://s.tb.cn/e6.0Fu67m - -![图片](/9/1.png) - -ESA效果: - +--- +title: 阿里ESA比其他CDN好在哪 +top: 0 +date: 2025-12-10 13:25:00 +descriptionHTML: '来聊聊CDN' +tags: + - 互联网 + - 广告 +sidebar: true +readingTime: true +hiddenCover: true +cover: url +sticky: 0 +hidden: false +recommend: true +publish: false +--- + +# 阿里ESA比其他CDN好在哪 + +#### + +::: details 什么是CDN + +CDN(内容分发网络)就像是快递在各地的分拨中心。它把网站的内容缓存到离用户最近的服务器上,这样用户访问时就不用千里迢迢去源站取数据,而是直接从家门口的节点获取,速度更快,也更稳定。 + +::: + +作为经常玩域名、网页、博客、web项目的人,真心觉得[阿里云 ESA](http://s.tb.cn/e6.0Fu67m) 在国内体验上吊打 Cloudflare。CF 虽强但国内访问常年“减速”,而 [ESA](http://s.tb.cn/e6.0Fu67m) 依托阿里国内节点,延迟低、丢包少,稳得一批。对于面向国内用户的业务,ESA 这种不用折腾优选 IP、开箱即用的丝滑感,才是真的省心。 + +链接:http://s.tb.cn/e6.0Fu67m + +![图片](/9/1.png) + +ESA效果: + ![图片](/9/2.png) \ No newline at end of file diff --git a/docs/sop/maindocs/fanghua.md b/docs/sop/maindocs/fanghua.md index adb9e75..5b177ca 100644 --- a/docs/sop/maindocs/fanghua.md +++ b/docs/sop/maindocs/fanghua.md @@ -1,110 +1,110 @@ ---- -title: 解读B站UP主《芳华》的解读 -top: 0 -date: 2025-12-06 13:25:00 -descriptionHTML: ' -“网左大本营”的成因与发展 -' -tags: - - 随笔 - - 芳华 - - 互联网 -sidebar: true -readingTime: true -hiddenCover: true -cover: url -sticky: 10 -hidden: false -recommend: true ---- - -# 解读B站UP主《芳华》的解读 - -#### -#### - - -写在前面:《芳华》火了,峰哥:这是好事啊 - - -#### -#### - - - -#### - - -你看,又唱 - - -
- -## 壹 - -
- -  "聊会电影吧"这位UP的视频前两个星期刷到过。一方面是看到进度条太长我就没怎么看完,另一方面是《芳华》这个电影太久远了,我第一次看那会还中学吧,在我印象里面就是几个近代的故事串联而来,对于小小的我来说没看懂什么。 - -![图片](/8/1.jpg) - -  现在又被翻出来解读了,其实对于UP而言只是解读了一部很棒的国产电影,但是问题就出在这部电影,因为这部电影是以文化大革命为背景的。但问题的问题也出在文化大革命,那个时代具体是怎么样的,我没有资格评说,因为没有经历过,甚至在过往的教育中也不能给我一个正确的答案。 - -
- -## 贰 - -
- - - -  但是纸是包不住火的,如今互联网如此发达,想了解一些课堂上学不到的东西也非常方便。至少大家的反应确实发生了很大的变化,举几个例子: - -  一、外网公认B站是“网左大本营”,因为B站都是高知群体,Z时代青年,在目前社会竞争巨大的情况下“个人奋斗”和“人人平等”的叙事破产了,所以大家不再崇拜“教科书”,转而投向“毛教员”,开始美化那条未完成的道路。高喊“人民万岁”,崇拜“毛教员”的思想…… - -   正如这个解说视频的弹幕,有很多人真的期望“进行到底”。但是没有人能真正看到文革的真面目。所以本质上是中国年轻一代在面临巨大的社会竞争压力时,向左翼经典理论寻求解释和精神慰藉的结果。 - -![图片](/8/2.png) - -  二、抖音的评论区存在审查机制,但是半夜的人工审查并不及时,所以一些奇奇怪怪的表情包就会出现。大家的坐立难安是有目共睹深有体会的。 - -  三、考公考编报考人数变化曲线图 - -![图片](/8/3.webp) - -
- -## 叁 - -
- -  以上都是我写公众号写到一半的文章,但是视频突然的下架,我也不敢发这个文章了,所以就在博客聊聊 - - -
- -## 肆 - -
- -  首先就是为什么火,我觉得就是用B站作为“网左大本营”来解释最为恰当。因为用户群体都是初出社会的大学生,奋斗多年的学历、竞赛、各种“xx杯”比赛……失效了。主要的失效表现在于书本说的“人人平等”不存在了。越来越多的年轻人也认识到了阶级固化、阶级矛盾还是存在。更多的“为什么……”“凭什么……”被问了出来。 - -  他们在[户晨风](./hu-chen-feng.html)那看到了阶级差异:“凭什么大专不是大学?”“凭什么别人家的厕所比我家客厅还大?”“为什么有人敢歧视我们无产阶级!”………………………… - -  社会压力比山大,大家都憋着一肚子气,发泄不出来,说白了就是现在年轻人不是渴望文革,只是想改变当今现状而已。现行游戏体质下,副本太难打,任务太难做,装备太难合成,所以大家希望直接来个新服当开服玩家,或者是赛季更新一下也好。 - - -
- -## 伍 - -
- -  还是说的太多了,其实我没有经历过那段时期,我真的没资格评说,上面只是一些个人观点罢了。 - -  文革是整整十年,所以期间是非常复杂的,变化也是非常多的。是一个及其复杂的时代,只看教科书去全盘否定是不对的,只看初衷去美化未走完的路也是不对的。 - +--- +title: 解读B站UP主《芳华》的解读 +top: 0 +date: 2025-12-06 13:25:00 +descriptionHTML: ' +“网左大本营”的成因与发展 +' +tags: + - 随笔 + - 芳华 + - 互联网 +sidebar: true +readingTime: true +hiddenCover: true +cover: url +sticky: 10 +hidden: false +recommend: true +--- + +# 解读B站UP主《芳华》的解读 + +#### +#### + + +写在前面:《芳华》火了,峰哥:这是好事啊 + + +#### +#### + + + +#### + + +你看,又唱 + + +
+ +## 壹 + +
+ +  "聊会电影吧"这位UP的视频前两个星期刷到过。一方面是看到进度条太长我就没怎么看完,另一方面是《芳华》这个电影太久远了,我第一次看那会还中学吧,在我印象里面就是几个近代的故事串联而来,对于小小的我来说没看懂什么。 + +![图片](/8/1.jpg) + +  现在又被翻出来解读了,其实对于UP而言只是解读了一部很棒的国产电影,但是问题就出在这部电影,因为这部电影是以文化大革命为背景的。但问题的问题也出在文化大革命,那个时代具体是怎么样的,我没有资格评说,因为没有经历过,甚至在过往的教育中也不能给我一个正确的答案。 + +
+ +## 贰 + +
+ + + +  但是纸是包不住火的,如今互联网如此发达,想了解一些课堂上学不到的东西也非常方便。至少大家的反应确实发生了很大的变化,举几个例子: + +  一、外网公认B站是“网左大本营”,因为B站都是高知群体,Z时代青年,在目前社会竞争巨大的情况下“个人奋斗”和“人人平等”的叙事破产了,所以大家不再崇拜“教科书”,转而投向“毛教员”,开始美化那条未完成的道路。高喊“人民万岁”,崇拜“毛教员”的思想…… + +   正如这个解说视频的弹幕,有很多人真的期望“进行到底”。但是没有人能真正看到文革的真面目。所以本质上是中国年轻一代在面临巨大的社会竞争压力时,向左翼经典理论寻求解释和精神慰藉的结果。 + +![图片](/8/2.png) + +  二、抖音的评论区存在审查机制,但是半夜的人工审查并不及时,所以一些奇奇怪怪的表情包就会出现。大家的坐立难安是有目共睹深有体会的。 + +  三、考公考编报考人数变化曲线图 + +![图片](/8/3.webp) + +
+ +## 叁 + +
+ +  以上都是我写公众号写到一半的文章,但是视频突然的下架,我也不敢发这个文章了,所以就在博客聊聊 + + +
+ +## 肆 + +
+ +  首先就是为什么火,我觉得就是用B站作为“网左大本营”来解释最为恰当。因为用户群体都是初出社会的大学生,奋斗多年的学历、竞赛、各种“xx杯”比赛……失效了。主要的失效表现在于书本说的“人人平等”不存在了。越来越多的年轻人也认识到了阶级固化、阶级矛盾还是存在。更多的“为什么……”“凭什么……”被问了出来。 + +  他们在[户晨风](./hu-chen-feng.html)那看到了阶级差异:“凭什么大专不是大学?”“凭什么别人家的厕所比我家客厅还大?”“为什么有人敢歧视我们无产阶级!”………………………… + +  社会压力比山大,大家都憋着一肚子气,发泄不出来,说白了就是现在年轻人不是渴望文革,只是想改变当今现状而已。现行游戏体质下,副本太难打,任务太难做,装备太难合成,所以大家希望直接来个新服当开服玩家,或者是赛季更新一下也好。 + + +
+ +## 伍 + +
+ +  还是说的太多了,其实我没有经历过那段时期,我真的没资格评说,上面只是一些个人观点罢了。 + +  文革是整整十年,所以期间是非常复杂的,变化也是非常多的。是一个及其复杂的时代,只看教科书去全盘否定是不对的,只看初衷去美化未走完的路也是不对的。 +   综上,还是就当吃个瓜了,因为你出生的国家也只是一个发展中国家。 \ No newline at end of file diff --git a/docs/sop/maindocs/killing-line-vs-roadside-stove.md b/docs/sop/maindocs/killing-line-vs-roadside-stove.md index 9968500..cba967e 100644 --- a/docs/sop/maindocs/killing-line-vs-roadside-stove.md +++ b/docs/sop/maindocs/killing-line-vs-roadside-stove.md @@ -1,110 +1,110 @@ ---- -title: 当"斩杀线"遇见"路边灶":信息茧房时代的底层叙事与认知困境 -top: 0 -date: 2026-01-28 10:00:00 -descriptionHTML: ' -不是很想说牢A,来讲点别的吧 -' -tags: - - 随笔 - - 社会观察 -sidebar: true -readingTime: true -hiddenCover: false -sticky: 100 -hidden: false -recommend: true ---- - -# 当"斩杀线"遇见"路边灶":信息茧房时代的底层叙事与认知困境 - -#### -##### 写在前面: -#### - - -  最近刷到两个极其割裂的内容,一边是B站牢A的"斩杀线"理论满天飞,说的美国生不如死、家破人亡,甚至连《纽约时报》都撰文讨论;另一边是抖音百色千姿一家在路边生火做饭的视频。两个视频差不多前后脚出现,但“斩杀线”只有美国有吗。这种对比本身,可能比视频内容本身更值得琢磨。 - - -
- -## 壹 - -
- -  先说牢A这边。他在西雅图当法医助理,搞出一套"斩杀线"理论:生场大病半年内就能从中产变流浪汉,37%美国人拿不出400美元应急。他把尸体叫"高达",蛆叫"迪斯科米",黑话体系规避了审核,视频在B站动辄百万播放,甚至引发NYT发文讨论"中国为什么炒作美国斩杀线"。 - -  这确实打破了"美国梦"滤镜,但我后来意识到,他的视角天然带"死亡偏差"——就像急诊科医生觉得全世界都在心梗,他只看到游戏玩脱了的玩家,看不到还在正常还房贷的会计。 - - -
- -## 贰 - -
- -  然后才是百色千姿,父亲炒股加杠杆爆仓,带俩孩子睡马路边,在路边支灶做饭,姐姐弟弟辍学。这个视频没有百万播放,没有上热搜,甚至你主动去搜都未必能搜到——它存在于一个诡异的夹缝里:足够真实到让人心里一沉,又足够敏感到被算法轻轻按住。 - - - -
- -## 叁 - -
- - - -这就很有意思了。同样是底层叙事,命运的差异说明了什么? - -牢A的内容可以大肆传播,甚至成为"爱国流量"的素材(看,美国多惨),而百色千姿必须被限流,因为它展示了"不该被看见的中国"——不是欣欣向荣的脱贫故事,不是励志的寒门贵子,而是金融投机失败后的代际贫困,是城市治理的盲区,是"全面建成小康社会"叙事下的那个刺眼补丁。 - -平台对两种不同的"底层"采取了不同的态度:美国的底层可以被消费、被猎奇、被用来完成"对岸很惨"的集体确认;中国的底层必须被藏好,因为"影响市容",因为怕引起"不必要的联想"。 - -
- - -## 肆 - -
- - -但这种选择性的可见性恰恰制造了更深层的信息茧房。 - -当我们只能通过牢A的"高达"和"迪斯科米"来想象美国底层,同时百色千姿的"路边灶"只能在小范围暗流涌动时,我们得到一个扭曲的地图:美国的贫困是可见的、可分析的、甚至被文学化的;中国的贫困是偶然的、个人的、"已经被解决"的,如果还存在,那一定是个案,是"父亲太贪"的个体悲剧,不是系统性缝隙。 - -实际上两个案例揭示的是同一件事:在全球搞金融化的今天,普通人的抗风险能力都脆得跟纸一样。美国那边是医疗-债务-信用评分的制度化斩杀;中国这边是股市加杠杆+住房安全网漏洞的市场化跌落。 - -但因为我们只能看见"高达"而看不见"路边灶",很多人会产生一种幻觉:至少我们不会像美国那样"横尸街头"。可百色千姿证明,只是横尸的形式不同——有的在下水道变成史莱姆,有的在路边灶台前慢慢营养不良。 - - -
- -## 伍 - -
- - -最讽刺的是,牢A因为讲这些紧急回国,声称上了NYT后"嗅到危险";而百色千姿那边,如果继续在夹缝中发视频,可能面临的是更直接的消失——不是被媒体围攻,而是被算法静音,被限流,最后变成"此内容不存在"。 - -如果说牢A的爆红让我们看到"被算法选中的底层",那么百色千姿的沉寂让我们看到"被平台抹去的底层"。 - -后者可能比前者更真实,但也更脆弱——它提醒我们,在信息茧房里,有些窗口不是被墙封住的,而是被算法悄悄关上的。当我们抱怨"为什么只能看到美国很惨"的时候,也许该想想:那些试图展示"这边也不容易"的声音,是不是早就发不出声音了? - - -
- -## 陆 - -
- - -所以我后来刷到这类内容有个习惯:越是被限流的,越值得多看两眼。 - -因为能在夹缝里存在的,往往是算法没来得及平滑处理掉的粗糙真实。那些能百万播放的"社会观察",不管讲的是美国还是中国,都已经被流量逻辑筛选过、包装过、适配过某种情绪需求;而那些转不出去、时不时消失的视频,反而保留了生活本身那种不体面的毛边。 - -当然,这也可能是另一种偏见——"被压制的才是真相"——但在这个 everyone is gaming the algorithm 的时代,至少百色千姿这类视频提醒我们:还有东西在算法的手掌心里漏网,还有"路边灶"在城市的阴影里冒烟。 - -至于我们能做什么?大概就是在看到"高达"的时候,记得也找找"路边灶";在看到美国底层的时候,承认中国底层也存在,不是为了比烂,而是为了承认:金融化这张网,漏掉的人比你我想象的多得多。 - -而平台的区别只是:有的漏掉的人被做成了标本展示,有的漏掉的人必须消失在阴影里。😶 +--- +title: 当"斩杀线"遇见"路边灶":信息茧房时代的底层叙事与认知困境 +top: 0 +date: 2026-01-28 10:00:00 +descriptionHTML: ' +不是很想说牢A,来讲点别的吧 +' +tags: + - 随笔 + - 社会观察 +sidebar: true +readingTime: true +hiddenCover: false +sticky: 100 +hidden: false +recommend: true +--- + +# 当"斩杀线"遇见"路边灶":信息茧房时代的底层叙事与认知困境 + +#### +##### 写在前面: +#### + + +  最近刷到两个极其割裂的内容,一边是B站牢A的"斩杀线"理论满天飞,说的美国生不如死、家破人亡,甚至连《纽约时报》都撰文讨论;另一边是抖音百色千姿一家在路边生火做饭的视频。两个视频差不多前后脚出现,但“斩杀线”只有美国有吗。这种对比本身,可能比视频内容本身更值得琢磨。 + + +
+ +## 壹 + +
+ +  先说牢A这边。他在西雅图当法医助理,搞出一套"斩杀线"理论:生场大病半年内就能从中产变流浪汉,37%美国人拿不出400美元应急。他把尸体叫"高达",蛆叫"迪斯科米",黑话体系规避了审核,视频在B站动辄百万播放,甚至引发NYT发文讨论"中国为什么炒作美国斩杀线"。 + +  这确实打破了"美国梦"滤镜,但我后来意识到,他的视角天然带"死亡偏差"——就像急诊科医生觉得全世界都在心梗,他只看到游戏玩脱了的玩家,看不到还在正常还房贷的会计。 + + +
+ +## 贰 + +
+ +  然后才是百色千姿,父亲炒股加杠杆爆仓,带俩孩子睡马路边,在路边支灶做饭,姐姐弟弟辍学。这个视频没有百万播放,没有上热搜,甚至你主动去搜都未必能搜到——它存在于一个诡异的夹缝里:足够真实到让人心里一沉,又足够敏感到被算法轻轻按住。 + + + +
+ +## 叁 + +
+ + + +这就很有意思了。同样是底层叙事,命运的差异说明了什么? + +牢A的内容可以大肆传播,甚至成为"爱国流量"的素材(看,美国多惨),而百色千姿必须被限流,因为它展示了"不该被看见的中国"——不是欣欣向荣的脱贫故事,不是励志的寒门贵子,而是金融投机失败后的代际贫困,是城市治理的盲区,是"全面建成小康社会"叙事下的那个刺眼补丁。 + +平台对两种不同的"底层"采取了不同的态度:美国的底层可以被消费、被猎奇、被用来完成"对岸很惨"的集体确认;中国的底层必须被藏好,因为"影响市容",因为怕引起"不必要的联想"。 + +
+ + +## 肆 + +
+ + +但这种选择性的可见性恰恰制造了更深层的信息茧房。 + +当我们只能通过牢A的"高达"和"迪斯科米"来想象美国底层,同时百色千姿的"路边灶"只能在小范围暗流涌动时,我们得到一个扭曲的地图:美国的贫困是可见的、可分析的、甚至被文学化的;中国的贫困是偶然的、个人的、"已经被解决"的,如果还存在,那一定是个案,是"父亲太贪"的个体悲剧,不是系统性缝隙。 + +实际上两个案例揭示的是同一件事:在全球搞金融化的今天,普通人的抗风险能力都脆得跟纸一样。美国那边是医疗-债务-信用评分的制度化斩杀;中国这边是股市加杠杆+住房安全网漏洞的市场化跌落。 + +但因为我们只能看见"高达"而看不见"路边灶",很多人会产生一种幻觉:至少我们不会像美国那样"横尸街头"。可百色千姿证明,只是横尸的形式不同——有的在下水道变成史莱姆,有的在路边灶台前慢慢营养不良。 + + +
+ +## 伍 + +
+ + +最讽刺的是,牢A因为讲这些紧急回国,声称上了NYT后"嗅到危险";而百色千姿那边,如果继续在夹缝中发视频,可能面临的是更直接的消失——不是被媒体围攻,而是被算法静音,被限流,最后变成"此内容不存在"。 + +如果说牢A的爆红让我们看到"被算法选中的底层",那么百色千姿的沉寂让我们看到"被平台抹去的底层"。 + +后者可能比前者更真实,但也更脆弱——它提醒我们,在信息茧房里,有些窗口不是被墙封住的,而是被算法悄悄关上的。当我们抱怨"为什么只能看到美国很惨"的时候,也许该想想:那些试图展示"这边也不容易"的声音,是不是早就发不出声音了? + + +
+ +## 陆 + +
+ + +所以我后来刷到这类内容有个习惯:越是被限流的,越值得多看两眼。 + +因为能在夹缝里存在的,往往是算法没来得及平滑处理掉的粗糙真实。那些能百万播放的"社会观察",不管讲的是美国还是中国,都已经被流量逻辑筛选过、包装过、适配过某种情绪需求;而那些转不出去、时不时消失的视频,反而保留了生活本身那种不体面的毛边。 + +当然,这也可能是另一种偏见——"被压制的才是真相"——但在这个 everyone is gaming the algorithm 的时代,至少百色千姿这类视频提醒我们:还有东西在算法的手掌心里漏网,还有"路边灶"在城市的阴影里冒烟。 + +至于我们能做什么?大概就是在看到"高达"的时候,记得也找找"路边灶";在看到美国底层的时候,承认中国底层也存在,不是为了比烂,而是为了承认:金融化这张网,漏掉的人比你我想象的多得多。 + +而平台的区别只是:有的漏掉的人被做成了标本展示,有的漏掉的人必须消失在阴影里。😶 diff --git a/docs/sop/maindocs/openclaw.md b/docs/sop/maindocs/openclaw.md index 7c8e123..ea5710a 100644 --- a/docs/sop/maindocs/openclaw.md +++ b/docs/sop/maindocs/openclaw.md @@ -1,127 +1,127 @@ ---- -title: 热度降不下来了,还是讲一下OpenClaw吧 -top: 1 -date: 2026-03-10 12:00:00 -descriptionHTML: ' -我经常是等热度下来了我才会开题写文章,但是我看一时半会热度下不来了 -' -tags: - - OpenClaw - - 技术 -sidebar: true -readingTime: true -hiddenCover: false -sticky: 0 -hidden: false -recommend: false - ---- - -# 热度降不下来了,还是讲一下OpenClaw吧 - -#### -##### 写在前面: -#### - - -  在他从ClawBot改名到MoltBot的时候我就关注到了,不过那会关注点还在OpenCode,因为Claude Code和Codex我厌恶了,听说OpenCode很友好,就一直在研究OpenCode。后面MoltBot的时候我就部署在服务器了,再后来他又改名OpenClaw,让我服务器里面装了两个小龙虾,而且还不好卸载…… - - - -
- -## 前言 - -
- - -  为什么刚刚要提一嘴OpenCode呢,其实这样的工具我们臭写代码的已经接触很多了,从Copilot到Cursor,从Claude Code到OpenCode,其实他都是自动化AI Agent,过去这些工具都能全自动写代码,测试,运行命令……如果让他做一些别的和代码无关的任务他也可以用系统命令来解决的。 - -  所以OpenClaw也不是什么很高级的东西,他也是在后台启动了一个Agent,然后Agent能工具调用、能执行命令、能读写运行文件……只是他是唯一能接入聊天软件的,我感觉就是这一点比Claude Code啥的高级一点,手机上就可以操作AI,过去我们这些臭写代码的需要坐在电脑面前焦灼的Vibe Coding。 - - - -
- -## 壹 - -
-  但是OpenClaw真的不配这么多Star,他为什么这么爆火,我不知道,很神奇,很玄幻。他在GitHub软件Star排行第一,超过Linux内核快照版,超过Python,超过各种前端框架。我没想明白,真的非常非常玄幻。 - -![1](/12/1.png) - -
前面都是教程或者资源汇总一类的仓库,OpenClaw是Star最高的软件类仓库
- -  而且他不是小圈子火,之前OpenCode是小圈子火,但是OpenClaw能让很多昨天还在用豆包录音的人,今天就吵着要部署OpenClaw。具体为什么会用豆包录音请看下图。 - -![1](/12/2.jpg) -
笑死我了
- - -  反正就是很火,莫名其妙的火,现象级的火,超规模级的火,一塌糊涂的火,应该可以和我家鸽鸽🐣比一下了。 - -![1](/12/3.gif) - - -
- -## 贰 - -
- -
这时候就有人要问了,OpenClaw到底解决了什么
- -#### - -#####   我个人认为是当今AI Agent发展到一定阶段的产物。主要是Vibe Coding的成熟和模型能力的提升,辅以MCP、Skills、上下文工程、多模态、RAG为一体的产物。 - -  过去Agent是产业型垄断,比如千问可以做一个能点外卖的Agent,世界上找不出第二个,即使有人是天才,没有外卖平台的接口也搞不定(有点绝对,但是效果绝对不如阿里自己做)。现在的Agent想要打破这个垄断,他们认为Agent人人都可以持有,做自己的AI助理,做自己的“贾维斯”。Agent终于是有机会走入寻常百姓家了。 - -![1](/12/8.jpg) -
反正我已经All in 10086.0了
- -  这个问题其实去年同时期“本地部署DeepSeek”时代就出现了,有人研究如何做自己的知识库,有人研究Coze工作流……直到今天都还有人兜售工作流搭建教学。 - -  我个人认为目前Agent还是没有解决本质问题的,LLM再怎么玩都只能输出一些字符编码,在大模型看来,就是一些前后关联强的东西。唯独他的记忆功能确实实在,让他有了一些“人味”。我就用他的记忆功能帮我记忆我的作业和课程表,给我安排Todo List。 - -![1](/12/4.jpg) - -![1](/12/5.jpg) -
我的OpenClaw接入QQBot
- -#### - -
他真的提效了吗
- -  只能说略有提效。至少确实能一直提醒我一些任务,就像上面展示的一样,帮我安排各类任务,因为他的记忆文件里面有我的课程表信息、作业信息&DDL,做完的内容也会从临时记忆删除。 - -  如果有类似教程的需求我后面可以补一下教程,大概就是让他把你的长期安排存入长期记忆,短期安排存入临时记忆,临时记忆随时调整。不过我认识的很多人都卡在了权限和推送这一步,这也正是下面我要讲的,在实操中的一些问题。 - -
他确实不好用
- -  OpenClaw的部署和实操一直是个大问题,也不知道从哪一次Commit起,这个权限就管理的很死,似乎是架构做了变化,Tools调用需要有权限。 - -  过去Claude Code这些CLI工具都是直接问你,或者全部允许,很多工具调用都是默认提供权限,但是OpenClaw的逻辑十分独特。几乎所有Tools都需要手动开启权限,所有命令执行都默认需要批准……这让权限配置很头疼,OpenClaw Onboard启动后配置完,大家以为能直接对话了,但实际是“我不能调用工具”“我没有这个权限”…… -![1](/12/9.jpg) - -  主要还是因为这个项目有无数Vibe Coding的人来提交PR,目前已经超过5k的PR。这个项目非常庞大,非常臃肿,教程的文档可以匹敌各大云服务商的文档了(都非常屎山……)。连我这种部署了无数项目的人,都觉得他非常的难以调教,功能随时在变,没有标准的功能方案,就是开源社区Vibe Coding的排泄池,连什么文科生都能合并代码了,让AI写AI工具的代码吗,真是闭环了,卧槽。 - -![1](/12/6.png) - -![1](/12/7.png) - -  原文:https://www.geekpark.net/news/360337 自己品吧,只能说AI NB - -  其次是维护,维护需要各种配置和运行命令,这对于不太懂电脑的小白,简直是噩梦……现在想玩AI还是太难了,让OpenClaw搞结果发现他默认没权限🤣,AI的大盘还是在我们这些臭写代码的计算机人手里,想玩AI还是需要很多计算机基础的。 - -  还有就是安全,让一堆不懂命令和安全的人拿到了密钥,黑客第一次吃这么好。为什么国家会出面说安全问题,就是因为出现很多牛鬼蛇神都来部署OpenClaw了,搞不好什么央国企也部署,结果自己的安全信息被泄露,那就非常危险了。 - -
- -## 叁 - -
- -  上门部署,腾讯大楼下免费部署,超级个体,一人公司……闹剧会过去的,但是Agent的脚步是不会停的。很庆幸今天能看到这么多对AI怀揣着梦想,有着与时俱进的思维。千变万化的今天,确实需要这样的精神。 - -  但是OpenClaw的闹剧终究会成为历史的一部分,就像什么Coze空间工作流一样,慢慢的就很难再有产出了。Agent的难度还是远超预期的,仅仅依靠字符串输出的LLM我看真的难以应对大家日益增长的对AI时代的期盼。 +--- +title: 热度降不下来了,还是讲一下OpenClaw吧 +top: 1 +date: 2026-03-10 12:00:00 +descriptionHTML: ' +我经常是等热度下来了我才会开题写文章,但是我看一时半会热度下不来了 +' +tags: + - OpenClaw + - 技术 +sidebar: true +readingTime: true +hiddenCover: false +sticky: 0 +hidden: false +recommend: false + +--- + +# 热度降不下来了,还是讲一下OpenClaw吧 + +#### +##### 写在前面: +#### + + +  在他从ClawBot改名到MoltBot的时候我就关注到了,不过那会关注点还在OpenCode,因为Claude Code和Codex我厌恶了,听说OpenCode很友好,就一直在研究OpenCode。后面MoltBot的时候我就部署在服务器了,再后来他又改名OpenClaw,让我服务器里面装了两个小龙虾,而且还不好卸载…… + + + +
+ +## 前言 + +
+ + +  为什么刚刚要提一嘴OpenCode呢,其实这样的工具我们臭写代码的已经接触很多了,从Copilot到Cursor,从Claude Code到OpenCode,其实他都是自动化AI Agent,过去这些工具都能全自动写代码,测试,运行命令……如果让他做一些别的和代码无关的任务他也可以用系统命令来解决的。 + +  所以OpenClaw也不是什么很高级的东西,他也是在后台启动了一个Agent,然后Agent能工具调用、能执行命令、能读写运行文件……只是他是唯一能接入聊天软件的,我感觉就是这一点比Claude Code啥的高级一点,手机上就可以操作AI,过去我们这些臭写代码的需要坐在电脑面前焦灼的Vibe Coding。 + + + +
+ +## 壹 + +
+  但是OpenClaw真的不配这么多Star,他为什么这么爆火,我不知道,很神奇,很玄幻。他在GitHub软件Star排行第一,超过Linux内核快照版,超过Python,超过各种前端框架。我没想明白,真的非常非常玄幻。 + +![1](/12/1.png) + +
前面都是教程或者资源汇总一类的仓库,OpenClaw是Star最高的软件类仓库
+ +  而且他不是小圈子火,之前OpenCode是小圈子火,但是OpenClaw能让很多昨天还在用豆包录音的人,今天就吵着要部署OpenClaw。具体为什么会用豆包录音请看下图。 + +![1](/12/2.jpg) +
笑死我了
+ + +  反正就是很火,莫名其妙的火,现象级的火,超规模级的火,一塌糊涂的火,应该可以和我家鸽鸽🐣比一下了。 + +![1](/12/3.gif) + + +
+ +## 贰 + +
+ +
这时候就有人要问了,OpenClaw到底解决了什么
+ +#### + +#####   我个人认为是当今AI Agent发展到一定阶段的产物。主要是Vibe Coding的成熟和模型能力的提升,辅以MCP、Skills、上下文工程、多模态、RAG为一体的产物。 + +  过去Agent是产业型垄断,比如千问可以做一个能点外卖的Agent,世界上找不出第二个,即使有人是天才,没有外卖平台的接口也搞不定(有点绝对,但是效果绝对不如阿里自己做)。现在的Agent想要打破这个垄断,他们认为Agent人人都可以持有,做自己的AI助理,做自己的“贾维斯”。Agent终于是有机会走入寻常百姓家了。 + +![1](/12/8.jpg) +
反正我已经All in 10086.0了
+ +  这个问题其实去年同时期“本地部署DeepSeek”时代就出现了,有人研究如何做自己的知识库,有人研究Coze工作流……直到今天都还有人兜售工作流搭建教学。 + +  我个人认为目前Agent还是没有解决本质问题的,LLM再怎么玩都只能输出一些字符编码,在大模型看来,就是一些前后关联强的东西。唯独他的记忆功能确实实在,让他有了一些“人味”。我就用他的记忆功能帮我记忆我的作业和课程表,给我安排Todo List。 + +![1](/12/4.jpg) + +![1](/12/5.jpg) +
我的OpenClaw接入QQBot
+ +#### + +
他真的提效了吗
+ +  只能说略有提效。至少确实能一直提醒我一些任务,就像上面展示的一样,帮我安排各类任务,因为他的记忆文件里面有我的课程表信息、作业信息&DDL,做完的内容也会从临时记忆删除。 + +  如果有类似教程的需求我后面可以补一下教程,大概就是让他把你的长期安排存入长期记忆,短期安排存入临时记忆,临时记忆随时调整。不过我认识的很多人都卡在了权限和推送这一步,这也正是下面我要讲的,在实操中的一些问题。 + +
他确实不好用
+ +  OpenClaw的部署和实操一直是个大问题,也不知道从哪一次Commit起,这个权限就管理的很死,似乎是架构做了变化,Tools调用需要有权限。 + +  过去Claude Code这些CLI工具都是直接问你,或者全部允许,很多工具调用都是默认提供权限,但是OpenClaw的逻辑十分独特。几乎所有Tools都需要手动开启权限,所有命令执行都默认需要批准……这让权限配置很头疼,OpenClaw Onboard启动后配置完,大家以为能直接对话了,但实际是“我不能调用工具”“我没有这个权限”…… +![1](/12/9.jpg) + +  主要还是因为这个项目有无数Vibe Coding的人来提交PR,目前已经超过5k的PR。这个项目非常庞大,非常臃肿,教程的文档可以匹敌各大云服务商的文档了(都非常屎山……)。连我这种部署了无数项目的人,都觉得他非常的难以调教,功能随时在变,没有标准的功能方案,就是开源社区Vibe Coding的排泄池,连什么文科生都能合并代码了,让AI写AI工具的代码吗,真是闭环了,卧槽。 + +![1](/12/6.png) + +![1](/12/7.png) + +  原文:https://www.geekpark.net/news/360337 自己品吧,只能说AI NB + +  其次是维护,维护需要各种配置和运行命令,这对于不太懂电脑的小白,简直是噩梦……现在想玩AI还是太难了,让OpenClaw搞结果发现他默认没权限🤣,AI的大盘还是在我们这些臭写代码的计算机人手里,想玩AI还是需要很多计算机基础的。 + +  还有就是安全,让一堆不懂命令和安全的人拿到了密钥,黑客第一次吃这么好。为什么国家会出面说安全问题,就是因为出现很多牛鬼蛇神都来部署OpenClaw了,搞不好什么央国企也部署,结果自己的安全信息被泄露,那就非常危险了。 + +
+ +## 叁 + +
+ +  上门部署,腾讯大楼下免费部署,超级个体,一人公司……闹剧会过去的,但是Agent的脚步是不会停的。很庆幸今天能看到这么多对AI怀揣着梦想,有着与时俱进的思维。千变万化的今天,确实需要这样的精神。 + +  但是OpenClaw的闹剧终究会成为历史的一部分,就像什么Coze空间工作流一样,慢慢的就很难再有产出了。Agent的难度还是远超预期的,仅仅依靠字符串输出的LLM我看真的难以应对大家日益增长的对AI时代的期盼。 diff --git a/docs/sop/notes/acm-cpp-cheatsheet.md b/docs/sop/notes/acm-cpp-cheatsheet.md index a643f23..f386814 100644 --- a/docs/sop/notes/acm-cpp-cheatsheet.md +++ b/docs/sop/notes/acm-cpp-cheatsheet.md @@ -1,398 +1,398 @@ ---- -title: 数据结构与算法实验(C++) -date: 2026-01-15 -descriptionHTML: '整理了数据结构考试中常用的C++模板与算法讲解' -tags: - - 笔记 - - C++ - - 算法 -sidebar: true -readingTime: true -hidden: false -recommend: true ---- - -# 数据结构与算法实验(C++) - -这份笔记整理了数据结构考试中常用的C++模板与算法讲解 - -## 1. 基础环境 (Template) - -```cpp -#include -#include -#include -#include -#include -#include -#include // for greater -using namespace std; - -typedef long long ll; -const int INF = 0x3f3f3f3f; - -int main() { - // 核心:关闭同步,加速cin/cout - ios::sync_with_stdio(false); - cin.tie(0); cout.tie(0); - - // 在这里写你的代码 - return 0; -} -``` - ---- - -## 2. 基础数据结构与 STL - -### 2.1 指针与引用 (Pointers & References) -**这是很多同学容易混淆的地方,尤其是在函数传参时。** - -#### 1. 如何定义 -```cpp -int a = 10; -int* p = &a; // p 是指针,存储 a 的地址 -int& r = a; // r 是引用,r 就是 a 的别名 (即 r 和 a 是同一个东西) -``` - -#### 2. 函数传参:值传递 vs 引用传递 vs 指针传递 -**场景**:你需要在一个函数里修改外面的变量,或者传递大数组不希望发生拷贝。 - -**A. 引用传递 (`Type& name`) —— 最推荐** -如果函数参数里写了 `&`,你在函数里**直接把它当成普通变量用**就行。 -```cpp -// 这里的 x 就是外面传进来的那个变量的“分身” -void modify(int& x) { - x = 100; // 不需要加 *,直接修改 -} - -int main() { - int num = 0; - modify(num); // num 变成 100 -} -``` - -**B. 指针传递 (`Type* name`)** -需要传地址,函数里要用 `*` 解引用。 -```cpp -void modifyPtr(int* p) { - if (p == NULL) return; - *p = 100; // *p 代表指针指向的那个变量 -} - -int main() { - int num = 0; - modifyPtr(&num); // 注意:要取地址符 & -} -``` - -**总结**: -* 看到 `void func(int &x)` -> 内部直接用 `x`,改变会影响外面。 -* 看到 `void func(int *x)` -> 内部用 `*x` 访问值,调用时传地址 `&a`。 -* 链表/树结构通常用指针 (`ListNode*`),因为可能为空 (`NULL`)。 - -### 2.2 常用 STL 容器 -**Stack (栈)**: 先进后出 (LIFO),用于括号匹配、DFS。 -```cpp -stack s; -s.push(1); s.pop(); s.top(); s.empty(); -``` - -**Queue (队列)**: 先进先出 (FIFO),用于BFS、层序遍历。 -```cpp -queue q; -q.push(1); q.pop(); q.front(); q.empty(); -``` - -**Vector (动态数组)**: -```cpp -vector v; -v.push_back(1); -sort(v.begin(), v.end()); -v.erase(unique(v.begin(), v.end()), v.end()); // 排序后去重 -``` - -**Priority Queue (优先队列)**: 默认大根堆。 -```cpp -priority_queue pq; // 大根堆 -priority_queue, greater> min_pq; // 小根堆 -``` - -### 2.2 单链表 (Linked List) -**技巧**: 使用虚拟头结点 (dummy head) 处理删除操作。 - -```cpp -struct ListNode { - int val; - ListNode *next; - ListNode(int x) : val(x), next(NULL) {} -}; - -// 1. 尾插法创建 -ListNode* createList(const vector& nums) { - ListNode* dummy = new ListNode(0); - ListNode* tail = dummy; - for (int x : nums) { - tail->next = new ListNode(x); - tail = tail->next; - } - return dummy->next; -} - -// 2. 反转链表 -ListNode* reverseList(ListNode* head) { - ListNode *prev = NULL, *curr = head; - while (curr) { - ListNode* nextTemp = curr->next; - curr->next = prev; - prev = curr; - curr = nextTemp; - } - return prev; -} - -// 3. 删除指定值的节点 -ListNode* removeElements(ListNode* head, int val) { - ListNode* dummy = new ListNode(0); - dummy->next = head; - ListNode* cur = dummy; - while (cur->next) { - if (cur->next->val == val) { - ListNode* temp = cur->next; - cur->next = cur->next->next; - delete temp; - } else { - cur = cur->next; - } - } - return dummy->next; -} -``` - ---- - -## 3. 基础算法 - -### 3.1 二分查找 (Binary Search) -**适用**: 有序数组中查找。 -```cpp -// 查找第一个 >= target 的位置 -int lower_bound_custom(const vector& arr, int target) { - int l = 0, r = arr.size() - 1, ans = -1; - while (l <= r) { - int mid = l + (r - l) / 2; - if (arr[mid] >= target) { - ans = mid; - r = mid - 1; - } else { - l = mid + 1; - } - } - return ans; -} -``` - -### 3.2 快速幂 (Quick Power) -**功能**: 计算 $a^b \pmod m$。 -```cpp -ll qpow(ll a, ll b, ll m) { - ll res = 1; - a %= m; - while (b) { - if (b & 1) res = (res * a) % m; - a = (a * a) % m; - b >>= 1; - } - return res; -} -``` - ---- - -## 4. 字符串算法 - -### KMP 算法 -**功能**: 字符串匹配,求 pattern 在 text 中的位置。 -```cpp -// 求 next 数组 -vector getNext(string p) { - int m = p.size(), j = 0; - vector nxt(m); - nxt[0] = 0; - for (int i = 1; i < m; i++) { - while (j > 0 && p[i] != p[j]) j = nxt[j - 1]; - if (p[i] == p[j]) j++; - nxt[i] = j; - } - return nxt; -} - -// KMP 匹配 -int kmp(string text, string pattern) { - if (pattern.empty()) return 0; - vector nxt = getNext(pattern); - int j = 0; - for (int i = 0; i < text.size(); i++) { - while (j > 0 && text[i] != pattern[j]) j = nxt[j - 1]; - if (text[i] == pattern[j]) j++; - if (j == pattern.size()) return i - pattern.size() + 1; - } - return -1; -} -``` - ---- - -## 5. 树 (Tree) - -### 5.1 二叉树遍历 -```cpp -struct TreeNode { - int val; - TreeNode *left, *right; - TreeNode(int x) : val(x), left(NULL), right(NULL) {} -}; - -// 递归遍历 (Pre/In/Post) -void dfs(TreeNode* root) { - if (!root) return; - // cout << root->val; // 先序 - dfs(root->left); - // cout << root->val; // 中序 - dfs(root->right); - // cout << root->val; // 后序 -} - -// 层序遍历 (BFS) -void levelOrder(TreeNode* root) { - if (!root) return; - queue q; - q.push(root); - while (!q.empty()) { - TreeNode* node = q.front(); q.pop(); - cout << node->val << " "; - if (node->left) q.push(node->left); - if (node->right) q.push(node->right); - } -} -``` - -### 5.2 并查集 (Union-Find) -**功能**: 集合合并与查询。 -```cpp -int fa[10005]; -void init(int n) { for(int i=1; i<=n; i++) fa[i]=i; } -int find(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]); } // 路径压缩 -void unite(int x, int y) { fa[find(x)] = find(y); } -``` - -### 5.3 树状数组 (Fenwick Tree) -**功能**: 单点修改,区间查询前缀和。 -```cpp -int bit[10005], n; -int lowbit(int x) { return x & -x; } -void add(int x, int k) { for(; x<=n; x+=lowbit(x)) bit[x]+=k; } -int query(int x) { int s=0; for(; x>0; x-=lowbit(x)) s+=bit[x]; return s; } -``` - ---- - -## 6. 图论 (Graph) - -### 6.1 存图与遍历 (Adjacency List, DFS, BFS) -```cpp -struct edge { int to, w; }; -vector> adj; // adj[u] 存 u 的出边 -vector vis; - -// DFS -void dfs(int u) { - vis[u] = true; - for (auto e : adj[u]) { - if (!vis[e.to]) dfs(e.to); - } -} - -// BFS (求无权图最短路) -void bfs(int s) { - queue q; q.push(s); vis[s] = true; - while (!q.empty()) { - int u = q.front(); q.pop(); - for (auto e : adj[u]) { - if (!vis[e.to]) { - vis[e.to] = true; - q.push(e.to); - } - } - } -} -``` - -### 6.2 最短路 Dijkstra (堆优化) -**注意**: 仅适用于非负权边。 -```cpp -vector dis; -void dijkstra(int s, int n) { - dis.assign(n + 1, INF); - dis[s] = 0; - priority_queue, vector>, greater>> pq; - pq.push({0, s}); - - while (!pq.empty()) { - int d = pq.top().first; - int u = pq.top().second; - pq.pop(); - - if (d > dis[u]) continue; - - for (auto e : adj[u]) { - if (dis[u] + e.w < dis[e.to]) { - dis[e.to] = dis[u] + e.w; - pq.push({dis[e.to], e.to}); - } - } - } -} -``` - -### 6.3 最小生成树 (Kruskal) -**原理**: 贪心,按边权从小到大选边,并查集判环。 -```cpp -struct Edge { - int u, v, w; - bool operator<(const Edge& o) const { return w < o.w; } -} edges[20005]; - -int kruskal(int n, int m) { - sort(edges, edges + m); - init(n); // 并查集初始化 - int res = 0, cnt = 0; - for (int i = 0; i < m; i++) { - if (find(edges[i].u) != find(edges[i].v)) { - unite(edges[i].u, edges[i].v); - res += edges[i].w; - cnt++; - } - } - return cnt == n - 1 ? res : -1; -} -``` - -### 6.4 拓扑排序 (Topological Sort) -**功能**: 有向无环图 (DAG) 的排序。 -```cpp -int in_degree[10005]; // 需预处理入度 -vector toposort(int n) { - queue q; - for(int i=1; i<=n; i++) if(in_degree[i]==0) q.push(i); - vector res; - while(!q.empty()){ - int u = q.front(); q.pop(); - res.push_back(u); - for(auto e : adj[u]){ - if(--in_degree[e.to] == 0) q.push(e.to); - } - } - return res; -} -``` +--- +title: 数据结构与算法实验(C++) +date: 2026-01-15 +descriptionHTML: '整理了数据结构考试中常用的C++模板与算法讲解' +tags: + - 笔记 + - C++ + - 算法 +sidebar: true +readingTime: true +hidden: false +recommend: true +--- + +# 数据结构与算法实验(C++) + +这份笔记整理了数据结构考试中常用的C++模板与算法讲解 + +## 1. 基础环境 (Template) + +```cpp +#include +#include +#include +#include +#include +#include +#include // for greater +using namespace std; + +typedef long long ll; +const int INF = 0x3f3f3f3f; + +int main() { + // 核心:关闭同步,加速cin/cout + ios::sync_with_stdio(false); + cin.tie(0); cout.tie(0); + + // 在这里写你的代码 + return 0; +} +``` + +--- + +## 2. 基础数据结构与 STL + +### 2.1 指针与引用 (Pointers & References) +**这是很多同学容易混淆的地方,尤其是在函数传参时。** + +#### 1. 如何定义 +```cpp +int a = 10; +int* p = &a; // p 是指针,存储 a 的地址 +int& r = a; // r 是引用,r 就是 a 的别名 (即 r 和 a 是同一个东西) +``` + +#### 2. 函数传参:值传递 vs 引用传递 vs 指针传递 +**场景**:你需要在一个函数里修改外面的变量,或者传递大数组不希望发生拷贝。 + +**A. 引用传递 (`Type& name`) —— 最推荐** +如果函数参数里写了 `&`,你在函数里**直接把它当成普通变量用**就行。 +```cpp +// 这里的 x 就是外面传进来的那个变量的“分身” +void modify(int& x) { + x = 100; // 不需要加 *,直接修改 +} + +int main() { + int num = 0; + modify(num); // num 变成 100 +} +``` + +**B. 指针传递 (`Type* name`)** +需要传地址,函数里要用 `*` 解引用。 +```cpp +void modifyPtr(int* p) { + if (p == NULL) return; + *p = 100; // *p 代表指针指向的那个变量 +} + +int main() { + int num = 0; + modifyPtr(&num); // 注意:要取地址符 & +} +``` + +**总结**: +* 看到 `void func(int &x)` -> 内部直接用 `x`,改变会影响外面。 +* 看到 `void func(int *x)` -> 内部用 `*x` 访问值,调用时传地址 `&a`。 +* 链表/树结构通常用指针 (`ListNode*`),因为可能为空 (`NULL`)。 + +### 2.2 常用 STL 容器 +**Stack (栈)**: 先进后出 (LIFO),用于括号匹配、DFS。 +```cpp +stack s; +s.push(1); s.pop(); s.top(); s.empty(); +``` + +**Queue (队列)**: 先进先出 (FIFO),用于BFS、层序遍历。 +```cpp +queue q; +q.push(1); q.pop(); q.front(); q.empty(); +``` + +**Vector (动态数组)**: +```cpp +vector v; +v.push_back(1); +sort(v.begin(), v.end()); +v.erase(unique(v.begin(), v.end()), v.end()); // 排序后去重 +``` + +**Priority Queue (优先队列)**: 默认大根堆。 +```cpp +priority_queue pq; // 大根堆 +priority_queue, greater> min_pq; // 小根堆 +``` + +### 2.2 单链表 (Linked List) +**技巧**: 使用虚拟头结点 (dummy head) 处理删除操作。 + +```cpp +struct ListNode { + int val; + ListNode *next; + ListNode(int x) : val(x), next(NULL) {} +}; + +// 1. 尾插法创建 +ListNode* createList(const vector& nums) { + ListNode* dummy = new ListNode(0); + ListNode* tail = dummy; + for (int x : nums) { + tail->next = new ListNode(x); + tail = tail->next; + } + return dummy->next; +} + +// 2. 反转链表 +ListNode* reverseList(ListNode* head) { + ListNode *prev = NULL, *curr = head; + while (curr) { + ListNode* nextTemp = curr->next; + curr->next = prev; + prev = curr; + curr = nextTemp; + } + return prev; +} + +// 3. 删除指定值的节点 +ListNode* removeElements(ListNode* head, int val) { + ListNode* dummy = new ListNode(0); + dummy->next = head; + ListNode* cur = dummy; + while (cur->next) { + if (cur->next->val == val) { + ListNode* temp = cur->next; + cur->next = cur->next->next; + delete temp; + } else { + cur = cur->next; + } + } + return dummy->next; +} +``` + +--- + +## 3. 基础算法 + +### 3.1 二分查找 (Binary Search) +**适用**: 有序数组中查找。 +```cpp +// 查找第一个 >= target 的位置 +int lower_bound_custom(const vector& arr, int target) { + int l = 0, r = arr.size() - 1, ans = -1; + while (l <= r) { + int mid = l + (r - l) / 2; + if (arr[mid] >= target) { + ans = mid; + r = mid - 1; + } else { + l = mid + 1; + } + } + return ans; +} +``` + +### 3.2 快速幂 (Quick Power) +**功能**: 计算 $a^b \pmod m$。 +```cpp +ll qpow(ll a, ll b, ll m) { + ll res = 1; + a %= m; + while (b) { + if (b & 1) res = (res * a) % m; + a = (a * a) % m; + b >>= 1; + } + return res; +} +``` + +--- + +## 4. 字符串算法 + +### KMP 算法 +**功能**: 字符串匹配,求 pattern 在 text 中的位置。 +```cpp +// 求 next 数组 +vector getNext(string p) { + int m = p.size(), j = 0; + vector nxt(m); + nxt[0] = 0; + for (int i = 1; i < m; i++) { + while (j > 0 && p[i] != p[j]) j = nxt[j - 1]; + if (p[i] == p[j]) j++; + nxt[i] = j; + } + return nxt; +} + +// KMP 匹配 +int kmp(string text, string pattern) { + if (pattern.empty()) return 0; + vector nxt = getNext(pattern); + int j = 0; + for (int i = 0; i < text.size(); i++) { + while (j > 0 && text[i] != pattern[j]) j = nxt[j - 1]; + if (text[i] == pattern[j]) j++; + if (j == pattern.size()) return i - pattern.size() + 1; + } + return -1; +} +``` + +--- + +## 5. 树 (Tree) + +### 5.1 二叉树遍历 +```cpp +struct TreeNode { + int val; + TreeNode *left, *right; + TreeNode(int x) : val(x), left(NULL), right(NULL) {} +}; + +// 递归遍历 (Pre/In/Post) +void dfs(TreeNode* root) { + if (!root) return; + // cout << root->val; // 先序 + dfs(root->left); + // cout << root->val; // 中序 + dfs(root->right); + // cout << root->val; // 后序 +} + +// 层序遍历 (BFS) +void levelOrder(TreeNode* root) { + if (!root) return; + queue q; + q.push(root); + while (!q.empty()) { + TreeNode* node = q.front(); q.pop(); + cout << node->val << " "; + if (node->left) q.push(node->left); + if (node->right) q.push(node->right); + } +} +``` + +### 5.2 并查集 (Union-Find) +**功能**: 集合合并与查询。 +```cpp +int fa[10005]; +void init(int n) { for(int i=1; i<=n; i++) fa[i]=i; } +int find(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]); } // 路径压缩 +void unite(int x, int y) { fa[find(x)] = find(y); } +``` + +### 5.3 树状数组 (Fenwick Tree) +**功能**: 单点修改,区间查询前缀和。 +```cpp +int bit[10005], n; +int lowbit(int x) { return x & -x; } +void add(int x, int k) { for(; x<=n; x+=lowbit(x)) bit[x]+=k; } +int query(int x) { int s=0; for(; x>0; x-=lowbit(x)) s+=bit[x]; return s; } +``` + +--- + +## 6. 图论 (Graph) + +### 6.1 存图与遍历 (Adjacency List, DFS, BFS) +```cpp +struct edge { int to, w; }; +vector> adj; // adj[u] 存 u 的出边 +vector vis; + +// DFS +void dfs(int u) { + vis[u] = true; + for (auto e : adj[u]) { + if (!vis[e.to]) dfs(e.to); + } +} + +// BFS (求无权图最短路) +void bfs(int s) { + queue q; q.push(s); vis[s] = true; + while (!q.empty()) { + int u = q.front(); q.pop(); + for (auto e : adj[u]) { + if (!vis[e.to]) { + vis[e.to] = true; + q.push(e.to); + } + } + } +} +``` + +### 6.2 最短路 Dijkstra (堆优化) +**注意**: 仅适用于非负权边。 +```cpp +vector dis; +void dijkstra(int s, int n) { + dis.assign(n + 1, INF); + dis[s] = 0; + priority_queue, vector>, greater>> pq; + pq.push({0, s}); + + while (!pq.empty()) { + int d = pq.top().first; + int u = pq.top().second; + pq.pop(); + + if (d > dis[u]) continue; + + for (auto e : adj[u]) { + if (dis[u] + e.w < dis[e.to]) { + dis[e.to] = dis[u] + e.w; + pq.push({dis[e.to], e.to}); + } + } + } +} +``` + +### 6.3 最小生成树 (Kruskal) +**原理**: 贪心,按边权从小到大选边,并查集判环。 +```cpp +struct Edge { + int u, v, w; + bool operator<(const Edge& o) const { return w < o.w; } +} edges[20005]; + +int kruskal(int n, int m) { + sort(edges, edges + m); + init(n); // 并查集初始化 + int res = 0, cnt = 0; + for (int i = 0; i < m; i++) { + if (find(edges[i].u) != find(edges[i].v)) { + unite(edges[i].u, edges[i].v); + res += edges[i].w; + cnt++; + } + } + return cnt == n - 1 ? res : -1; +} +``` + +### 6.4 拓扑排序 (Topological Sort) +**功能**: 有向无环图 (DAG) 的排序。 +```cpp +int in_degree[10005]; // 需预处理入度 +vector toposort(int n) { + queue q; + for(int i=1; i<=n; i++) if(in_degree[i]==0) q.push(i); + vector res; + while(!q.empty()){ + int u = q.front(); q.pop(); + res.push_back(u); + for(auto e : adj[u]){ + if(--in_degree[e.to] == 0) q.push(e.to); + } + } + return res; +} +``` diff --git a/docs/sop/notes/data-structure-algorithm-notes.md b/docs/sop/notes/data-structure-algorithm-notes.md index 79531db..b41ed25 100644 --- a/docs/sop/notes/data-structure-algorithm-notes.md +++ b/docs/sop/notes/data-structure-algorithm-notes.md @@ -1,597 +1,597 @@ ---- -title: 数据结构与算法笔记 -date: 2026-01-13 -descriptionHTML: '数据结构与算法详细复习及排序算法深度解析' -tags: - - 笔记 - - 数据结构 - - 算法 -sidebar: true -readingTime: true -hidden: false -recommend: true ---- - -# 数据结构与算法详细复习笔记 - -## 第2章:线性表 (Linear List) - -### 1. 基本概念 -* **定义**:由 $n (n \ge 0)$ 个数据特性相同的元素构成的有限序列。 - * **特性**: - * **有序性**:元素之间有逻辑上的顺序(第一个、最后一个、前驱、后继)。 - * **有限性**:元素个数有限。 -* **抽象数据类型 (ADT)**: - * 数据对象:$D = \{a_i | a_i \in ElemSet, i=1, 2, ..., n\}$ - * 数据关系:$R = \{ | a_{i-1}, a_i \in D, i=2, ..., n\}$ - * 基本操作:`InitList`, `DestroyList`, `ListInsert`, `ListDelete`, `GetElem`, `LocateElem` 等。 - -### 2. 顺序表 (Sequential List) -* **定义**:用一组地址连续的存储单元依次存储线性表的数据元素。 -* **特点**: - * **随机存取**:通过首地址和下标可在 $O(1)$ 时间内访问任意元素。公式:$Loc(a_i) = Loc(a_1) + (i-1) \times L$。 - * **存储密度高**:无需为逻辑关系(指针)额外分配空间。 - * **缺点**:插入/删除需要移动大量元素(平均移动 $n/2$),需预分配空间(静态分配易溢出,动态分配需扩容)。 - -### 3. 链表 (Linked List) -* **单链表 (Singly Linked List)**: - * **结构**:结点 = 数据域 (data) + 指针域 (next)。 - * **头结点**:在首元结点前附设的一个结点,便于处理空表和统一插入/删除操作。 - * **建立方法**: - * **头插法**:新结点插入头结点之后,读入顺序与链表顺序相反(逆序)。 - * **尾插法**:维护一个尾指针 `r`,新结点插在 `r` 之后,读入顺序与链表顺序相同。 -* **双向链表 (Doubly Linked List)**: - * **结构**:结点包含 `prior` (前驱) 和 `next` (后继) 指针。 - * **插入操作** (`s` 插在 `p` 之后): - 1. `s->prior = p;` - 2. `s->next = p->next;` - 3. `p->next->prior = s;` - 4. `p->next = s;` (注意顺序,防止断链) - * **删除操作** (删除 `p` 的后继节点 `q`): - 1. `p->next = q->next;` - 2. `q->next->prior = p;` - 3. `free(q);` -* **循环链表 (Circular Linked List)**: - * **特点**:表中最后一个结点的指针指向头结点,形成环状。 - * **判空/遍历结束**:指针是否等于头指针 (or 尾指针)。 - * **优势**:从任意结点出发均可遍历全表;若设尾指针 `rear`,则查找头尾的时间均为 $O(1)$(便于合并两个链表)。 -* **静态链表**: - * 利用数组实现,元素包含 `data` 和 `cur` (游标,即下个元素的数组下标)。 - * 适用于不支持指针的语言(如 BASIC)或数据量固定且需频繁操作指针的场景。 -* **块状链表 (Unrolled Linked List)**: - * 每个结点存储多个数据元素(即一个小的顺序表)。平衡了顺序表(空间紧凑)和链表(插入删除快)的优缺点。 - -### 4. 应用 -* **一元多项式相加**:利用链表按指数升序存储。遍历两个链表,比较指数大小: - * 指数相同:系数相加,若非零则保留。 - * 指数不同:将指数小的项链入结果链表。 -* **大整数处理**:利用链表存储大整数的每一位(或每几位),便于进位处理。 - ---- - -## 第3章:栈与队列 (Stack & Queue) - -### 1. 栈 (Stack) -* **定义**:只允许在表尾(栈顶 Top)进行插入(Push)和删除(Pop)的线性表。**LIFO** (Last In First Out)。 -* **实现**: - * **顺序栈**:`top` 指针指向栈顶元素(或栈顶上一个空位)。需判断 `StackOverflow` (上溢) 和 `StackUnderflow` (下溢,即空栈 pop)。 - * **共享栈**:两个栈共享一段空间,栈底在两端,栈顶向中间延伸,`top1 + 1 == top2` 时满。 -* **应用**: - * **递归**:系统栈保存每一层调用的局部变量、返回地址。 - * **括号匹配**:左括号压栈,右括号弹栈匹配。 - * **表达式求值**: - * **中缀转后缀 (RPN)**:遇操作数输出;遇运算符与栈顶比较优先级。 - * **后缀计算**:遇操作数压栈;遇运算符弹栈计算结果并压栈。 - * **迷宫求解**:DFS 深度优先搜索(回溯法)。 - -### 2. 队列 (Queue) -* **定义**:只允许在表尾(Rear)插入,表头(Front)删除。**FIFO** (First In First Out)。 -* **循环队列 (Circular Queue)**: - * **问题**:顺序队列单纯 `front++` `rear++` 会导致“假溢出”(即前方有空位但 rear 已达上限)。 - * **解决**:模运算。`(rear + 1) % MAXSIZE`。 - * **判空/判满**:为了区分队空和队满,通常牺牲一个单元。 - * **队空**:`front == rear` - * **队满**:`(rear + 1) % MAXSIZE == front` - * **队长**:`(rear - front + MAXSIZE) % MAXSIZE` -* **双端队列 (Deque)**:两端均可入队、出队。 - * **变种**:输入受限(一端入两端出)、输出受限(两端入一端出)。 - ---- - -## 第4章:字符串 (String) - -### 1. 基本概念 -* **串**:零个或多个字符组成的有限序列。 -* **子串**:主串中任意连续字符组成的子序列。 -* **存储**:定长顺序存储(截断)、堆分配存储(动态指针)、块链存储。 - -### 2. 模式匹配算法 -* **朴素模式匹配 (Brute-Force)**: - * 主串指针 `i`,模式串指针 `j`。 - * 失配时:`i` 回溯到 `i - j + 1`,`j` 回溯到 `0`。 - * 最坏时间复杂度:$O(n \times m)$。 -* **KMP 算法 (Knuth-Morris-Pratt)**: - * **核心**:主串指针 `i` **不回溯**,模式串指针 `j` 回退到 `next[j]`。 - * **Next 数组**:`next[j]` 表示模式串第 `j` 个字符前的子串中,**最长相等前后缀的长度**。 - * 当 `S[i] != P[j]` 时,`j` 移动到 `next[j]` 继续比较。 - * **NextVal 数组**(优化):若 `P[j] == P[next[j]]`,则递归优化,避免重复无效比较。 - * 时间复杂度:$O(n + m)$。 - ---- - -## 第5章:数组和广义表 - -### 1. 数组 -* **存储**:内存是一维的,多维数组需映射。 - * **行优先 (Row-Major)**:C/C++。`LOC(a[i][j]) = LOC(0,0) + (i * n + j) * size`。 - * **列优先 (Column-Major)**:Fortran。 - -### 2. 矩阵压缩存储 -* **对称矩阵**:$a_{ij} = a_{ji}$。只存上三角或下三角。按行优先存储下三角元素 $(i \ge j)$ 的下标 $k = \frac{i(i+1)}{2} + j$。 -* **稀疏矩阵 (Sparse Matrix)**: - * **三元组表**:`(i, j, value)`。空间优化,但丧失随机存取特性。 - * **十字链表**:每个非零元节点既在行链表上,又在列链表上。便于频繁插入删除。 - -### 3. 广义表 (Generalized List) -* **定义**:$LS = (a_1, a_2, ..., a_n)$,其中 $a_i$ 可以是原子或子表。 -* **重要操作**: - * **GetHead(L)**:取表头(第一个元素,可能是原子或列表)。 - * **GetTail(L)**:取表尾(**除第一个元素外剩余元素构成的表**,结果一定是一个表)。 - * *例*:$L=((a,b), c)$,Head(L)=$(a,b)$,Tail(L)=$(c)$。 - ---- - -## 第6章:树与二叉树 - -### 1. 二叉树 (Binary Tree) -* **性质**: - 1. 第 $i$ 层至多 $2^{i-1}$ 个结点。 - 2. 深度为 $k$ 至多 $2^k - 1$ 个结点。 - 3. **核心性质**:$n_0 = n_2 + 1$(叶子结点数 = 度为2的结点数 + 1)。 -* **完全二叉树 (Complete Binary Tree)**: - * 编号规则与满二叉树一一对应。 - * 数组存储时,结点 $i$ 的左孩子为 $2i$,右孩子为 $2i+1$,父节点 $\lfloor i/2 \rfloor$。 - -### 2. 遍历 (Traversal) -* **前序 (Pre)**:根 -> 左 -> 右 -* **中序 (In)**:左 -> 根 -> 右 -* **后序 (Post)**:左 -> 右 -> 根 -* **层序**:利用**队列**实现 BFS。 -* **构造**: - * 前序 + 中序 -> 唯一确定二叉树。 - * 后序 + 中序 -> 唯一确定二叉树。 - * 前序 + 后序 -> **不能**唯一确定(无法区分左右子树)。 - -### 3. 应用 -* **哈夫曼树 (Huffman Tree)**: - * **构造**:每次选取权值最小的两棵树合并,新树权值为两者之和,直到只剩一棵。 - * **WPL (带权路径长度)**:$\sum (叶子权值 \times 路径长度)$。 - * **哈夫曼编码**:前缀编码(任一字符编码都不是另一字符编码的前缀),用于数据压缩。 -* **线索二叉树**: - * 利用空闲指针域(`lchild`若空指向前驱,`rchild`若空指向后继),通过 `ltag/rtag` 标记。 - * 加快遍历速度,无需递归或栈。 - ---- - -## 第7章:图 (Graph) - -### 1. 存储结构 -* **邻接矩阵**:`AdjMatrix[i][j] = 1` 或权值。 - * 优点:易判断两点是否相连,易算度(行和列和)。 - * 缺点:稀疏图浪费空间 $O(n^2)$。 -* **邻接表**:顶点表 + 边表(链表)。 - * 优点:节省空间 $O(n+e)$。 - * 缺点:求入度麻烦(需遍历全表或使用逆邻接表)。 - -### 2. 遍历 -* **DFS (深度优先)**:类似树的先序遍历,使用**递归/栈**。 -* **BFS (广度优先)**:类似树的层序遍历,使用**队列**。最短路径特性(无权图)。 - ---- - -## 第8章:图的应用 (重难点) - -### 1. 最小生成树 (MST) -* **Prim 算法**: - * **思想**:归并点。从一个顶点开始,每次选一条连接“已选集合”和“未选集合”且权值最小的边。 - * **复杂度**:$O(n^2)$,适合**稠密图**。 -* **Kruskal 算法**: - * **思想**:归并边。将边按权值排序,从小到大选边,若不构成回路(利用并查集判断)则加入。 - * **复杂度**:$O(e \log e)$,适合**稀疏图**。 - -### 2. 最短路径 -* **Dijkstra 算法**: - * **单源最短路**。贪心策略。每次从未标记节点中选距离源点最近的节点,松弛其邻接点。 - * **限制**:边权不能为负。 - * **复杂度**:$O(n^2)$。 -* **Floyd 算法**: - * **多源最短路**。动态规划。`A[i][j] = min(A[i][j], A[i][k] + A[k][j])`。 - * **复杂度**:$O(n^3)$。 - -### 3. AOV 网与拓扑排序 -* **定义**:顶点表示活动,边表示优先关系。 -* **算法**: - 1. 选择入度为 0 的顶点输出。 - 2. 删除该顶点及其出边。 - 3. 重复直到图空或无入度为 0 的点(说明有环)。 - -### 4. AOE 网与关键路径 -* **定义**:边表示活动,边权为持续时间,顶点表示事件。 -* **关键路径**:从源点到汇点的最长路径(决定工程最短工期)。 -* **计算**: - * 事件最早发生时间 `ve`(从前向后取max)。 - * 事件最晚发生时间 `vl`(从后向前取min)。 - * 活动最早/最晚开始时间 `e` / `l`。 - * 若 `e == l`,则为关键活动。 - ---- - -## 第9章:查找 (Search) - -### 1. 动态查找树 -* **二叉排序树 (BST)**:左 < 根 < 右。中序遍历有序。插入/删除/查找平均 $O(\log n)$,最坏 $O(n)$(退化为链表)。 -* **平衡二叉树 (AVL)**: - * 任一节点左右子树高度差(平衡因子 BF)绝对值 $\le 1$。 - * **调整**: - * **LL型**:右旋(Right Rotation)。 - * **RR型**:左旋(Left Rotation)。 - * **LR型**:先左旋后右旋。 - * **RL型**:先右旋后左旋。 - -### 2. 散列 (Hashing) -* **散列函数**:`H(key)`。除留余数法 `H(key) = key % p` (p 为不大于表长的最大质数)。 -* **处理冲突**: - * **开放定址法**: - * 线性探测:`di = 1, 2, 3...` (易产生聚集/堆积现象)。 - * 二次探测:`di = 1^2, -1^2, 2^2, -2^2...`。 - * **链地址法**:相同 Hash 值的元素存入同一链表。 -* **ASL (平均查找长度)**:衡量效率指标,依赖于装填因子 $\alpha = \frac{填入元素个数}{表长}$。 - ---- - -## 第10章:排序 (Sorting) - -### 1. 算法复杂度与稳定性对比 - -| 类别 | 排序算法 | 平均时间 | 最坏时间 | 空间 | 稳定性 | 备注 | -| :--- | :--- | :--- | :--- | :--- | :--- | :--- | -| **插入** | **直接插入** | $O(n^2)$ | $O(n^2)$ | $O(1)$ | **稳定** | 适合基本有序/n较小 | -| | **希尔排序** | $O(n^{1.3})$ | $O(n^2)$ | $O(1)$ | 不稳定 | 增量 $d$ 逐渐减半 | -| **交换** | **冒泡排序** | $O(n^2)$ | $O(n^2)$ | $O(1)$ | **稳定** | 标志位优化 | -| | **快速排序** | $O(n \log n)$ | $O(n^2)$ | $O(\log n)$ | 不稳定 | **内排序最快**,枢轴选择关键 | -| **选择** | **简单选择** | $O(n^2)$ | $O(n^2)$ | $O(1)$ | 不稳定 | 移动次数少 | -| | **堆排序** | $O(n \log n)$ | $O(n \log n)$ | $O(1)$ | 不稳定 | 适合 Top K 问题 | -| **归并** | **归并排序** | $O(n \log n)$ | $O(n \log n)$ | $O(n)$ | **稳定** | 空间换时间,外排序基础 | -| **基数** | **基数排序** | $O(d(n+r))$ | $O(d(n+r))$ | $O(r)$ | **稳定** | 无需比较,分配+收集 | - -### 2. 核心算法说明 -* **快速排序 (Quick Sort)**: - * **Partition**:选取枢轴(pivot),将小于 pivot 的放左边,大于的放右边。 - * 最坏情况:有序或逆序(退化为冒泡)。 -* **堆排序 (Heap Sort)**: - * **建堆**:从 $\lfloor n/2 \rfloor$ 处开始向下调整 (Heapify)。 - * **排序**:交换堆顶与末尾元素,堆大小减1,重新向下调整。 - * 升序排序使用**大顶堆**。 -* **归并排序**: - * Divide (分):将数组对半切分。 - * Conquer (治):递归排序子数组。 - * Merge (合):合并两个有序数组。 - ---- ---- - -## 附录:数据结构小测涉及公式与重点总结 - -通过分析《小测1 答案》、《小测2 答案》及《小测3_题目答案》,以下是针对考试重点涉及的公式、推导及核心结论的详细总结。 - -### 1. 栈与队列 (Stack & Queue) - -#### **卡特兰数 (Catalan Number)** -* **应用场景**:$n$ 个不同元素进栈,可能的出栈序列总数。 -* **公式**: - $$C_n = \frac{1}{n+1} C_{2n}^n = \frac{(2n)!}{(n+1)!n!}$$ -* **小测案例** (小测1 第6题): - * $n=3$ 时,出栈序列数为 $C_3 = \frac{C_6^3}{4} = \frac{20}{4} = 5$ 种。 - -#### **双端队列输出序列** -* **排除法逻辑** (小测1 第8题): - * 对于输入受限或输出受限的双端队列,通常通过模拟和排除法来判断非法序列。 - * *核心技巧*:结合栈的后进先出特性与队列的先进先出特性进行模拟。 - ---- - -### 2. 数组与矩阵 (Arrays & Matrices) - -#### **三对角矩阵压缩存储** -* **定义**:元素仅分布在主对角线及上下两条对角线上。 -* **下标映射公式** (小测1 第10题): - * 题目特定映射关系:$A[1..n][1..n]$ 压缩至 $B[1..3n-2]$。 - * 给定公式推导结果:$k = 2i + j - 2$。 - * *案例验证*:$A[66][65]$ 对应 $k = 2 \times 66 + 65 - 2 = 195$。 - * *注意*:通用公式通常为 $k = 2i + j - 3$ 或类似,考试时需严格根据题目给定的数组下标起始点(如从0还是从1开始)及排列方式进行推导。 - -#### **KMP 算法 Next 数组计算** -* **推导逻辑** (小测1 第13题): - * 若 $S[j] == S[k]$ (其中 $k = next[j-1]$),则 $next[j] = k + 1$。 - * 若不等,则令 $k = next[k]$ 继续回溯比较。 - * *案例*:$S = 'aaab'$ - * $j=1, S='a', next[1]=0$ (固定) - * $j=2, S='a', S[1]==S[0]$? (前缀比较), $next[2]=1$ - * $j=3, S='a', S[2]==S[1] \rightarrow next[3]=2$ - * $j=4, S='b', S[3] \neq S[2]$, 回溯... - ---- - -### 3. 树与二叉树 (Trees) - -#### **二叉树节点性质公式** -1. **度数关系**: - * $$n_0 = n_2 + 1$$ (叶子结点数 = 度为2的结点数 + 1) - * 推导依据: - * 总节点数 $n = n_0 + n_1 + n_2$ - * 总分支数 $B = n - 1 = n_1 + 2n_2$ - * 联立消去 $n_1$,得 $n_0 = n_2 + 1$。 - * *小测陷阱* (小测2 第1题):已知总数 $n=98$,$n_1=48$,求叶子数。 - * $n_0 + 48 + n_2 = 98 \Rightarrow n_0 + n_2 = 50$ - * 代入 $n_0 = n_2 + 1 \Rightarrow 2n_2 + 1 = 50 \Rightarrow 2n_2 = 49$。 - * $n_2$ 必须为整数,故**不存在这样的树**。 - -2. **完全二叉树 (Complete Binary Tree)** - * **叶子结点数**:$$n_0 = \lceil n/2 \rceil$$ (当 $n$ 为奇数时 $n_0 = (n+1)/2$,偶数时 $n_0 = n/2$)。 - * *案例* (小测2 第3题):$n=47$ (奇数),$n_0 = (47+1)/2 = 24$。 - -3. **哈夫曼树 (Huffman Tree)** - * **特性**:只有度为0和度为2的结点,**不存在度为1的结点** ($n_1 = 0$)。 - * **节点总数公式**: - $$n = 2n_0 - 1$$ - * *推导*:$n = n_0 + n_2$,且 $n_2 = n_0 - 1 \Rightarrow n = n_0 + (n_0 - 1) = 2n_0 - 1$。 - * *小测结论* (小测2 第12题):若有 $n$ 个叶子结点(题目用 $n$ 表示 $n_0$),则总结点数为 $2n - 1$。 - -4. **森林与树的转换** - * **连通分量/树的数量计算** (小测2 第9题): - * 若森林有 $N$ 个结点,$K$ 条边,则森林中树的棵数 $T$ 为: - $$T = N - K$$ - * *推导*:每棵树 (连通分量) 的边数 = 节点数 - 1。设第 $i$ 棵树有 $v_i$ 个节点,则边数 $e_i = v_i - 1$。 - * 总边数 $K = \sum (v_i - 1) = \sum v_i - \sum 1 = N - T \Rightarrow T = N - K$。 - ---- - -### 4. 图 (Graphs) - -#### **握手定理 (Handshaking Lemma)** -* **公式**:所有顶点的度数之和等于边数的2倍。 - $$\sum_{v \in V} \deg(v) = 2|E|$$ -* **最少顶点数求解** (小测3 第2题): - * 已知:$|E|=16$ (度数和32)。 - * 已知点:3个度4,4个度3。已知度数和 $3 \times 4 + 4 \times 3 = 24$。 - * 剩余度数:$32 - 24 = 8$。 - * 约束:其余顶点度数 $<3$ (即最大为2)。 - * 目标:顶点数最少 $\rightarrow$ 剩余顶点度数尽可能大 $\rightarrow$ 设其余点度数均为2。 - * 剩余点数:$8 / 2 = 4$ 个。 - * 总顶点数:$3 + 4 + 4 = 11$ 个。 - -#### **最小生成树 (MST)** -* **唯一性判定** (小测3 第8题): - * 当无向连通图的**最小生成树不唯一**时,Prim 和 Kruskal 算法生成的结果可能不同。 - * 当最小生成树唯一时,两者结果必然相同。 - -#### **关键路径 (Critical Path)** -* **计算方法** (小测3 第11题): - * 路径长度 = 路径上所有活动(边)持续时间之和。 - * 关键路径 = 源点到汇点的**最长路径**。 - * *案例*:路径 $V_0 \rightarrow V_1 \rightarrow V_4 \rightarrow V_6 \rightarrow V_8$。 - * 长度计算:$6 + 1 + 9 + 2 = 18$。 - - - -## 排序算法深度解析 (Sorting Algorithms Deep Dive) - -本文档对常见的排序算法进行展开讲解,包含**核心思想**、**算法步骤**、**过程演示**、**复杂度分析**及**代码逻辑**。 - ---- - -### 1. 插入排序类 (Insertion Sorts) - -#### 1.1 直接插入排序 (Direct Insertion Sort) -**核心思想**: -将数组分为“已排序区间”和“未排序区间”。每次从未排序区间取出一个元素,在已排序区间中从后向前扫描,找到合适位置插入。类似于**抓扑克牌**的过程。 - -**算法步骤**: -1. 默认第 1 个元素已排序。 -2. 取出第 2 个元素 `temp`,与第 1 个比较。若 `temp < arr[1]`,则 `arr[1]` 后移,`temp` 插入开头。 -3. 重复直到所有元素归位。 - -**过程演示** (排序 `[5, 2, 4, 6, 1, 3]`): -* 初始:`[5]` | `2, 4, 6, 1, 3` -* 取 2:2 比 5 小,5 后移。 -> `[2, 5]` | `4, 6, 1, 3` -* 取 4:4 比 5 小,5 后移;4 比 2 大,停。 -> `[2, 4, 5]` | `6, 1, 3` -* ...以此类推。 - -**核心代码逻辑 (C/C++)**: -```c -void InsertSort(int A[], int n) { - int i, j, temp; - for (i = 1; i < n; i++) { // 从第2个元素开始 - if (A[i] < A[i-1]) { // 若小于前驱,需插入 - temp = A[i]; // 暂存当前元素 - for (j = i-1; j >= 0 && A[j] > temp; --j) { - A[j+1] = A[j]; // 大于temp的元素后移 - } - A[j+1] = temp; // 插入 - } - } -} -``` - -**分析**: -* **最好情况**:$O(n)$(已是有序,只需比较不移动)。 -* **最坏情况**:$O(n^2)$(逆序)。 -* **稳定性**:**稳定**(因为 `A[j] > temp` 才移动,相等时不移动)。 - ---- - -#### 1.2 希尔排序 (Shell Sort) -**核心思想**: -又称“**缩小增量排序**”。是直接插入排序的优化版。通过将数组按增量 `d` 分组,对每组进行直接插入排序,使数组“基本有序”,最后 `d=1` 时再进行一次直接插入。 - -**为什么比直接插入快?** -直接插入在基本有序时效率极高。希尔排序前期移动步长长,能快速消除逆序对;后期步长短但数组已基本有序,移动次数少。 - -**过程演示**: -数组 `[8, 9, 1, 7, 2, 3, 5, 4, 6, 0]`,$n=10$。 -1. **d=5** (分5组: `8,3`, `9,5`, `1,4`, `7,6`, `2,0`): - * 组内排序后 -> `[3, 5, 1, 6, 0, 8, 9, 4, 7, 2]` -2. **d=2** (分2组: `3,1,0,9,7`, `5,6,8,4,2`): - * 组内排序后 -> `[0, 2, 1, 4, 3, 5, 7, 6, 9, 8]` -3. **d=1** (整体直接插入): - * 微调 -> `[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]` - -**分析**: -* **复杂度**:依赖于增量序列,平均约 $O(n^{1.3})$。 -* **稳定性**:**不稳定**(相同元素可能分在不同组,跳跃式移动导致相对位置改变)。 - ---- - -### 2. 交换排序类 (Exchange Sorts) - -#### 2.1 冒泡排序 (Bubble Sort) -**核心思想**: -两两比较相邻记录,如果反序则交换,直到没有反序的记录为止。每趟遍历将最大的元素“浮”到最后(或最小的“沉”到最前)。 - -**优化点**: -设置 `flag` 变量。若某一趟遍历中**没有发生任何交换**,说明已经有序,直接结束算法。 - -**分析**: -* **最好情况**:$O(n)$(有序,第一趟 `flag` 未变直接退出)。 -* **最坏情况**:$O(n^2)$。 -* **稳定性**:**稳定**。 - ---- - -#### 2.2 快速排序 (Quick Sort) —— **最重要的排序算法** -**核心思想**: -**分治法 (Divide and Conquer)**。 -1. **选基准 (Pivot)**:通常选第一个元素。 -2. **划分 (Partition)**:将比基准小的移到左边,比基准大的移到右边。基准归位。 -3. **递归**:对左右两个子序列重复上述过程。 - -**Partition 过程详解 (双指针法)**: -设基准 `pivot = A[low]`,`low` 指向首,`high` 指向尾。 -1. **High 向左找小**:`while (low < high && A[high] >= pivot) high--;` 找到比 pivot 小的,移到 `low` 处 (`A[low] = A[high]`)。 -2. **Low 向右找大**:`while (low < high && A[low] <= pivot) low++;` 找到比 pivot 大的,移到 `high` 处 (`A[high] = A[low]`)。 -3. 重复直到 `low == high`,将 `pivot` 放入 `A[low]`。 - -**代码片段**: -```c -int Partition(int A[], int low, int high) { - int pivot = A[low]; // 选第一个为基准 - while (low < high) { - while (low < high && A[high] >= pivot) high--; - A[low] = A[high]; - while (low < high && A[low] <= pivot) low++; - A[high] = A[low]; - } - A[low] = pivot; - return low; // 返回基准位置 -} -``` - -**分析**: -* **平均复杂度**:$O(n \log n)$。 -* **最坏复杂度**:$O(n^2)$。发生在**有序**或**逆序**时,基准每次都选到最大/最小,退化为冒泡。 -* **空间复杂度**:$O(\log n)$ (递归栈的高度)。 -* **稳定性**:**不稳定**(Partition 过程中的远距离交换)。 - ---- - -### 3. 选择排序类 (Selection Sorts) - -#### 3.1 简单选择排序 (Simple Selection Sort) -**核心思想**: -第 $i$ 趟从 $A[i...n]$ 中选出最小的元素,与 $A[i]$ 交换。 - -**特点**: -* **交换次数少**:最多 $n-1$ 次(优于冒泡)。 -* **比较次数多**:固定 $\frac{n(n-1)}{2}$ 次。 -* **稳定性**:**不稳定**。 - * *例子*:`[5, 8, 5, 2, 9]`。第一趟,第一个 `5` 会和 `2` 交换,跑到第二个 `5` 后面。 - ---- - -#### 3.2 堆排序 (Heap Sort) -**核心思想**: -利用**堆**(完全二叉树)这种数据结构。 -* **大顶堆**:$A[i] \ge A[2i+1]$ 且 $A[i] \ge A[2i+2]$。用于**升序**排序。 -* **小顶堆**:用于降序排序。 - -**算法步骤**: -1. **建堆**:将无序数组构造成一个大顶堆。 - * 从最后一个非叶子结点 ($\lfloor n/2 \rfloor - 1$) 开始,从右至左,从下至上进行“下沉”调整 (`HeapAdjust` / `sift_down`)。 -2. **排序**: - * 将堆顶元素(最大值)与堆底末尾元素交换。 - * 将剩余 $n-1$ 个元素重新调整为大顶堆。 - * 重复直至堆大小为 1。 - -**下沉 (sift_down) 逻辑**: -判断节点 `k`,其左孩子 `2k+1`,右孩子 `2k+2`。 -若孩子比父节点大,则将最大的孩子与父节点交换,并继续向下追踪被交换的孩子节点。 - -**分析**: -* **复杂度**:$O(n \log n)$。建堆 $O(n)$,调整 $O(n \log n)$。 -* **优势**:在 Top K 问题(选出前 K 大)中表现极佳。 -* **稳定性**:**不稳定**。 - ---- - -### 4. 归并排序 (Merge Sort) - -**核心思想**: -**分治法**。 -1. **分**:将数组从中间切开,递归切分,直到长度为 1。 -2. **治 (Merge)**:将两个**有序**的子数组合并成一个有序数组。 - -**Merge 过程**: -需申请一个辅助数组 `B[]`。 -比较左半区 `A[i]` 和右半区 `A[j]`: -* 若 `A[i] <= A[j]`,将 `A[i]` 放入 `B`,`i++`。 -* 若 `A[i] > A[j]`,将 `A[j]` 放入 `B`,`j++`。 -* 最后将剩余元素复制进 `B`,再把 `B` 拷回 `A`。 - -**分析**: -* **复杂度**:$O(n \log n)$。 -* **空间复杂度**:$O(n)$(需要辅助数组,这是它最大的缺点)。 -* **稳定性**:**稳定**(Merge 时 `A[i] <= A[j]` 优先取左边,保证相对位置不变)。 - ---- - -### 5. 基数排序 (Radix Sort) - -**核心思想**: -**不基于比较**的排序。利用“分配”和“收集”。 -通常针对非负整数。将整数按位数切割成不同的数字,按每个位数分别比较。 - -**步骤 (LSD - Least Significant Digit)**: -1. **按个位排序**:准备 10 个桶 (0-9)。遍历数组,按个位数字放入对应桶。按顺序收集回来。 -2. **按十位排序**:基于上一步结果,按十位放入桶,再收集。 -3. ...直至最高位。 - -**分析**: -* **复杂度**:$O(d(n+r))$。 - * $d$:最大数字的位数(决定遍历几趟)。 - * $n$:元素个数。 - * $r$:基数(如十进制 r=10,决定桶的个数)。 -* **稳定性**:**稳定**(必须稳定,否则高位排序会打乱低位的顺序)。 - ---- - -### 6. 总结对比表 - -| 算法 | 平均时间 | 最好 | 最坏 | 空间 | 稳定性 | 关键词 | -| :--- | :--- | :--- | :--- | :--- | :--- | :--- | -| **直接插入** | $O(n^2)$ | $O(n)$ | $O(n^2)$ | $O(1)$ | **稳定** | 摸牌、越有序越快 | -| **希尔** | $O(n^{1.3})$ | - | $O(n^2)$ | $O(1)$ | 不稳定 | 增量分组 | -| **冒泡** | $O(n^2)$ | $O(n)$ | $O(n^2)$ | $O(1)$ | **稳定** | 交换、flag优化 | -| **快速** | $O(n \log n)$ | $O(n \log n)$ | $O(n^2)$ | $O(\log n)$ | 不稳定 | **Partition**、分治 | -| **简单选择** | $O(n^2)$ | $O(n^2)$ | $O(n^2)$ | $O(1)$ | 不稳定 | 选最小 | -| **堆排序** | $O(n \log n)$ | $O(n \log n)$ | $O(n \log n)$ | $O(1)$ | 不稳定 | **建堆**、下沉 | -| **归并** | $O(n \log n)$ | $O(n \log n)$ | $O(n \log n)$ | $O(n)$ | **稳定** | **合并**、空间换时间 | +--- +title: 数据结构与算法笔记 +date: 2026-01-13 +descriptionHTML: '数据结构与算法详细复习及排序算法深度解析' +tags: + - 笔记 + - 数据结构 + - 算法 +sidebar: true +readingTime: true +hidden: false +recommend: true +--- + +# 数据结构与算法详细复习笔记 + +## 第2章:线性表 (Linear List) + +### 1. 基本概念 +* **定义**:由 $n (n \ge 0)$ 个数据特性相同的元素构成的有限序列。 + * **特性**: + * **有序性**:元素之间有逻辑上的顺序(第一个、最后一个、前驱、后继)。 + * **有限性**:元素个数有限。 +* **抽象数据类型 (ADT)**: + * 数据对象:$D = \{a_i | a_i \in ElemSet, i=1, 2, ..., n\}$ + * 数据关系:$R = \{ | a_{i-1}, a_i \in D, i=2, ..., n\}$ + * 基本操作:`InitList`, `DestroyList`, `ListInsert`, `ListDelete`, `GetElem`, `LocateElem` 等。 + +### 2. 顺序表 (Sequential List) +* **定义**:用一组地址连续的存储单元依次存储线性表的数据元素。 +* **特点**: + * **随机存取**:通过首地址和下标可在 $O(1)$ 时间内访问任意元素。公式:$Loc(a_i) = Loc(a_1) + (i-1) \times L$。 + * **存储密度高**:无需为逻辑关系(指针)额外分配空间。 + * **缺点**:插入/删除需要移动大量元素(平均移动 $n/2$),需预分配空间(静态分配易溢出,动态分配需扩容)。 + +### 3. 链表 (Linked List) +* **单链表 (Singly Linked List)**: + * **结构**:结点 = 数据域 (data) + 指针域 (next)。 + * **头结点**:在首元结点前附设的一个结点,便于处理空表和统一插入/删除操作。 + * **建立方法**: + * **头插法**:新结点插入头结点之后,读入顺序与链表顺序相反(逆序)。 + * **尾插法**:维护一个尾指针 `r`,新结点插在 `r` 之后,读入顺序与链表顺序相同。 +* **双向链表 (Doubly Linked List)**: + * **结构**:结点包含 `prior` (前驱) 和 `next` (后继) 指针。 + * **插入操作** (`s` 插在 `p` 之后): + 1. `s->prior = p;` + 2. `s->next = p->next;` + 3. `p->next->prior = s;` + 4. `p->next = s;` (注意顺序,防止断链) + * **删除操作** (删除 `p` 的后继节点 `q`): + 1. `p->next = q->next;` + 2. `q->next->prior = p;` + 3. `free(q);` +* **循环链表 (Circular Linked List)**: + * **特点**:表中最后一个结点的指针指向头结点,形成环状。 + * **判空/遍历结束**:指针是否等于头指针 (or 尾指针)。 + * **优势**:从任意结点出发均可遍历全表;若设尾指针 `rear`,则查找头尾的时间均为 $O(1)$(便于合并两个链表)。 +* **静态链表**: + * 利用数组实现,元素包含 `data` 和 `cur` (游标,即下个元素的数组下标)。 + * 适用于不支持指针的语言(如 BASIC)或数据量固定且需频繁操作指针的场景。 +* **块状链表 (Unrolled Linked List)**: + * 每个结点存储多个数据元素(即一个小的顺序表)。平衡了顺序表(空间紧凑)和链表(插入删除快)的优缺点。 + +### 4. 应用 +* **一元多项式相加**:利用链表按指数升序存储。遍历两个链表,比较指数大小: + * 指数相同:系数相加,若非零则保留。 + * 指数不同:将指数小的项链入结果链表。 +* **大整数处理**:利用链表存储大整数的每一位(或每几位),便于进位处理。 + +--- + +## 第3章:栈与队列 (Stack & Queue) + +### 1. 栈 (Stack) +* **定义**:只允许在表尾(栈顶 Top)进行插入(Push)和删除(Pop)的线性表。**LIFO** (Last In First Out)。 +* **实现**: + * **顺序栈**:`top` 指针指向栈顶元素(或栈顶上一个空位)。需判断 `StackOverflow` (上溢) 和 `StackUnderflow` (下溢,即空栈 pop)。 + * **共享栈**:两个栈共享一段空间,栈底在两端,栈顶向中间延伸,`top1 + 1 == top2` 时满。 +* **应用**: + * **递归**:系统栈保存每一层调用的局部变量、返回地址。 + * **括号匹配**:左括号压栈,右括号弹栈匹配。 + * **表达式求值**: + * **中缀转后缀 (RPN)**:遇操作数输出;遇运算符与栈顶比较优先级。 + * **后缀计算**:遇操作数压栈;遇运算符弹栈计算结果并压栈。 + * **迷宫求解**:DFS 深度优先搜索(回溯法)。 + +### 2. 队列 (Queue) +* **定义**:只允许在表尾(Rear)插入,表头(Front)删除。**FIFO** (First In First Out)。 +* **循环队列 (Circular Queue)**: + * **问题**:顺序队列单纯 `front++` `rear++` 会导致“假溢出”(即前方有空位但 rear 已达上限)。 + * **解决**:模运算。`(rear + 1) % MAXSIZE`。 + * **判空/判满**:为了区分队空和队满,通常牺牲一个单元。 + * **队空**:`front == rear` + * **队满**:`(rear + 1) % MAXSIZE == front` + * **队长**:`(rear - front + MAXSIZE) % MAXSIZE` +* **双端队列 (Deque)**:两端均可入队、出队。 + * **变种**:输入受限(一端入两端出)、输出受限(两端入一端出)。 + +--- + +## 第4章:字符串 (String) + +### 1. 基本概念 +* **串**:零个或多个字符组成的有限序列。 +* **子串**:主串中任意连续字符组成的子序列。 +* **存储**:定长顺序存储(截断)、堆分配存储(动态指针)、块链存储。 + +### 2. 模式匹配算法 +* **朴素模式匹配 (Brute-Force)**: + * 主串指针 `i`,模式串指针 `j`。 + * 失配时:`i` 回溯到 `i - j + 1`,`j` 回溯到 `0`。 + * 最坏时间复杂度:$O(n \times m)$。 +* **KMP 算法 (Knuth-Morris-Pratt)**: + * **核心**:主串指针 `i` **不回溯**,模式串指针 `j` 回退到 `next[j]`。 + * **Next 数组**:`next[j]` 表示模式串第 `j` 个字符前的子串中,**最长相等前后缀的长度**。 + * 当 `S[i] != P[j]` 时,`j` 移动到 `next[j]` 继续比较。 + * **NextVal 数组**(优化):若 `P[j] == P[next[j]]`,则递归优化,避免重复无效比较。 + * 时间复杂度:$O(n + m)$。 + +--- + +## 第5章:数组和广义表 + +### 1. 数组 +* **存储**:内存是一维的,多维数组需映射。 + * **行优先 (Row-Major)**:C/C++。`LOC(a[i][j]) = LOC(0,0) + (i * n + j) * size`。 + * **列优先 (Column-Major)**:Fortran。 + +### 2. 矩阵压缩存储 +* **对称矩阵**:$a_{ij} = a_{ji}$。只存上三角或下三角。按行优先存储下三角元素 $(i \ge j)$ 的下标 $k = \frac{i(i+1)}{2} + j$。 +* **稀疏矩阵 (Sparse Matrix)**: + * **三元组表**:`(i, j, value)`。空间优化,但丧失随机存取特性。 + * **十字链表**:每个非零元节点既在行链表上,又在列链表上。便于频繁插入删除。 + +### 3. 广义表 (Generalized List) +* **定义**:$LS = (a_1, a_2, ..., a_n)$,其中 $a_i$ 可以是原子或子表。 +* **重要操作**: + * **GetHead(L)**:取表头(第一个元素,可能是原子或列表)。 + * **GetTail(L)**:取表尾(**除第一个元素外剩余元素构成的表**,结果一定是一个表)。 + * *例*:$L=((a,b), c)$,Head(L)=$(a,b)$,Tail(L)=$(c)$。 + +--- + +## 第6章:树与二叉树 + +### 1. 二叉树 (Binary Tree) +* **性质**: + 1. 第 $i$ 层至多 $2^{i-1}$ 个结点。 + 2. 深度为 $k$ 至多 $2^k - 1$ 个结点。 + 3. **核心性质**:$n_0 = n_2 + 1$(叶子结点数 = 度为2的结点数 + 1)。 +* **完全二叉树 (Complete Binary Tree)**: + * 编号规则与满二叉树一一对应。 + * 数组存储时,结点 $i$ 的左孩子为 $2i$,右孩子为 $2i+1$,父节点 $\lfloor i/2 \rfloor$。 + +### 2. 遍历 (Traversal) +* **前序 (Pre)**:根 -> 左 -> 右 +* **中序 (In)**:左 -> 根 -> 右 +* **后序 (Post)**:左 -> 右 -> 根 +* **层序**:利用**队列**实现 BFS。 +* **构造**: + * 前序 + 中序 -> 唯一确定二叉树。 + * 后序 + 中序 -> 唯一确定二叉树。 + * 前序 + 后序 -> **不能**唯一确定(无法区分左右子树)。 + +### 3. 应用 +* **哈夫曼树 (Huffman Tree)**: + * **构造**:每次选取权值最小的两棵树合并,新树权值为两者之和,直到只剩一棵。 + * **WPL (带权路径长度)**:$\sum (叶子权值 \times 路径长度)$。 + * **哈夫曼编码**:前缀编码(任一字符编码都不是另一字符编码的前缀),用于数据压缩。 +* **线索二叉树**: + * 利用空闲指针域(`lchild`若空指向前驱,`rchild`若空指向后继),通过 `ltag/rtag` 标记。 + * 加快遍历速度,无需递归或栈。 + +--- + +## 第7章:图 (Graph) + +### 1. 存储结构 +* **邻接矩阵**:`AdjMatrix[i][j] = 1` 或权值。 + * 优点:易判断两点是否相连,易算度(行和列和)。 + * 缺点:稀疏图浪费空间 $O(n^2)$。 +* **邻接表**:顶点表 + 边表(链表)。 + * 优点:节省空间 $O(n+e)$。 + * 缺点:求入度麻烦(需遍历全表或使用逆邻接表)。 + +### 2. 遍历 +* **DFS (深度优先)**:类似树的先序遍历,使用**递归/栈**。 +* **BFS (广度优先)**:类似树的层序遍历,使用**队列**。最短路径特性(无权图)。 + +--- + +## 第8章:图的应用 (重难点) + +### 1. 最小生成树 (MST) +* **Prim 算法**: + * **思想**:归并点。从一个顶点开始,每次选一条连接“已选集合”和“未选集合”且权值最小的边。 + * **复杂度**:$O(n^2)$,适合**稠密图**。 +* **Kruskal 算法**: + * **思想**:归并边。将边按权值排序,从小到大选边,若不构成回路(利用并查集判断)则加入。 + * **复杂度**:$O(e \log e)$,适合**稀疏图**。 + +### 2. 最短路径 +* **Dijkstra 算法**: + * **单源最短路**。贪心策略。每次从未标记节点中选距离源点最近的节点,松弛其邻接点。 + * **限制**:边权不能为负。 + * **复杂度**:$O(n^2)$。 +* **Floyd 算法**: + * **多源最短路**。动态规划。`A[i][j] = min(A[i][j], A[i][k] + A[k][j])`。 + * **复杂度**:$O(n^3)$。 + +### 3. AOV 网与拓扑排序 +* **定义**:顶点表示活动,边表示优先关系。 +* **算法**: + 1. 选择入度为 0 的顶点输出。 + 2. 删除该顶点及其出边。 + 3. 重复直到图空或无入度为 0 的点(说明有环)。 + +### 4. AOE 网与关键路径 +* **定义**:边表示活动,边权为持续时间,顶点表示事件。 +* **关键路径**:从源点到汇点的最长路径(决定工程最短工期)。 +* **计算**: + * 事件最早发生时间 `ve`(从前向后取max)。 + * 事件最晚发生时间 `vl`(从后向前取min)。 + * 活动最早/最晚开始时间 `e` / `l`。 + * 若 `e == l`,则为关键活动。 + +--- + +## 第9章:查找 (Search) + +### 1. 动态查找树 +* **二叉排序树 (BST)**:左 < 根 < 右。中序遍历有序。插入/删除/查找平均 $O(\log n)$,最坏 $O(n)$(退化为链表)。 +* **平衡二叉树 (AVL)**: + * 任一节点左右子树高度差(平衡因子 BF)绝对值 $\le 1$。 + * **调整**: + * **LL型**:右旋(Right Rotation)。 + * **RR型**:左旋(Left Rotation)。 + * **LR型**:先左旋后右旋。 + * **RL型**:先右旋后左旋。 + +### 2. 散列 (Hashing) +* **散列函数**:`H(key)`。除留余数法 `H(key) = key % p` (p 为不大于表长的最大质数)。 +* **处理冲突**: + * **开放定址法**: + * 线性探测:`di = 1, 2, 3...` (易产生聚集/堆积现象)。 + * 二次探测:`di = 1^2, -1^2, 2^2, -2^2...`。 + * **链地址法**:相同 Hash 值的元素存入同一链表。 +* **ASL (平均查找长度)**:衡量效率指标,依赖于装填因子 $\alpha = \frac{填入元素个数}{表长}$。 + +--- + +## 第10章:排序 (Sorting) + +### 1. 算法复杂度与稳定性对比 + +| 类别 | 排序算法 | 平均时间 | 最坏时间 | 空间 | 稳定性 | 备注 | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| **插入** | **直接插入** | $O(n^2)$ | $O(n^2)$ | $O(1)$ | **稳定** | 适合基本有序/n较小 | +| | **希尔排序** | $O(n^{1.3})$ | $O(n^2)$ | $O(1)$ | 不稳定 | 增量 $d$ 逐渐减半 | +| **交换** | **冒泡排序** | $O(n^2)$ | $O(n^2)$ | $O(1)$ | **稳定** | 标志位优化 | +| | **快速排序** | $O(n \log n)$ | $O(n^2)$ | $O(\log n)$ | 不稳定 | **内排序最快**,枢轴选择关键 | +| **选择** | **简单选择** | $O(n^2)$ | $O(n^2)$ | $O(1)$ | 不稳定 | 移动次数少 | +| | **堆排序** | $O(n \log n)$ | $O(n \log n)$ | $O(1)$ | 不稳定 | 适合 Top K 问题 | +| **归并** | **归并排序** | $O(n \log n)$ | $O(n \log n)$ | $O(n)$ | **稳定** | 空间换时间,外排序基础 | +| **基数** | **基数排序** | $O(d(n+r))$ | $O(d(n+r))$ | $O(r)$ | **稳定** | 无需比较,分配+收集 | + +### 2. 核心算法说明 +* **快速排序 (Quick Sort)**: + * **Partition**:选取枢轴(pivot),将小于 pivot 的放左边,大于的放右边。 + * 最坏情况:有序或逆序(退化为冒泡)。 +* **堆排序 (Heap Sort)**: + * **建堆**:从 $\lfloor n/2 \rfloor$ 处开始向下调整 (Heapify)。 + * **排序**:交换堆顶与末尾元素,堆大小减1,重新向下调整。 + * 升序排序使用**大顶堆**。 +* **归并排序**: + * Divide (分):将数组对半切分。 + * Conquer (治):递归排序子数组。 + * Merge (合):合并两个有序数组。 + +--- +--- + +## 附录:数据结构小测涉及公式与重点总结 + +通过分析《小测1 答案》、《小测2 答案》及《小测3_题目答案》,以下是针对考试重点涉及的公式、推导及核心结论的详细总结。 + +### 1. 栈与队列 (Stack & Queue) + +#### **卡特兰数 (Catalan Number)** +* **应用场景**:$n$ 个不同元素进栈,可能的出栈序列总数。 +* **公式**: + $$C_n = \frac{1}{n+1} C_{2n}^n = \frac{(2n)!}{(n+1)!n!}$$ +* **小测案例** (小测1 第6题): + * $n=3$ 时,出栈序列数为 $C_3 = \frac{C_6^3}{4} = \frac{20}{4} = 5$ 种。 + +#### **双端队列输出序列** +* **排除法逻辑** (小测1 第8题): + * 对于输入受限或输出受限的双端队列,通常通过模拟和排除法来判断非法序列。 + * *核心技巧*:结合栈的后进先出特性与队列的先进先出特性进行模拟。 + +--- + +### 2. 数组与矩阵 (Arrays & Matrices) + +#### **三对角矩阵压缩存储** +* **定义**:元素仅分布在主对角线及上下两条对角线上。 +* **下标映射公式** (小测1 第10题): + * 题目特定映射关系:$A[1..n][1..n]$ 压缩至 $B[1..3n-2]$。 + * 给定公式推导结果:$k = 2i + j - 2$。 + * *案例验证*:$A[66][65]$ 对应 $k = 2 \times 66 + 65 - 2 = 195$。 + * *注意*:通用公式通常为 $k = 2i + j - 3$ 或类似,考试时需严格根据题目给定的数组下标起始点(如从0还是从1开始)及排列方式进行推导。 + +#### **KMP 算法 Next 数组计算** +* **推导逻辑** (小测1 第13题): + * 若 $S[j] == S[k]$ (其中 $k = next[j-1]$),则 $next[j] = k + 1$。 + * 若不等,则令 $k = next[k]$ 继续回溯比较。 + * *案例*:$S = 'aaab'$ + * $j=1, S='a', next[1]=0$ (固定) + * $j=2, S='a', S[1]==S[0]$? (前缀比较), $next[2]=1$ + * $j=3, S='a', S[2]==S[1] \rightarrow next[3]=2$ + * $j=4, S='b', S[3] \neq S[2]$, 回溯... + +--- + +### 3. 树与二叉树 (Trees) + +#### **二叉树节点性质公式** +1. **度数关系**: + * $$n_0 = n_2 + 1$$ (叶子结点数 = 度为2的结点数 + 1) + * 推导依据: + * 总节点数 $n = n_0 + n_1 + n_2$ + * 总分支数 $B = n - 1 = n_1 + 2n_2$ + * 联立消去 $n_1$,得 $n_0 = n_2 + 1$。 + * *小测陷阱* (小测2 第1题):已知总数 $n=98$,$n_1=48$,求叶子数。 + * $n_0 + 48 + n_2 = 98 \Rightarrow n_0 + n_2 = 50$ + * 代入 $n_0 = n_2 + 1 \Rightarrow 2n_2 + 1 = 50 \Rightarrow 2n_2 = 49$。 + * $n_2$ 必须为整数,故**不存在这样的树**。 + +2. **完全二叉树 (Complete Binary Tree)** + * **叶子结点数**:$$n_0 = \lceil n/2 \rceil$$ (当 $n$ 为奇数时 $n_0 = (n+1)/2$,偶数时 $n_0 = n/2$)。 + * *案例* (小测2 第3题):$n=47$ (奇数),$n_0 = (47+1)/2 = 24$。 + +3. **哈夫曼树 (Huffman Tree)** + * **特性**:只有度为0和度为2的结点,**不存在度为1的结点** ($n_1 = 0$)。 + * **节点总数公式**: + $$n = 2n_0 - 1$$ + * *推导*:$n = n_0 + n_2$,且 $n_2 = n_0 - 1 \Rightarrow n = n_0 + (n_0 - 1) = 2n_0 - 1$。 + * *小测结论* (小测2 第12题):若有 $n$ 个叶子结点(题目用 $n$ 表示 $n_0$),则总结点数为 $2n - 1$。 + +4. **森林与树的转换** + * **连通分量/树的数量计算** (小测2 第9题): + * 若森林有 $N$ 个结点,$K$ 条边,则森林中树的棵数 $T$ 为: + $$T = N - K$$ + * *推导*:每棵树 (连通分量) 的边数 = 节点数 - 1。设第 $i$ 棵树有 $v_i$ 个节点,则边数 $e_i = v_i - 1$。 + * 总边数 $K = \sum (v_i - 1) = \sum v_i - \sum 1 = N - T \Rightarrow T = N - K$。 + +--- + +### 4. 图 (Graphs) + +#### **握手定理 (Handshaking Lemma)** +* **公式**:所有顶点的度数之和等于边数的2倍。 + $$\sum_{v \in V} \deg(v) = 2|E|$$ +* **最少顶点数求解** (小测3 第2题): + * 已知:$|E|=16$ (度数和32)。 + * 已知点:3个度4,4个度3。已知度数和 $3 \times 4 + 4 \times 3 = 24$。 + * 剩余度数:$32 - 24 = 8$。 + * 约束:其余顶点度数 $<3$ (即最大为2)。 + * 目标:顶点数最少 $\rightarrow$ 剩余顶点度数尽可能大 $\rightarrow$ 设其余点度数均为2。 + * 剩余点数:$8 / 2 = 4$ 个。 + * 总顶点数:$3 + 4 + 4 = 11$ 个。 + +#### **最小生成树 (MST)** +* **唯一性判定** (小测3 第8题): + * 当无向连通图的**最小生成树不唯一**时,Prim 和 Kruskal 算法生成的结果可能不同。 + * 当最小生成树唯一时,两者结果必然相同。 + +#### **关键路径 (Critical Path)** +* **计算方法** (小测3 第11题): + * 路径长度 = 路径上所有活动(边)持续时间之和。 + * 关键路径 = 源点到汇点的**最长路径**。 + * *案例*:路径 $V_0 \rightarrow V_1 \rightarrow V_4 \rightarrow V_6 \rightarrow V_8$。 + * 长度计算:$6 + 1 + 9 + 2 = 18$。 + + + +## 排序算法深度解析 (Sorting Algorithms Deep Dive) + +本文档对常见的排序算法进行展开讲解,包含**核心思想**、**算法步骤**、**过程演示**、**复杂度分析**及**代码逻辑**。 + +--- + +### 1. 插入排序类 (Insertion Sorts) + +#### 1.1 直接插入排序 (Direct Insertion Sort) +**核心思想**: +将数组分为“已排序区间”和“未排序区间”。每次从未排序区间取出一个元素,在已排序区间中从后向前扫描,找到合适位置插入。类似于**抓扑克牌**的过程。 + +**算法步骤**: +1. 默认第 1 个元素已排序。 +2. 取出第 2 个元素 `temp`,与第 1 个比较。若 `temp < arr[1]`,则 `arr[1]` 后移,`temp` 插入开头。 +3. 重复直到所有元素归位。 + +**过程演示** (排序 `[5, 2, 4, 6, 1, 3]`): +* 初始:`[5]` | `2, 4, 6, 1, 3` +* 取 2:2 比 5 小,5 后移。 -> `[2, 5]` | `4, 6, 1, 3` +* 取 4:4 比 5 小,5 后移;4 比 2 大,停。 -> `[2, 4, 5]` | `6, 1, 3` +* ...以此类推。 + +**核心代码逻辑 (C/C++)**: +```c +void InsertSort(int A[], int n) { + int i, j, temp; + for (i = 1; i < n; i++) { // 从第2个元素开始 + if (A[i] < A[i-1]) { // 若小于前驱,需插入 + temp = A[i]; // 暂存当前元素 + for (j = i-1; j >= 0 && A[j] > temp; --j) { + A[j+1] = A[j]; // 大于temp的元素后移 + } + A[j+1] = temp; // 插入 + } + } +} +``` + +**分析**: +* **最好情况**:$O(n)$(已是有序,只需比较不移动)。 +* **最坏情况**:$O(n^2)$(逆序)。 +* **稳定性**:**稳定**(因为 `A[j] > temp` 才移动,相等时不移动)。 + +--- + +#### 1.2 希尔排序 (Shell Sort) +**核心思想**: +又称“**缩小增量排序**”。是直接插入排序的优化版。通过将数组按增量 `d` 分组,对每组进行直接插入排序,使数组“基本有序”,最后 `d=1` 时再进行一次直接插入。 + +**为什么比直接插入快?** +直接插入在基本有序时效率极高。希尔排序前期移动步长长,能快速消除逆序对;后期步长短但数组已基本有序,移动次数少。 + +**过程演示**: +数组 `[8, 9, 1, 7, 2, 3, 5, 4, 6, 0]`,$n=10$。 +1. **d=5** (分5组: `8,3`, `9,5`, `1,4`, `7,6`, `2,0`): + * 组内排序后 -> `[3, 5, 1, 6, 0, 8, 9, 4, 7, 2]` +2. **d=2** (分2组: `3,1,0,9,7`, `5,6,8,4,2`): + * 组内排序后 -> `[0, 2, 1, 4, 3, 5, 7, 6, 9, 8]` +3. **d=1** (整体直接插入): + * 微调 -> `[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]` + +**分析**: +* **复杂度**:依赖于增量序列,平均约 $O(n^{1.3})$。 +* **稳定性**:**不稳定**(相同元素可能分在不同组,跳跃式移动导致相对位置改变)。 + +--- + +### 2. 交换排序类 (Exchange Sorts) + +#### 2.1 冒泡排序 (Bubble Sort) +**核心思想**: +两两比较相邻记录,如果反序则交换,直到没有反序的记录为止。每趟遍历将最大的元素“浮”到最后(或最小的“沉”到最前)。 + +**优化点**: +设置 `flag` 变量。若某一趟遍历中**没有发生任何交换**,说明已经有序,直接结束算法。 + +**分析**: +* **最好情况**:$O(n)$(有序,第一趟 `flag` 未变直接退出)。 +* **最坏情况**:$O(n^2)$。 +* **稳定性**:**稳定**。 + +--- + +#### 2.2 快速排序 (Quick Sort) —— **最重要的排序算法** +**核心思想**: +**分治法 (Divide and Conquer)**。 +1. **选基准 (Pivot)**:通常选第一个元素。 +2. **划分 (Partition)**:将比基准小的移到左边,比基准大的移到右边。基准归位。 +3. **递归**:对左右两个子序列重复上述过程。 + +**Partition 过程详解 (双指针法)**: +设基准 `pivot = A[low]`,`low` 指向首,`high` 指向尾。 +1. **High 向左找小**:`while (low < high && A[high] >= pivot) high--;` 找到比 pivot 小的,移到 `low` 处 (`A[low] = A[high]`)。 +2. **Low 向右找大**:`while (low < high && A[low] <= pivot) low++;` 找到比 pivot 大的,移到 `high` 处 (`A[high] = A[low]`)。 +3. 重复直到 `low == high`,将 `pivot` 放入 `A[low]`。 + +**代码片段**: +```c +int Partition(int A[], int low, int high) { + int pivot = A[low]; // 选第一个为基准 + while (low < high) { + while (low < high && A[high] >= pivot) high--; + A[low] = A[high]; + while (low < high && A[low] <= pivot) low++; + A[high] = A[low]; + } + A[low] = pivot; + return low; // 返回基准位置 +} +``` + +**分析**: +* **平均复杂度**:$O(n \log n)$。 +* **最坏复杂度**:$O(n^2)$。发生在**有序**或**逆序**时,基准每次都选到最大/最小,退化为冒泡。 +* **空间复杂度**:$O(\log n)$ (递归栈的高度)。 +* **稳定性**:**不稳定**(Partition 过程中的远距离交换)。 + +--- + +### 3. 选择排序类 (Selection Sorts) + +#### 3.1 简单选择排序 (Simple Selection Sort) +**核心思想**: +第 $i$ 趟从 $A[i...n]$ 中选出最小的元素,与 $A[i]$ 交换。 + +**特点**: +* **交换次数少**:最多 $n-1$ 次(优于冒泡)。 +* **比较次数多**:固定 $\frac{n(n-1)}{2}$ 次。 +* **稳定性**:**不稳定**。 + * *例子*:`[5, 8, 5, 2, 9]`。第一趟,第一个 `5` 会和 `2` 交换,跑到第二个 `5` 后面。 + +--- + +#### 3.2 堆排序 (Heap Sort) +**核心思想**: +利用**堆**(完全二叉树)这种数据结构。 +* **大顶堆**:$A[i] \ge A[2i+1]$ 且 $A[i] \ge A[2i+2]$。用于**升序**排序。 +* **小顶堆**:用于降序排序。 + +**算法步骤**: +1. **建堆**:将无序数组构造成一个大顶堆。 + * 从最后一个非叶子结点 ($\lfloor n/2 \rfloor - 1$) 开始,从右至左,从下至上进行“下沉”调整 (`HeapAdjust` / `sift_down`)。 +2. **排序**: + * 将堆顶元素(最大值)与堆底末尾元素交换。 + * 将剩余 $n-1$ 个元素重新调整为大顶堆。 + * 重复直至堆大小为 1。 + +**下沉 (sift_down) 逻辑**: +判断节点 `k`,其左孩子 `2k+1`,右孩子 `2k+2`。 +若孩子比父节点大,则将最大的孩子与父节点交换,并继续向下追踪被交换的孩子节点。 + +**分析**: +* **复杂度**:$O(n \log n)$。建堆 $O(n)$,调整 $O(n \log n)$。 +* **优势**:在 Top K 问题(选出前 K 大)中表现极佳。 +* **稳定性**:**不稳定**。 + +--- + +### 4. 归并排序 (Merge Sort) + +**核心思想**: +**分治法**。 +1. **分**:将数组从中间切开,递归切分,直到长度为 1。 +2. **治 (Merge)**:将两个**有序**的子数组合并成一个有序数组。 + +**Merge 过程**: +需申请一个辅助数组 `B[]`。 +比较左半区 `A[i]` 和右半区 `A[j]`: +* 若 `A[i] <= A[j]`,将 `A[i]` 放入 `B`,`i++`。 +* 若 `A[i] > A[j]`,将 `A[j]` 放入 `B`,`j++`。 +* 最后将剩余元素复制进 `B`,再把 `B` 拷回 `A`。 + +**分析**: +* **复杂度**:$O(n \log n)$。 +* **空间复杂度**:$O(n)$(需要辅助数组,这是它最大的缺点)。 +* **稳定性**:**稳定**(Merge 时 `A[i] <= A[j]` 优先取左边,保证相对位置不变)。 + +--- + +### 5. 基数排序 (Radix Sort) + +**核心思想**: +**不基于比较**的排序。利用“分配”和“收集”。 +通常针对非负整数。将整数按位数切割成不同的数字,按每个位数分别比较。 + +**步骤 (LSD - Least Significant Digit)**: +1. **按个位排序**:准备 10 个桶 (0-9)。遍历数组,按个位数字放入对应桶。按顺序收集回来。 +2. **按十位排序**:基于上一步结果,按十位放入桶,再收集。 +3. ...直至最高位。 + +**分析**: +* **复杂度**:$O(d(n+r))$。 + * $d$:最大数字的位数(决定遍历几趟)。 + * $n$:元素个数。 + * $r$:基数(如十进制 r=10,决定桶的个数)。 +* **稳定性**:**稳定**(必须稳定,否则高位排序会打乱低位的顺序)。 + +--- + +### 6. 总结对比表 + +| 算法 | 平均时间 | 最好 | 最坏 | 空间 | 稳定性 | 关键词 | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| **直接插入** | $O(n^2)$ | $O(n)$ | $O(n^2)$ | $O(1)$ | **稳定** | 摸牌、越有序越快 | +| **希尔** | $O(n^{1.3})$ | - | $O(n^2)$ | $O(1)$ | 不稳定 | 增量分组 | +| **冒泡** | $O(n^2)$ | $O(n)$ | $O(n^2)$ | $O(1)$ | **稳定** | 交换、flag优化 | +| **快速** | $O(n \log n)$ | $O(n \log n)$ | $O(n^2)$ | $O(\log n)$ | 不稳定 | **Partition**、分治 | +| **简单选择** | $O(n^2)$ | $O(n^2)$ | $O(n^2)$ | $O(1)$ | 不稳定 | 选最小 | +| **堆排序** | $O(n \log n)$ | $O(n \log n)$ | $O(n \log n)$ | $O(1)$ | 不稳定 | **建堆**、下沉 | +| **归并** | $O(n \log n)$ | $O(n \log n)$ | $O(n \log n)$ | $O(n)$ | **稳定** | **合并**、空间换时间 | diff --git a/docs/sop/notes/discrete-math-notes.md b/docs/sop/notes/discrete-math-notes.md index 21c8272..ec3dd8c 100644 --- a/docs/sop/notes/discrete-math-notes.md +++ b/docs/sop/notes/discrete-math-notes.md @@ -1,603 +1,603 @@ ---- -title: 离散数学笔记 -date: 2026-01-07 12:00:00 -descriptionHTML: '离散数学学习笔记,涵盖数理逻辑、集合论与二元关系、组合数学以及图论核心知识点。' -tags: - - 离散数学 - - 笔记 -sidebar: true -readingTime: true -hidden: false -recommend: true ---- - -## 第一章:数理逻辑 - -### 1.1 命题逻辑 - -#### 1.1.1 核心概念深度解析 -- **命题**:必须是**陈述句**且具有**唯一真值**。 - - *易错点*:悖论(如"我正在说谎")不是命题;含有未定变量的句子(如"$x+1=2$")是谓词而非命题。 -- **原子命题与复合命题**: - - 原子命题:不能再分解的命题。 - - 复合命题:通过联结词组合而成。 - -#### 1.1.2 联结词与真值表 (详细版) -| 联结词 | 符号 | 英文 | 优先级 | 逻辑详解 | 常见语言表达 | -| :--- | :---: | :--- | :---: | :--- | :--- | -| **否定** | $\neg$ | NOT | 1 | 真变假,假变真 | "并不是..." | -| **合取** | $\land$ | AND | 2 | **仅当两者全真时为真** | "且", "虽然...但是...", "既...又..." | -| **析取** | $\lor$ | OR | 3 | **仅当两者全假时为假** | "或" (包含性或) | -| **蕴涵** | $\to$ | IMPLIES | 4 | **前真后假时为假,其余全真** | "若...则...", "只要...就...", "只有...才..." | -| **双蕴涵** | $\leftrightarrow$ | IFF | 5 | **同真同假时为真** | "当且仅当", "充分必要条件" | - -##### 重点难点:蕴涵关系 ($P \to Q$) 的翻译 -- **充分条件**:"只要 $P$ 就 $Q$" $\Rightarrow P \to Q$ -- **必要条件**:"只有 $Q$ 才 $P$" $\Rightarrow P \to Q$ (注意:$P$ 是 $Q$ 的充分条件,或者理解为 $\neg Q \to \neg P$) -- **除非**:"除非 $P$ 否则 $Q$" $\Rightarrow \neg P \to Q$ (即 $P \lor Q$) - -#### 1.1.3 命题公式的分类 (Classifications) -*常考题型:判断给定公式属于哪一类。* -1. **永真式 (重言式, Tautology)**: - - 在所有真值赋值下,结果均为**真** ($1$)。 - - *例*:$P \lor \neg P$ -2. **矛盾式 (永假式, Contradiction)**: - - 在所有真值赋值下,结果均为**假** ($0$)。 - - *例*:$P \land \neg P$ -3. **可满足式 (Contingency)**: - - **不是矛盾式**的公式(即至少有一种赋值为真)。 - - *注意*:永真式也是可满足式的一种,但通常指"既非永真也非永假"的公式。 - -#### 1.1.4 逻辑等值式 (Laws of Logic) -*核心:用于化简命题公式。* - -1. **双重否定律**:$\neg\neg P \Leftrightarrow P$ -2. **幂等律**:$P \lor P \Leftrightarrow P$, $P \land P \Leftrightarrow P$ -3. **交换律**:$P \lor Q \Leftrightarrow Q \lor P$, $P \land Q \Leftrightarrow Q \land P$ -4. **结合律**:$(P \lor Q) \lor R \Leftrightarrow P \lor (Q \lor R)$ -5. **分配律** (非常重要): - - $P \lor (Q \land R) \Leftrightarrow (P \lor Q) \land (P \lor R)$ (析取对合取的分配) - - $P \land (Q \lor R) \Leftrightarrow (P \land Q) \lor (P \land R)$ (合取对析取的分配) -6. **德·摩根律 (De Morgan's Laws)** (变号变词): - - $\neg(P \lor Q) \Leftrightarrow \neg P \land \neg Q$ - - $\neg(P \land Q) \Leftrightarrow \neg P \lor \neg Q$ -7. **吸收律** (合并同类项): - - $P \lor (P \land Q) \Leftrightarrow P$ - - $P \land (P \lor Q) \Leftrightarrow P$ -8. **蕴含等值式**:$P \to Q \Leftrightarrow \neg P \lor Q$ (去箭头核心公式) -9. **等价等值式**:$P \leftrightarrow Q \Leftrightarrow (P \to Q) \land (Q \to P)$ -10. **假言易位** (逆否命题):$P \to Q \Leftrightarrow \neg Q \to \neg P$ -11. **归谬律**:$(P \to Q) \land (P \to \neg Q) \Leftrightarrow \neg P$ - -#### 1.1.4 范式 (Normal Forms) - -##### 析取范式 (DNF) 与 合取范式 (CNF) -- **定义**: - - DNF:简单合取式的析取 ($\sum$)。例如:$(P \land Q) \lor (\neg P \land R)$ - - CNF:简单析取式的合取 ($\prod$)。例如:$(P \lor Q) \land (\neg P \lor R)$ -- **主范式 (Principal NF)**: - - **极小项 ($m_i$)**:包含所有变量的合取项,编码对应真值表中的行号。 - - **极大项 ($M_i$)**:包含所有变量的析取项。 - - **转换方法**: - 1. **真值表法**: - - 主析取范式:取真值表中结果为 $T$ 的行对应的极小项之和。 - - 主合取范式:取真值表中结果为 $F$ 的行对应的极大项之积。 - 2. **等值演算法**:利用双重否定、德摩根、分配律展开。 - ---- - -### 1.2 谓词逻辑 (Predicate Logic) - -#### 1.2.1 基本要素 -- **个体词**:常量 ($a, b$) 和 变量 ($x, y$)。 -- **谓词**:$P(x_1, \dots, x_n)$,表示个体之间的性质或关系。 -- **量词**: - - 全称量词 $\forall$ (For all) - - 存在量词 $\exists$ (Exists) -- **论域 (Universe)**:个体变元的取值范围。若未指定,通常指全总个体域。 - -#### 1.2.2 翻译技巧 (易错) -1. **"所有的 S 都是 P"**: - - 正确:$\forall x (S(x) \to P(x))$ - - *错误*:$\forall x (S(x) \land P(x))$ (这意味着宇宙中万物既是S也是P) -2. **"有的 S 是 P"**: - - 正确:$\exists x (S(x) \land P(x))$ - - *错误*:$\exists x (S(x) \to P(x))$ (这通常是恒真的,没有意义) - -#### 1.2.3 谓词逻辑等值式 -1. **量词否定律**: - - $\neg \forall x P(x) \Leftrightarrow \exists x \neg P(x)$ (改变量词,否定谓词) - - $\neg \exists x P(x) \Leftrightarrow \forall x \neg P(x)$ -2. **量词辖域扩展** (设 $Q$ 不含 $x$): - - $\forall x (P(x) \lor Q) \Leftrightarrow (\forall x P(x)) \lor Q$ - - $\exists x (P(x) \land Q) \Leftrightarrow (\exists x P(x)) \land Q$ -3. **量词分配律**: - - $\forall x (P(x) \land Q(x)) \Leftrightarrow \forall x P(x) \land \forall x Q(x)$ (全称对合取可分配) - - $\exists x (P(x) \lor Q(x)) \Leftrightarrow \exists x P(x) \lor \exists x Q(x)$ (存在对析取可分配) - - *注意*:$\forall$ 对 $\lor$ 不可分配,$\exists$ 对 $\land$ 不可分配! - -#### 1.2.4 前束范式 (Prenex Normal Form) -**形式**:$Q_1 x_1 Q_2 x_2 \dots Q_k x_k M$ -- 所有量词都在最左边。 -- $M$ 是不含量词的基式。 - -**化简步骤**: -1. **消去蕴涵**:利用 $A \to B \Leftrightarrow \neg A \lor B$。 -2. **否定内移**:利用德摩根律和量词否定律,将 $\neg$ 移到原子公式前。 -3. **变元改名**:确保不同量词使用不同的变量名 (如 $\forall x P(x) \lor \exists x Q(x)$ 改为 $\forall x P(x) \lor \exists y Q(y)$)。 -4. **量词左提**:利用量词辖域扩展规则将量词提到最前面。 - ---- - -### 1.3 推理理论 (Inference Theory) - -#### 1.3.1 常用推理规则 -1. **假言推理 (Modus Ponens)**: $P, P \to Q \Rightarrow Q$ -2. **拒取式 (Modus Tollens)**: $\neg Q, P \to Q \Rightarrow \neg P$ -3. **析取三段论**: $P \lor Q, \neg P \Rightarrow Q$ -4. **假言三段论**: $P \to Q, Q \to R \Rightarrow P \to R$ -5. **化简律**: $P \land Q \Rightarrow P$ -6. **附加律**: $P \Rightarrow P \lor Q$ - -#### 1.3.2 谓词推理规则 -1. **全称特指 (US)**: $\forall x P(x) \Rightarrow P(c)$ (任意 $\to$ 个体) -2. **全称推广 (UG)**: $P(x) \Rightarrow \forall x P(x)$ (任意个体 $\to$ 任意) *注意限制条件* -3. **存在特指 (ES)**: $\exists x P(x) \Rightarrow P(c)$ (存在 $\to$ 特指常量 $c$) *注意 $c$ 必须是新引入的* -4. **存在推广 (EG)**: $P(c) \Rightarrow \exists x P(x)$ (个体 $\to$ 存在) - -#### 1.3.3 证明方法 -1. **直接证明法**:从前提及其逻辑推论出发,推导出结论。 -2. **附加前提证明法 (CP规则)**: - - 若要证 $A \to B$,可将 $A$ 作为附加前提加入前提集,只需证出 $B$ 即可。 -3. **反证法 (归谬法)**: - - 将结论的否定 $\neg C$ 加入前提集,推导出矛盾 ($F$)。 - -## 第二章:集合论与二元关系 - -### 2.1 集合论 - -#### 2.1.1 基础运算 -- **并 ($\displaystyle A \cup B$)**、**交 ($\displaystyle A \cap B$)**、**补 ($\displaystyle \bar{A}$)**、**差 ($\displaystyle A - B$)**。 -- **对称差 ($\displaystyle A \oplus B$)**:$\displaystyle A \oplus B = (A - B) \cup (B - A)$。 - - 属于 A 或属于 B,但不同时属于两者。 - - 特性:$\displaystyle A \oplus A = \emptyset$, $\displaystyle A \oplus \emptyset = A$, $\displaystyle A \oplus B = B \oplus A$。 - -#### 2.1.2 集合恒等式证明技巧 -1. **子集互证法**:证明 $\displaystyle A=B$ 即证 $\displaystyle A \subseteq B$ 且 $\displaystyle B \subseteq A$。 - - 任取 $\displaystyle x \in A$,逻辑推导 $\displaystyle x \in B$。 -2. **集合演算法**:利用集合恒等式(类似逻辑等值式)进行变形。 - - $\displaystyle A - B = A \cap \bar{B}$ (最常用的变形) - - 德摩根律:$\displaystyle \overline{A \cup B} = \bar{A} \cap \bar{B}$ -3. **成员表法/特征函数法**: - - 列出元素属于各集合的所有 $\displaystyle 0/1$ 组合,验证结果是否一致。 - -#### 2.1.3 幂集与笛卡尔积 -- **幂集** $\displaystyle P(A)$:$\displaystyle A$ 的所有子集构成的集合。 - - 若 $\displaystyle |A|=n$,则 $\displaystyle |P(A)| = 2^n$。 - - *易错*:$\displaystyle \emptyset \in P(A)$, $\displaystyle A \in P(A)$。 -- **笛卡尔积** $\displaystyle A \times B$:有序对的集合。 - - $\displaystyle |A \times B| = |A| \cdot |B|$。 - - 不满足交换律:$\displaystyle A \times B \neq B \times A$ (除非 $\displaystyle A=B$ 或为空)。 - -### 2.2 二元关系 - -#### 2.2.1 关系的表示与基本性质 -关系 $\displaystyle R$ 是 $\displaystyle A \times A$ 的子集。 -- **表示法**:集合表达式、关系矩阵 $\displaystyle M_R$、关系图 $\displaystyle G_R$。 - -##### 五大基本性质 (必须熟练判断) -| 性质 | 定义 | 矩阵特征 | 图特征 | -| :--- | :--- | :--- | :--- | -| **自反性** | $\displaystyle \forall x, (x,x) \in R$ | 主对角线全 1 | 每个节点都有自环 | -| **反自反性** | $\displaystyle \forall x, (x,x) \notin R$ | 主对角线全 0 | 无自环 | -| **对称性** | $\displaystyle (x,y) \in R \to (y,x) \in R$ | 对称矩阵 ($\displaystyle M=M^T$) | 所有边双向 | -| **反对称性** | $\displaystyle (x,y) \in R \land (y,x) \in R \to x=y$ | $\displaystyle m_{ij}=1 \land i \ne j \Rightarrow m_{ji}=0$ | 无双向边 | -| **传递性** | $\displaystyle (x,y) \in R \land (y,z) \in R \to (x,z) \in R$ | $\displaystyle M^2 \le M$ (布尔乘) | 有路必达(形成捷径)| - -#### 2.2.2 关系矩阵详解 -**定义**:设 $\displaystyle A = \{a_1, a_2, \dots, a_n\}$,关系矩阵 $\displaystyle M_R$ 是一个 $\displaystyle n \times n$ 的 0-1 矩阵。 -- 若 $\displaystyle (a_i, a_j) \in R$,则 $\displaystyle m_{ij} = 1$;否则 $\displaystyle m_{ij} = 0$。 - -##### 关系运算的矩阵表示 -1. **逆关系**:$\displaystyle M_{R^{-1}} = (M_R)^T$ (转置矩阵)。 -2. **并集/交集**:$\displaystyle M_{R \cup S} = M_R \lor M_S$, $\displaystyle M_{R \cap S} = M_R \land M_S$ (对应位置逻辑运算)。 -3. **复合关系**:$\displaystyle M_{S \circ R} = M_R \cdot M_S$ (布尔矩阵乘法)。 - - *注意顺序*:$\displaystyle S \circ R$ 表示先 $\displaystyle R$ 后 $\displaystyle S$,矩阵乘法也是 $\displaystyle M_R$ 在前。 - - 布尔乘法规则:$\displaystyle c_{ij} = \bigvee_{k=1}^n (a_{ik} \land b_{kj})$。 -4. **幂运算**:$\displaystyle M_{R^n} = (M_R)^n$ (布尔乘幂)。 - -#### 2.2.3 关系性质的运算封闭性 (表 6.2) - -| 运算 | 自反性 | 反自反性 | 对称性 | 反对称性 | 传递性 | -| :--- | :---: | :---: | :---: | :---: | :---: | -| **逆关系** $\displaystyle R^{-1}$ | 是 | 是 | 是 | 是 | 是 | -| **交** $\displaystyle R \cap S$ | 是 | 是 | 是 | 是 | 是 | -| **并** $\displaystyle R \cup S$ | 是 | 是 | 是 | 否 | 否 | -| **差** $\displaystyle R - S$ | 否 | 是 | 是 | 是 | 否 | -| **复合** $\displaystyle R \circ S$ | 是 | 否 | 否 | 否 | 否 | - -> **注**:表中“是”表示该性质在运算下**一定**保持,“否”表示**不一定**保持。 - -#### 2.2.4 关系的闭包 -- **自反闭包** $\displaystyle r(R) = R \cup I_A$ (矩阵:主对角线置1) -- **对称闭包** $\displaystyle s(R) = R \cup R^{-1}$ (矩阵:$\displaystyle M \lor M^T$) -- **传递闭包** $\displaystyle t(R) = R \cup R^2 \cup \dots \cup R^n$ (连通性) - -##### Warshall 算法 (计算传递闭包的核心) -用于在计算机中高效计算 $\displaystyle t(R)$。 -- **输入**:$\displaystyle n \times n$ 关系矩阵 $\displaystyle M$。 -- **逻辑**: - ```text - for k from 1 to n: - for i from 1 to n: - for j from 1 to n: - M[i,j] = M[i,j] or (M[i,k] and M[k,j]) - ``` - *直观理解*:第 $\displaystyle k$ 轮循环尝试以节点 $\displaystyle k$ 为中转站,如果 $\displaystyle i \to k$ 且 $\displaystyle k \to j$,则建立 $\displaystyle i \to j$ 的直达路径。 - -#### 2.2.5 等价关系与划分 -- **定义**:满足 **自反、对称、传递** 的关系。 -- **等价类** $\displaystyle [x]_R$:所有与 $\displaystyle x$ 有关系 $\displaystyle R$ 的元素集合。 -- **划分**: - - 集合 $\displaystyle A$ 被划分为若干个不相交的子集,其并集为 $\displaystyle A$。 - - **定理**:等价关系与划分一一对应。等价类就是划分出的子集。 - - *例*:整数集上的模 3 同余关系,划分为 $\displaystyle \{3k\}, \{3k+1\}, \{3k+2\}$ 三类。 - -#### 2.2.6 偏序关系详解 -- **定义**:满足 **自反、反对称、传递** 的关系。符号 $\displaystyle \preceq$。 -- **相关符号**: - - $\displaystyle x \preceq y$:$\displaystyle x$ 小于等于 $\displaystyle y$ (或 $\displaystyle x$ 排在 $\displaystyle y$ 前)。 - - $\displaystyle x \prec y$:$\displaystyle x \preceq y \land x \ne y$。 - - **可比**:若 $\displaystyle x \preceq y$ 或 $\displaystyle y \preceq x$,则称 $\displaystyle x, y$ 可比。 - - **不可比**:若既不 $\displaystyle x \preceq y$ 也不 $\displaystyle y \preceq x$,则称 $\displaystyle x, y$ 不可比。 -- **覆盖关系**: - - 若 $\displaystyle x \prec y$ 且不存在 $\displaystyle z$ 使得 $\displaystyle x \prec z \prec y$,则称 $\displaystyle y$ 覆盖 $\displaystyle x$。 - - **哈斯图**即是基于覆盖关系绘制的简化图。 - -##### 哈斯图画法步骤 -1. 画出覆盖关系(即去掉所有自环和传递边)。 -2. 若 $\displaystyle y$ 覆盖 $\displaystyle x$,则将 $\displaystyle y$ 画在 $\displaystyle x$ 上方并连线。 -3. 方向默认向上,省略箭头。 - -##### 特殊元素 (重要考点) -设 $\displaystyle (A, \preceq)$ 为偏序集,$\displaystyle B \subseteq A$。 -1. **极小元**:$\displaystyle B$ 中没有比它更小的元素。$\displaystyle \neg \exists x \in B, x \prec a$。 -2. **极大元**:$\displaystyle B$ 中没有比它更大的元素。$\displaystyle \neg \exists x \in B, a \prec x$。 -3. **最小元**:$\displaystyle B$ 中所有元素都比它大。$\displaystyle \forall x \in B, a \preceq x$ (若存在则唯一)。 -4. **最大元**:$\displaystyle B$ 中所有元素都比它小。$\displaystyle \forall x \in B, x \preceq a$ (若存在则唯一)。 -5. **下界**:$\displaystyle A$ 中小于等于 $\displaystyle B$ 中所有元素的元素。$\displaystyle \forall x \in B, l \preceq x$。 -6. **上界**:$\displaystyle A$ 中大于等于 $\displaystyle B$ 中所有元素的元素。$\displaystyle \forall x \in B, x \preceq u$。 -7. **下确界 (GLB/Infimum)**:最大下界。符号 $\displaystyle \inf B$ 或 $\displaystyle \wedge B$。 -8. **上确界 (LUB/Supremum)**:最小上界。符号 $\displaystyle \sup B$ 或 $\displaystyle \lor B$。 - -##### 示例:整除关系 -设 $\displaystyle A = \{1, 2, 3, 4, 6, 12\}$,关系为整除 ($\displaystyle |$)。 -- 哈斯图层级:$\displaystyle 12$ 在顶;$\displaystyle 4, 6$ 在中;$\displaystyle 2, 3$ 在下;$\displaystyle 1$ 在底。 -- $\displaystyle 2$ 和 $\displaystyle 3$ 不可比。 -- 子集 $\displaystyle \{2, 3\}$ 的上界是 $\displaystyle 6, 12$,上确界是 $\displaystyle 6$。 -- 子集 $\displaystyle \{2, 3\}$ 的下界是 $\displaystyle 1$,下确界是 $\displaystyle 1$。 - -##### 格 -- **定义**:偏序集 $\displaystyle (L, \preceq)$ 中任意两个元素 $\displaystyle x, y$ 都有确定的上确界 ($\displaystyle x \lor y$) 和下确界 ($\displaystyle x \land y$)。 -- **性质**:格可以看作代数系统,满足交换律、结合律、吸收律。 - -### 2.3 函数 - -#### 2.3.1 函数的性质 -- **单射**: - - 定义:$\displaystyle f(a) = f(b) \Rightarrow a = b$。 - - 判别:陪域中每个元素最多被 1 个箭头指到。 -- **满射**: - - 定义:$\displaystyle \forall y \in B, \exists x \in A, f(x)=y$。 - - 判别:陪域中每个元素至少被 1 个箭头指到 (值域=陪域)。 -- **双射**:既单且满。 - - 只有双射存在逆函数 $\displaystyle f^{-1}$。 - -#### 2.3.2 复合函数 -- $\displaystyle (g \circ f)(x) = g(f(x))$。 -- **性质**: - - 若 $\displaystyle f, g$ 都是单射,则 $\displaystyle g \circ f$ 是单射。 - - 若 $\displaystyle f, g$ 都是满射,则 $\displaystyle g \circ f$ 是满射。 - - 若 $\displaystyle g \circ f$ 是单射 $\Rightarrow f$ 必为单射。 - - 若 $\displaystyle g \circ f$ 是满射 $\Rightarrow g$ 必为满射。 - -#### 2.3.3 特殊函数与算法复杂度 -1. **取整函数**: - - **向下取整 (Floor)** $\lfloor x \rfloor$:小于等于 $x$ 的最大整数。 - - **向上取整 (Ceiling)** $\lceil x \rceil$:大于等于 $x$ 的最小整数。 -2. **算法复杂度 (Big-O Notation)**: - - **定义**:设 $f, g$ 是从整数集或实数集到实数集的函数。若存在常数 $C$ 和 $k$,使得当 $x > k$ 时,$\lvert f(x) \rvert \le C \lvert g(x) \rvert$,则称 $f(x)$ 是 $O(g(x))$。 - - **常见阶**:$O(1) < O(\log n) < O(n) < O(n \log n) < O(n^2) < O(2^n) < O(n!)$。 - - **判定技巧**: - - 忽略系数:$7n^3$ 是 $O(n^3)$。 - - 只看最高次项:$n^2 + n + 1$ 是 $O(n^2)$。 - -#### 2.3.4 典型考题:等价关系的证明 -**题目**:设 $R$ 是集合 $A$ 上的等价关系,证明 $R \circ R$ 也是 $A$ 上的等价关系。 -**证明思路**: -1. **自反性**: - - $\because R$ 自反 $\therefore \forall a \in A, (a,a) \in R$。 - - 故 $(a,a) \in R \circ R$(通过中间点 $a$),即 $R \circ R$ 自反。 -2. **对称性**: - - 任取 $(x,y) \in R \circ R$,则 $\exists t \in A$ 使得 $(x,t) \in R \land (t,y) \in R$。 - - $\because R$ 对称 $\therefore (t,x) \in R \land (y,t) \in R$。 - - 交换顺序得 $(y,t) \in R \land (t,x) \in R \Rightarrow (y,x) \in R \circ R$。 -3. **传递性**: - - $\because R$ 传递,且 $R$ 是等价关系 $\therefore R \circ R = R$(等价关系的幂运算封闭性)。 - - $R$ 自身具备传递性,故 $R \circ R$ 传递。 - - *(注:若题目要求严格分布证明,需设 $(x,y) \in R^2, (y,z) \in R^2$ 推导 $(x,z) \in R^2$)*。 - -## 第三章:组合数学 - -### 3.0 基础数论概念 (补充) -- **完全数 (Perfect Number)**: - - 一个正整数等于其所有**真因子**(即除了自身以外的约数)之和。 - - *例*:$6 = 1 + 2 + 3$;$28 = 1 + 2 + 4 + 7 + 14$。 - - *考点*:判断给定数字是否为完全数,或计算其真因子之和。 - -### 3.1 基础计数原理 - -#### 3.1.1 加法与乘法原理 -- **加法原理 (分类)**:$S = S_1 ∪ S_2 …$ (互不相交),则 $|S| = |S_1| + |S_2| …$ -- **乘法原理 (分步)**:步骤 1 有 $n_1$ 种,步骤 2 有 $n_2$ 种... 则总数为 $n_1 \times n_2 …$ - -#### 3.1.2 排列与组合 (Notation: $C_n^r, P_n^r$) -| 模型 | 公式 | 典型场景 | -| :--- | :--- | :--- | -| **排列 (有序)** | $P_n^r = \frac{n!}{(n-r)!}$ | $n$ 人选 $r$ 人排队拍照 | -| **组合 (无序)** | $C_n^r = \frac{n!}{r!(n-r)!}$ | $n$ 人选 $r$ 人组队 | -| **可重排列** | $n^r$ | $r$ 位密码,每位 $n$ 种选择 | -| **可重组合** | $C_{n+r-1}^r$ | $n$ 种口味冰淇淋选 $r$ 球 (隔板法) | - -#### 3.1.3 组合恒等式 -1. **对称性**:$C_n^r = C_n^{n-r}$ -2. **帕斯卡公式**:$C_n^k = C_{n-1}^k + C_{n-1}^{k-1}$ - - *组合意义*:选 $k$ 人,要么包含特定人 A ($C_{n-1}^{k-1}$),要么不包含 A ($C_{n-1}^k$)。 -3. **二项式定理**:$(x+y)^n = \sum_{k=0}^n C_n^k x^{n-k} y^k$ - - 推论:$\sum_{k=0}^n C_n^k = 2^n$ (所有子集个数) - - 推论:$\sum_{k=0}^n (-1)^k C_n^k = 0$ (奇数个元素的子集数 = 偶数个元素的子集数) -4. **范德蒙恒等式**:$C_{m+n}^r = \sum_{k=0}^r C_m^{k} C_n^{r-k}$ - ---- - -### 3.2 高级计数方法 - -#### 3.2.1 鸽巢原理 (Pigeonhole Principle) -- **原理**:$N$ 个物体放入 $k$ 个盒子,必有一个盒子至少有 $\lceil N/k \rceil$ 个物体。 -- **应用技巧**:准确定义“鸽子”(物体)和“巢”(分类标准)。 - - *例*:任意 13 人中必有 2 人生肖相同 ($13/12 \to 2$)。 - -#### 3.2.2 容斥原理 (Inclusion-Exclusion) -求 $|A_1 ∪ A_2 ∪ … ∪ A_n|$: -- **公式**:$\sum |A_i| - \sum |A_i ∩ A_j| + \sum |A_i ∩ A_j ∩ A_k| - …$ -- **错排问题 ($D_n$)**:$n$ 封信全部装错信封的方法数。 - - $D_n = n!(1 - \frac{1}{1!} + \frac{1}{2!} - … + (-1)^n \frac{1}{n!})$ - - 递推式:$D_n = (n-1)(D_{n-1} + D_{n-2})$ - -#### 3.2.3 球盒模型 (Twelvefold Way 概览) -将 $n$ 个球放入 $k$ 个盒子: - -| 球 (Label) | 盒子 (Label) | 限制 | 方案数 | -| :--- | :--- | :--- | :--- | -| 不同 | 不同 | 无 | $k^n$ | -| 不同 | 不同 | $\le 1$ | $P_k^n$ | -| **相同** | **不同** | 无 | $C_{n+k-1}^n$ (隔板法) | -| **相同** | **不同** | $\ge 1$ | $C_{n-1}^{k-1}$ (先各放1个) | -| 不同 | 相同 | 无 | $S_2(n,k)$ (第二类斯特林数) | - ---- - -### 3.3 递推关系 (Recurrence Relations) - -#### 3.3.1 线性常系数齐次递推关系 -形式:$a_n + c_1 a_{n-1} + … + c_k a_{n-k} = 0$ -**求解步骤**: -1. 写出**特征方程**:$r^k + c_1 r^{k-1} + … + c_k = 0$。 -2. 求特征根 $r_1, r_2, …$。 -3. 写出通解结构: - - **无重根**:$a_n = A_1 r_1^n + A_2 r_2^n + …$ - - **有重根** (如 $r_1$ 为 $m$ 重根):$a_n = (A_1 + A_2 n + … + A_m n^{m-1}) r_1^n + …$ -4. 代入初值求解常数 $A_i$。 - -#### 3.3.2 生成函数 (Generating Functions) -- **定义**:$G(x) = \sum_{n=0}^\infty a_n x^n$。 -- **应用场景**: - - 求解组合数:如 $(1+x)^n$ 的系数。 - - 求解不定方程 $x_1 + x_2 + x_3 = k$ 的非负整数解个数。 - - 构造多项式 $(1+x+x^2+…)^3$,求 $x^k$ 系数。 - ---- - -### 3.4 典型考题:不定方程解计数 -**题目**:求 $x_1 + x_2 + x_3 = 15$ 的整数解个数,满足 $x_1 ≥ 1, 0 ≤ x_2 ≤ 5, x_3 ≥ 0$。 -**解题思路**: -1. **换元消下界**:令 $y_1 = x_1 - 1 ≥ 0$。 - - 原方程变为 $(y_1+1) + x_2 + x_3 = 15 ⇒ y_1 + x_2 + x_3 = 14$。 -2. **全集计算**:无上限限制时的非负整数解。 - - $\displaystyle N = C_{14+3-1}^{3-1} = C_{16}^2 = 120$。 -3. **容斥处理上界**: - - 坏条件 $P_1$:$x_2 ≥ 6$ (即原题 $x_2 > 5$)。 - - 在坏条件 $P_1$ 下,令 $z_2 = x_2 - 6 ≥ 0$。 - - 方程变为 $y_1 + (z_2+6) + x_3 = 14 ⇒ y_1 + z_2 + x_3 = 8$。 - - $|P_1| = C_{8+3-1}^2 = C_{10}^2 = 45$。 -4. **最终结果**:$Ans = N - |P_1| = 120 - 45 = 75$。 - ---- - -### 3.5 典型考题:常系数齐次线性递推关系求解 -**题目**:求解递推关系 $a_n = 7a_{n-1} - 16a_{n-2} + 12a_{n-3}$,初始条件为 $a_0 = 0, a_1 = 4, a_2 = 18$。 -**解题步骤**: - -1. **构造特征方程** - 将递推式移项得 $a_n - 7a_{n-1} + 16a_{n-2} - 12a_{n-3} = 0$。 - 对应的特征方程为: - $r^3 - 7r^2 + 16r - 12 = 0$ - -2. **求解特征根** - 观察系数,尝试代入 $r=2$:$8 - 28 + 32 - 12 = 0$,故 $(r-2)$ 是因子。 - 多项式除法分解得: - $(r-2)(r^2 - 5r + 6) = 0$ - $(r-2)(r-2)(r-3) = 0$ - 解得特征根:$r_1 = 2$ (二重根),$r_2 = 3$ (单根)。 - -3. **写出通解结构** - 对于二重根 $2$ 和单根 $3$,通解形式为: - $a_n = (C_1 + C_2 n) \cdot 2^n + C_3 \cdot 3^n$ - -4. **代入初始条件求解常数** - - 当 $n=0$ 时:$C_1 + C_3 = 0 \implies C_3 = -C_1$ - - 当 $n=1$ 时:$(C_1 + C_2) \cdot 2 + 3C_3 = 4$ - - 当 $n=2$ 时:$(C_1 + 2C_2) \cdot 4 + 9C_3 = 18$ - - 将 $C_3 = -C_1$ 代入后两式: - - $2C_1 + 2C_2 - 3C_1 = 4 \implies -C_1 + 2C_2 = 4$ - - $4C_1 + 8C_2 - 9C_1 = 18 \implies -5C_1 + 8C_2 = 18$ - - 联立求解: - 由第一式得 $C_1 = 2C_2 - 4$,代入第二式: - $-5(2C_2 - 4) + 8C_2 = 18$ - $-10C_2 + 20 + 8C_2 = 18$ - $-2C_2 = -2 \implies C_2 = 1$ - 回代得 $C_1 = 2(1) - 4 = -2$ - $C_3 = -(-2) = 2$ - -5. **最终解** - $a_n = (-2 + n) \cdot 2^n + 2 \cdot 3^n$ - 或整理为: - $a_n = (n-2)2^n + 2 \cdot 3^n$ - -## 第四章:图论 - -### 4.1 图的基本概念 - -#### 4.1.1 定义与术语 -- **图 $G=(V, E)$**:$V$ 为顶点集,$E$ 为边集。 -- **度 (Degree)**:$\deg(v)$ 为关联的边数 (自环算 2 度)。 - - **握手定理**:$\sum_{v \in V} \deg(v) = 2|E|$。 - - **推论**:奇度顶点的个数必为偶数。 -- **子图**:$V' \subseteq V, E' \subseteq E$。 -- **补图**:$\bar{G}$,顶点相同,边互补 (完全图 $K_n$ 减去原图的边)。 - -#### 4.1.2 图的连通性 -- **路径 (Path)**:$v_0, e_1, v_1, \dots, v_k$。 -- **简单路径**:不经过重复边。 -- **基本路径 (Elementary Path)**:不经过重复顶点。 -- **连通图**:任意两点间均有路径。 -- **割点 (Cut Vertex)**:删去该点及关联边,图分量增加。 -- **割边 (Bridge)**:删去该边,图分量增加。 -- **连通度**: - - **点连通度 $\kappa(G)$**:使图不连通所需删除的最少顶点数。 - - **边连通度 $\lambda(G)$**:使图不连通所需删除的最少边数。 - - **不等式关系**:$\kappa(G) \le \lambda(G) \le \delta(G)$ (最小度)。 - -#### 4.1.3 图的矩阵表示 -- **邻接矩阵 $A(G)$**:$n \times n$ 矩阵,$a_{ij}$ 表示 $v_i, v_j$ 间的边数。 - - 性质:$A^k$ 的元素 $a_{ij}^{(k)}$ 表示从 $v_i$ 到 $v_j$ 长度为 $k$ 的路径条数。 -- **关联矩阵 $M(G)$**:顶点与边的关系。 - -#### 4.1.4 图的同构 (Isomorphism) -判断 $G_1 \cong G_2$ 的必要条件 (若不满足则必不同构): -1. 顶点数、边数相同。 -2. 度数列相同 (将所有点度数排序后一致)。 -3. 连通分量数相同。 -4. 对应长度的回路数相同 (如都有或都没有三角形)。 -*充分性证明通常需要构造双射函数。* - -### 4.2 特殊图类 - -#### 4.2.1 欧拉图 (Euler) 与 哈密顿图 (Hamilton) -| 特性 | 欧拉图 (Euler) | 哈密顿图 (Hamilton) | -| :--- | :--- | :--- | -| **定义** | 经过**每条边**恰好一次的回路 | 经过**每个顶点**恰好一次的回路 | -| **判定(充要)** | 连通 + **所有点度为偶数** | 无简单充要条件 | -| **判定(充分)** | - | (Dirac) $n \ge 3, \forall v, \deg(v) \ge n/2$ | -| **半图(路径)** | 连通 + **恰有 0 或 2 个奇度点** | - | -**哈密顿图常用判定方式 (充分/必要)**: -- **必要条件**:$\delta(G) \ge 2$;且无割点 (2-连通)。 -- **Dirac 定理 (充分)**:$n \ge 3, \delta(G) \ge n/2$。 -- **Ore 定理 (充分)**:$n \ge 3$ 且任意非邻接顶点 $u,v$ 满足 $\deg(u)+\deg(v) \ge n$。 - -#### 4.2.2 树 (Trees) -- **定义**:连通且无回路的无向图。 -- **等价性质**: - 1. 无回路且 $E = V - 1$。 - 2. 连通且 $E = V - 1$。 - 3. 任意两点间存在**唯一**路径。 -- **度数和**:$\sum_{v \in V} \deg(v) = 2E = 2(V-1)$。 -- **叶子与内部点关系**:设 $L$ 为叶子数,则 $L = 2 + \sum_{\deg(v)\ge 2}(\deg(v) - 2)$。 -- **树中心 (Center)**: - - 反复删除所有叶子,最终剩下 1 个或 2 个顶点,这些顶点即中心。 - - 等价表述:中心是到其他顶点最大距离最小的顶点(们)。 -- **二叉树常用关系**: - - 满二叉树:若内部结点数为 $I$,叶子数为 $L$,则 $L = I + 1$。 - - 完全二叉树:$n$ 个结点时高度 $h = \lfloor \log_2 n \rfloor + 1$。 -- **最小生成树 (MST) 算法**: - - **Kruskal** (加边法):按权值排序,从小到大选边,不构成回路就加入。 - - **Prim** (加点法):从任意点开始,每次选离当前生成树集合最近的点加入。 - -#### 4.2.3 平面图 (Planar Graphs) -- **欧拉公式**:$V - E + R = 2$ ($R$ 为面数,包含无限面)。 -- **定理**:连通简单平面图 ($V \ge 3$) 满足 $E \le 3V - 6$。 - - **证明要点**:每个面至少 3 条边,故 $3R \le 2E$,与欧拉公式联立得 $E \le 3V - 6$。 - - **性质**:简单平面图 ($V \ge 3$) 满足 $E \le 3V - 6$。 - - **重要证明:存在度数 $\le 5$ 的顶点** - - 假设所有顶点度数 $\deg(v) \ge 6$。 - - 由握手定理:$2E = \sum \deg(v) \ge 6V \Rightarrow E \ge 3V$。 - - 这与平面图性质 $E \le 3V - 6$ 矛盾。 - - 故必然存在 $\deg(v) \le 5$ 的顶点。 - - 推论:$K_5$ ($E=10, 3V-6=9$) 不是平面图。 - - 推论:$K_{3,3}$ ($E=9, 3V-6=12$, 但它是二分图无三角形,需用 $E \le 2V-4$, $9 \not\le 8$) 不是平面图。 -- **常用等价与应用**: - - 连通简单平面图:$E \le 3V - 6 \iff V \ge (E+6)/3$。 - - 平均度:$\overline{d} = 2E/V < 6$,因此必存在度 $\le 5$ 的顶点。 - - 判否:若某简单图满足 $E > 3V - 6$,则必非平面图。 - - 若无三角形 (如二分图),改用 $E \le 2V - 4$。 -- **库拉图斯基定理 (Kuratowski)**:图是平面图 $\iff$ 不含同胚于 $K_5$ 或 $K_{3,3}$ 的子图。 - -#### 4.2.4 二分图 (Bipartite Graphs) -- **定义**:顶点集可划分为 $X, Y$,且所有边都在 $X$ 与 $Y$ 之间。 -- **判定**:图是二分图 $\iff$ 图中**没有奇数长度的回路**。 -- **完全二分图**:$K_{m,n}$,$|X|=m, |Y|=n$,边数 $E = mn$。 -- **度数与边数**:$\sum_{x \in X}\deg(x)=\sum_{y \in Y}\deg(y)=|E|$。 -- **平面图推论**:连通简单二分平面图 ($V \ge 3$) 满足 $E \le 2V - 4$。 -- **二染色判定 (BFS/DFS)**: - 1. 对每个连通分量,任选起点染色为 0。 - 2. 进行 BFS/DFS,对每条边 $(u,v)$ 要求 $color[u] \ne color[v]$。 - 3. 若遇到冲突 (已染且相同) 则非二分图;无冲突则是二分图。 -- **匹配**:Hall 定理 (相异代表系)。 - -### 4.3 核心算法逻辑 - -#### 4.3.1 最短路径 (Dijkstra) -*适用于非负权图。* -1. 初始化:$S=\{start\}$, $dist[start]=0$, 其他无穷大。 -2. 循环: - - 在 $V-S$ 中找 $dist$ 最小的点 $u$。 - - 加入 $S$。 - - 松弛 (Relax) $u$ 的所有邻居 $v$:若 $dist[u] + w(u,v) < dist[v]$,则更新。 - -#### 4.3.2 图着色 (Graph Coloring) -- **点色数 $\chi(G)$**:相邻顶点不同色所需的最少颜色数。 -- **布鲁克定理 (Brooks)**:若 $G$ 不是奇环也不是完全图,则 $\chi(G) \le \Delta(G)$ (最大度)。 -- **平面图四色定理**:平面图 $\chi(G) \le 4$。 -- **色多项式 $P_k(G)$**:用 $k$ 种颜色染色的方案数。 - - 递推公式:$P_k(G) = P_k(G-e) - P_k(G \cdot e)$ - - $G-e$:删边。 - - $G \cdot e$:收缩边 (合并端点)。 - -#### 4.3.3 最优二叉树 (Huffman Coding) -*常考题型:给定一组权值,构造哈夫曼树并计算带权路径长度 (WPL)。* - -1. **算法步骤**: - - **初始化**:将所有权值看作独立的单节点树森林 $F = \{T_1, T_2, \dots\}$。 - - **循环**: - 1. 在 $F$ 中选出**根节点权值最小**的两棵树 $T_1, T_2$。 - 2. 构造新树:根权值为 $W(T_1) + W(T_2)$,左右子树分别为 $T_1, T_2$。 - 3. 从 $F$ 中删除 $T_1, T_2$,加入新树。 - 4. 重复直到 $F$ 中只剩一棵树。 -2. **带权路径长度 (WPL)**: - - $WPL = \sum_{i=1}^n w_i \times l_i$ - - $w_i$:第 $i$ 个叶子的权值。 - - $l_i$:第 $i$ 个叶子到根的路径长度(边数)。 - - *简便算法*:WPL = 所有非叶子节点的权值之和。 - +--- +title: 离散数学笔记 +date: 2026-01-07 12:00:00 +descriptionHTML: '离散数学学习笔记,涵盖数理逻辑、集合论与二元关系、组合数学以及图论核心知识点。' +tags: + - 离散数学 + - 笔记 +sidebar: true +readingTime: true +hidden: false +recommend: true +--- + +## 第一章:数理逻辑 + +### 1.1 命题逻辑 + +#### 1.1.1 核心概念深度解析 +- **命题**:必须是**陈述句**且具有**唯一真值**。 + - *易错点*:悖论(如"我正在说谎")不是命题;含有未定变量的句子(如"$x+1=2$")是谓词而非命题。 +- **原子命题与复合命题**: + - 原子命题:不能再分解的命题。 + - 复合命题:通过联结词组合而成。 + +#### 1.1.2 联结词与真值表 (详细版) +| 联结词 | 符号 | 英文 | 优先级 | 逻辑详解 | 常见语言表达 | +| :--- | :---: | :--- | :---: | :--- | :--- | +| **否定** | $\neg$ | NOT | 1 | 真变假,假变真 | "并不是..." | +| **合取** | $\land$ | AND | 2 | **仅当两者全真时为真** | "且", "虽然...但是...", "既...又..." | +| **析取** | $\lor$ | OR | 3 | **仅当两者全假时为假** | "或" (包含性或) | +| **蕴涵** | $\to$ | IMPLIES | 4 | **前真后假时为假,其余全真** | "若...则...", "只要...就...", "只有...才..." | +| **双蕴涵** | $\leftrightarrow$ | IFF | 5 | **同真同假时为真** | "当且仅当", "充分必要条件" | + +##### 重点难点:蕴涵关系 ($P \to Q$) 的翻译 +- **充分条件**:"只要 $P$ 就 $Q$" $\Rightarrow P \to Q$ +- **必要条件**:"只有 $Q$ 才 $P$" $\Rightarrow P \to Q$ (注意:$P$ 是 $Q$ 的充分条件,或者理解为 $\neg Q \to \neg P$) +- **除非**:"除非 $P$ 否则 $Q$" $\Rightarrow \neg P \to Q$ (即 $P \lor Q$) + +#### 1.1.3 命题公式的分类 (Classifications) +*常考题型:判断给定公式属于哪一类。* +1. **永真式 (重言式, Tautology)**: + - 在所有真值赋值下,结果均为**真** ($1$)。 + - *例*:$P \lor \neg P$ +2. **矛盾式 (永假式, Contradiction)**: + - 在所有真值赋值下,结果均为**假** ($0$)。 + - *例*:$P \land \neg P$ +3. **可满足式 (Contingency)**: + - **不是矛盾式**的公式(即至少有一种赋值为真)。 + - *注意*:永真式也是可满足式的一种,但通常指"既非永真也非永假"的公式。 + +#### 1.1.4 逻辑等值式 (Laws of Logic) +*核心:用于化简命题公式。* + +1. **双重否定律**:$\neg\neg P \Leftrightarrow P$ +2. **幂等律**:$P \lor P \Leftrightarrow P$, $P \land P \Leftrightarrow P$ +3. **交换律**:$P \lor Q \Leftrightarrow Q \lor P$, $P \land Q \Leftrightarrow Q \land P$ +4. **结合律**:$(P \lor Q) \lor R \Leftrightarrow P \lor (Q \lor R)$ +5. **分配律** (非常重要): + - $P \lor (Q \land R) \Leftrightarrow (P \lor Q) \land (P \lor R)$ (析取对合取的分配) + - $P \land (Q \lor R) \Leftrightarrow (P \land Q) \lor (P \land R)$ (合取对析取的分配) +6. **德·摩根律 (De Morgan's Laws)** (变号变词): + - $\neg(P \lor Q) \Leftrightarrow \neg P \land \neg Q$ + - $\neg(P \land Q) \Leftrightarrow \neg P \lor \neg Q$ +7. **吸收律** (合并同类项): + - $P \lor (P \land Q) \Leftrightarrow P$ + - $P \land (P \lor Q) \Leftrightarrow P$ +8. **蕴含等值式**:$P \to Q \Leftrightarrow \neg P \lor Q$ (去箭头核心公式) +9. **等价等值式**:$P \leftrightarrow Q \Leftrightarrow (P \to Q) \land (Q \to P)$ +10. **假言易位** (逆否命题):$P \to Q \Leftrightarrow \neg Q \to \neg P$ +11. **归谬律**:$(P \to Q) \land (P \to \neg Q) \Leftrightarrow \neg P$ + +#### 1.1.4 范式 (Normal Forms) + +##### 析取范式 (DNF) 与 合取范式 (CNF) +- **定义**: + - DNF:简单合取式的析取 ($\sum$)。例如:$(P \land Q) \lor (\neg P \land R)$ + - CNF:简单析取式的合取 ($\prod$)。例如:$(P \lor Q) \land (\neg P \lor R)$ +- **主范式 (Principal NF)**: + - **极小项 ($m_i$)**:包含所有变量的合取项,编码对应真值表中的行号。 + - **极大项 ($M_i$)**:包含所有变量的析取项。 + - **转换方法**: + 1. **真值表法**: + - 主析取范式:取真值表中结果为 $T$ 的行对应的极小项之和。 + - 主合取范式:取真值表中结果为 $F$ 的行对应的极大项之积。 + 2. **等值演算法**:利用双重否定、德摩根、分配律展开。 + +--- + +### 1.2 谓词逻辑 (Predicate Logic) + +#### 1.2.1 基本要素 +- **个体词**:常量 ($a, b$) 和 变量 ($x, y$)。 +- **谓词**:$P(x_1, \dots, x_n)$,表示个体之间的性质或关系。 +- **量词**: + - 全称量词 $\forall$ (For all) + - 存在量词 $\exists$ (Exists) +- **论域 (Universe)**:个体变元的取值范围。若未指定,通常指全总个体域。 + +#### 1.2.2 翻译技巧 (易错) +1. **"所有的 S 都是 P"**: + - 正确:$\forall x (S(x) \to P(x))$ + - *错误*:$\forall x (S(x) \land P(x))$ (这意味着宇宙中万物既是S也是P) +2. **"有的 S 是 P"**: + - 正确:$\exists x (S(x) \land P(x))$ + - *错误*:$\exists x (S(x) \to P(x))$ (这通常是恒真的,没有意义) + +#### 1.2.3 谓词逻辑等值式 +1. **量词否定律**: + - $\neg \forall x P(x) \Leftrightarrow \exists x \neg P(x)$ (改变量词,否定谓词) + - $\neg \exists x P(x) \Leftrightarrow \forall x \neg P(x)$ +2. **量词辖域扩展** (设 $Q$ 不含 $x$): + - $\forall x (P(x) \lor Q) \Leftrightarrow (\forall x P(x)) \lor Q$ + - $\exists x (P(x) \land Q) \Leftrightarrow (\exists x P(x)) \land Q$ +3. **量词分配律**: + - $\forall x (P(x) \land Q(x)) \Leftrightarrow \forall x P(x) \land \forall x Q(x)$ (全称对合取可分配) + - $\exists x (P(x) \lor Q(x)) \Leftrightarrow \exists x P(x) \lor \exists x Q(x)$ (存在对析取可分配) + - *注意*:$\forall$ 对 $\lor$ 不可分配,$\exists$ 对 $\land$ 不可分配! + +#### 1.2.4 前束范式 (Prenex Normal Form) +**形式**:$Q_1 x_1 Q_2 x_2 \dots Q_k x_k M$ +- 所有量词都在最左边。 +- $M$ 是不含量词的基式。 + +**化简步骤**: +1. **消去蕴涵**:利用 $A \to B \Leftrightarrow \neg A \lor B$。 +2. **否定内移**:利用德摩根律和量词否定律,将 $\neg$ 移到原子公式前。 +3. **变元改名**:确保不同量词使用不同的变量名 (如 $\forall x P(x) \lor \exists x Q(x)$ 改为 $\forall x P(x) \lor \exists y Q(y)$)。 +4. **量词左提**:利用量词辖域扩展规则将量词提到最前面。 + +--- + +### 1.3 推理理论 (Inference Theory) + +#### 1.3.1 常用推理规则 +1. **假言推理 (Modus Ponens)**: $P, P \to Q \Rightarrow Q$ +2. **拒取式 (Modus Tollens)**: $\neg Q, P \to Q \Rightarrow \neg P$ +3. **析取三段论**: $P \lor Q, \neg P \Rightarrow Q$ +4. **假言三段论**: $P \to Q, Q \to R \Rightarrow P \to R$ +5. **化简律**: $P \land Q \Rightarrow P$ +6. **附加律**: $P \Rightarrow P \lor Q$ + +#### 1.3.2 谓词推理规则 +1. **全称特指 (US)**: $\forall x P(x) \Rightarrow P(c)$ (任意 $\to$ 个体) +2. **全称推广 (UG)**: $P(x) \Rightarrow \forall x P(x)$ (任意个体 $\to$ 任意) *注意限制条件* +3. **存在特指 (ES)**: $\exists x P(x) \Rightarrow P(c)$ (存在 $\to$ 特指常量 $c$) *注意 $c$ 必须是新引入的* +4. **存在推广 (EG)**: $P(c) \Rightarrow \exists x P(x)$ (个体 $\to$ 存在) + +#### 1.3.3 证明方法 +1. **直接证明法**:从前提及其逻辑推论出发,推导出结论。 +2. **附加前提证明法 (CP规则)**: + - 若要证 $A \to B$,可将 $A$ 作为附加前提加入前提集,只需证出 $B$ 即可。 +3. **反证法 (归谬法)**: + - 将结论的否定 $\neg C$ 加入前提集,推导出矛盾 ($F$)。 + +## 第二章:集合论与二元关系 + +### 2.1 集合论 + +#### 2.1.1 基础运算 +- **并 ($\displaystyle A \cup B$)**、**交 ($\displaystyle A \cap B$)**、**补 ($\displaystyle \bar{A}$)**、**差 ($\displaystyle A - B$)**。 +- **对称差 ($\displaystyle A \oplus B$)**:$\displaystyle A \oplus B = (A - B) \cup (B - A)$。 + - 属于 A 或属于 B,但不同时属于两者。 + - 特性:$\displaystyle A \oplus A = \emptyset$, $\displaystyle A \oplus \emptyset = A$, $\displaystyle A \oplus B = B \oplus A$。 + +#### 2.1.2 集合恒等式证明技巧 +1. **子集互证法**:证明 $\displaystyle A=B$ 即证 $\displaystyle A \subseteq B$ 且 $\displaystyle B \subseteq A$。 + - 任取 $\displaystyle x \in A$,逻辑推导 $\displaystyle x \in B$。 +2. **集合演算法**:利用集合恒等式(类似逻辑等值式)进行变形。 + - $\displaystyle A - B = A \cap \bar{B}$ (最常用的变形) + - 德摩根律:$\displaystyle \overline{A \cup B} = \bar{A} \cap \bar{B}$ +3. **成员表法/特征函数法**: + - 列出元素属于各集合的所有 $\displaystyle 0/1$ 组合,验证结果是否一致。 + +#### 2.1.3 幂集与笛卡尔积 +- **幂集** $\displaystyle P(A)$:$\displaystyle A$ 的所有子集构成的集合。 + - 若 $\displaystyle |A|=n$,则 $\displaystyle |P(A)| = 2^n$。 + - *易错*:$\displaystyle \emptyset \in P(A)$, $\displaystyle A \in P(A)$。 +- **笛卡尔积** $\displaystyle A \times B$:有序对的集合。 + - $\displaystyle |A \times B| = |A| \cdot |B|$。 + - 不满足交换律:$\displaystyle A \times B \neq B \times A$ (除非 $\displaystyle A=B$ 或为空)。 + +### 2.2 二元关系 + +#### 2.2.1 关系的表示与基本性质 +关系 $\displaystyle R$ 是 $\displaystyle A \times A$ 的子集。 +- **表示法**:集合表达式、关系矩阵 $\displaystyle M_R$、关系图 $\displaystyle G_R$。 + +##### 五大基本性质 (必须熟练判断) +| 性质 | 定义 | 矩阵特征 | 图特征 | +| :--- | :--- | :--- | :--- | +| **自反性** | $\displaystyle \forall x, (x,x) \in R$ | 主对角线全 1 | 每个节点都有自环 | +| **反自反性** | $\displaystyle \forall x, (x,x) \notin R$ | 主对角线全 0 | 无自环 | +| **对称性** | $\displaystyle (x,y) \in R \to (y,x) \in R$ | 对称矩阵 ($\displaystyle M=M^T$) | 所有边双向 | +| **反对称性** | $\displaystyle (x,y) \in R \land (y,x) \in R \to x=y$ | $\displaystyle m_{ij}=1 \land i \ne j \Rightarrow m_{ji}=0$ | 无双向边 | +| **传递性** | $\displaystyle (x,y) \in R \land (y,z) \in R \to (x,z) \in R$ | $\displaystyle M^2 \le M$ (布尔乘) | 有路必达(形成捷径)| + +#### 2.2.2 关系矩阵详解 +**定义**:设 $\displaystyle A = \{a_1, a_2, \dots, a_n\}$,关系矩阵 $\displaystyle M_R$ 是一个 $\displaystyle n \times n$ 的 0-1 矩阵。 +- 若 $\displaystyle (a_i, a_j) \in R$,则 $\displaystyle m_{ij} = 1$;否则 $\displaystyle m_{ij} = 0$。 + +##### 关系运算的矩阵表示 +1. **逆关系**:$\displaystyle M_{R^{-1}} = (M_R)^T$ (转置矩阵)。 +2. **并集/交集**:$\displaystyle M_{R \cup S} = M_R \lor M_S$, $\displaystyle M_{R \cap S} = M_R \land M_S$ (对应位置逻辑运算)。 +3. **复合关系**:$\displaystyle M_{S \circ R} = M_R \cdot M_S$ (布尔矩阵乘法)。 + - *注意顺序*:$\displaystyle S \circ R$ 表示先 $\displaystyle R$ 后 $\displaystyle S$,矩阵乘法也是 $\displaystyle M_R$ 在前。 + - 布尔乘法规则:$\displaystyle c_{ij} = \bigvee_{k=1}^n (a_{ik} \land b_{kj})$。 +4. **幂运算**:$\displaystyle M_{R^n} = (M_R)^n$ (布尔乘幂)。 + +#### 2.2.3 关系性质的运算封闭性 (表 6.2) + +| 运算 | 自反性 | 反自反性 | 对称性 | 反对称性 | 传递性 | +| :--- | :---: | :---: | :---: | :---: | :---: | +| **逆关系** $\displaystyle R^{-1}$ | 是 | 是 | 是 | 是 | 是 | +| **交** $\displaystyle R \cap S$ | 是 | 是 | 是 | 是 | 是 | +| **并** $\displaystyle R \cup S$ | 是 | 是 | 是 | 否 | 否 | +| **差** $\displaystyle R - S$ | 否 | 是 | 是 | 是 | 否 | +| **复合** $\displaystyle R \circ S$ | 是 | 否 | 否 | 否 | 否 | + +> **注**:表中“是”表示该性质在运算下**一定**保持,“否”表示**不一定**保持。 + +#### 2.2.4 关系的闭包 +- **自反闭包** $\displaystyle r(R) = R \cup I_A$ (矩阵:主对角线置1) +- **对称闭包** $\displaystyle s(R) = R \cup R^{-1}$ (矩阵:$\displaystyle M \lor M^T$) +- **传递闭包** $\displaystyle t(R) = R \cup R^2 \cup \dots \cup R^n$ (连通性) + +##### Warshall 算法 (计算传递闭包的核心) +用于在计算机中高效计算 $\displaystyle t(R)$。 +- **输入**:$\displaystyle n \times n$ 关系矩阵 $\displaystyle M$。 +- **逻辑**: + ```text + for k from 1 to n: + for i from 1 to n: + for j from 1 to n: + M[i,j] = M[i,j] or (M[i,k] and M[k,j]) + ``` + *直观理解*:第 $\displaystyle k$ 轮循环尝试以节点 $\displaystyle k$ 为中转站,如果 $\displaystyle i \to k$ 且 $\displaystyle k \to j$,则建立 $\displaystyle i \to j$ 的直达路径。 + +#### 2.2.5 等价关系与划分 +- **定义**:满足 **自反、对称、传递** 的关系。 +- **等价类** $\displaystyle [x]_R$:所有与 $\displaystyle x$ 有关系 $\displaystyle R$ 的元素集合。 +- **划分**: + - 集合 $\displaystyle A$ 被划分为若干个不相交的子集,其并集为 $\displaystyle A$。 + - **定理**:等价关系与划分一一对应。等价类就是划分出的子集。 + - *例*:整数集上的模 3 同余关系,划分为 $\displaystyle \{3k\}, \{3k+1\}, \{3k+2\}$ 三类。 + +#### 2.2.6 偏序关系详解 +- **定义**:满足 **自反、反对称、传递** 的关系。符号 $\displaystyle \preceq$。 +- **相关符号**: + - $\displaystyle x \preceq y$:$\displaystyle x$ 小于等于 $\displaystyle y$ (或 $\displaystyle x$ 排在 $\displaystyle y$ 前)。 + - $\displaystyle x \prec y$:$\displaystyle x \preceq y \land x \ne y$。 + - **可比**:若 $\displaystyle x \preceq y$ 或 $\displaystyle y \preceq x$,则称 $\displaystyle x, y$ 可比。 + - **不可比**:若既不 $\displaystyle x \preceq y$ 也不 $\displaystyle y \preceq x$,则称 $\displaystyle x, y$ 不可比。 +- **覆盖关系**: + - 若 $\displaystyle x \prec y$ 且不存在 $\displaystyle z$ 使得 $\displaystyle x \prec z \prec y$,则称 $\displaystyle y$ 覆盖 $\displaystyle x$。 + - **哈斯图**即是基于覆盖关系绘制的简化图。 + +##### 哈斯图画法步骤 +1. 画出覆盖关系(即去掉所有自环和传递边)。 +2. 若 $\displaystyle y$ 覆盖 $\displaystyle x$,则将 $\displaystyle y$ 画在 $\displaystyle x$ 上方并连线。 +3. 方向默认向上,省略箭头。 + +##### 特殊元素 (重要考点) +设 $\displaystyle (A, \preceq)$ 为偏序集,$\displaystyle B \subseteq A$。 +1. **极小元**:$\displaystyle B$ 中没有比它更小的元素。$\displaystyle \neg \exists x \in B, x \prec a$。 +2. **极大元**:$\displaystyle B$ 中没有比它更大的元素。$\displaystyle \neg \exists x \in B, a \prec x$。 +3. **最小元**:$\displaystyle B$ 中所有元素都比它大。$\displaystyle \forall x \in B, a \preceq x$ (若存在则唯一)。 +4. **最大元**:$\displaystyle B$ 中所有元素都比它小。$\displaystyle \forall x \in B, x \preceq a$ (若存在则唯一)。 +5. **下界**:$\displaystyle A$ 中小于等于 $\displaystyle B$ 中所有元素的元素。$\displaystyle \forall x \in B, l \preceq x$。 +6. **上界**:$\displaystyle A$ 中大于等于 $\displaystyle B$ 中所有元素的元素。$\displaystyle \forall x \in B, x \preceq u$。 +7. **下确界 (GLB/Infimum)**:最大下界。符号 $\displaystyle \inf B$ 或 $\displaystyle \wedge B$。 +8. **上确界 (LUB/Supremum)**:最小上界。符号 $\displaystyle \sup B$ 或 $\displaystyle \lor B$。 + +##### 示例:整除关系 +设 $\displaystyle A = \{1, 2, 3, 4, 6, 12\}$,关系为整除 ($\displaystyle |$)。 +- 哈斯图层级:$\displaystyle 12$ 在顶;$\displaystyle 4, 6$ 在中;$\displaystyle 2, 3$ 在下;$\displaystyle 1$ 在底。 +- $\displaystyle 2$ 和 $\displaystyle 3$ 不可比。 +- 子集 $\displaystyle \{2, 3\}$ 的上界是 $\displaystyle 6, 12$,上确界是 $\displaystyle 6$。 +- 子集 $\displaystyle \{2, 3\}$ 的下界是 $\displaystyle 1$,下确界是 $\displaystyle 1$。 + +##### 格 +- **定义**:偏序集 $\displaystyle (L, \preceq)$ 中任意两个元素 $\displaystyle x, y$ 都有确定的上确界 ($\displaystyle x \lor y$) 和下确界 ($\displaystyle x \land y$)。 +- **性质**:格可以看作代数系统,满足交换律、结合律、吸收律。 + +### 2.3 函数 + +#### 2.3.1 函数的性质 +- **单射**: + - 定义:$\displaystyle f(a) = f(b) \Rightarrow a = b$。 + - 判别:陪域中每个元素最多被 1 个箭头指到。 +- **满射**: + - 定义:$\displaystyle \forall y \in B, \exists x \in A, f(x)=y$。 + - 判别:陪域中每个元素至少被 1 个箭头指到 (值域=陪域)。 +- **双射**:既单且满。 + - 只有双射存在逆函数 $\displaystyle f^{-1}$。 + +#### 2.3.2 复合函数 +- $\displaystyle (g \circ f)(x) = g(f(x))$。 +- **性质**: + - 若 $\displaystyle f, g$ 都是单射,则 $\displaystyle g \circ f$ 是单射。 + - 若 $\displaystyle f, g$ 都是满射,则 $\displaystyle g \circ f$ 是满射。 + - 若 $\displaystyle g \circ f$ 是单射 $\Rightarrow f$ 必为单射。 + - 若 $\displaystyle g \circ f$ 是满射 $\Rightarrow g$ 必为满射。 + +#### 2.3.3 特殊函数与算法复杂度 +1. **取整函数**: + - **向下取整 (Floor)** $\lfloor x \rfloor$:小于等于 $x$ 的最大整数。 + - **向上取整 (Ceiling)** $\lceil x \rceil$:大于等于 $x$ 的最小整数。 +2. **算法复杂度 (Big-O Notation)**: + - **定义**:设 $f, g$ 是从整数集或实数集到实数集的函数。若存在常数 $C$ 和 $k$,使得当 $x > k$ 时,$\lvert f(x) \rvert \le C \lvert g(x) \rvert$,则称 $f(x)$ 是 $O(g(x))$。 + - **常见阶**:$O(1) < O(\log n) < O(n) < O(n \log n) < O(n^2) < O(2^n) < O(n!)$。 + - **判定技巧**: + - 忽略系数:$7n^3$ 是 $O(n^3)$。 + - 只看最高次项:$n^2 + n + 1$ 是 $O(n^2)$。 + +#### 2.3.4 典型考题:等价关系的证明 +**题目**:设 $R$ 是集合 $A$ 上的等价关系,证明 $R \circ R$ 也是 $A$ 上的等价关系。 +**证明思路**: +1. **自反性**: + - $\because R$ 自反 $\therefore \forall a \in A, (a,a) \in R$。 + - 故 $(a,a) \in R \circ R$(通过中间点 $a$),即 $R \circ R$ 自反。 +2. **对称性**: + - 任取 $(x,y) \in R \circ R$,则 $\exists t \in A$ 使得 $(x,t) \in R \land (t,y) \in R$。 + - $\because R$ 对称 $\therefore (t,x) \in R \land (y,t) \in R$。 + - 交换顺序得 $(y,t) \in R \land (t,x) \in R \Rightarrow (y,x) \in R \circ R$。 +3. **传递性**: + - $\because R$ 传递,且 $R$ 是等价关系 $\therefore R \circ R = R$(等价关系的幂运算封闭性)。 + - $R$ 自身具备传递性,故 $R \circ R$ 传递。 + - *(注:若题目要求严格分布证明,需设 $(x,y) \in R^2, (y,z) \in R^2$ 推导 $(x,z) \in R^2$)*。 + +## 第三章:组合数学 + +### 3.0 基础数论概念 (补充) +- **完全数 (Perfect Number)**: + - 一个正整数等于其所有**真因子**(即除了自身以外的约数)之和。 + - *例*:$6 = 1 + 2 + 3$;$28 = 1 + 2 + 4 + 7 + 14$。 + - *考点*:判断给定数字是否为完全数,或计算其真因子之和。 + +### 3.1 基础计数原理 + +#### 3.1.1 加法与乘法原理 +- **加法原理 (分类)**:$S = S_1 ∪ S_2 …$ (互不相交),则 $|S| = |S_1| + |S_2| …$ +- **乘法原理 (分步)**:步骤 1 有 $n_1$ 种,步骤 2 有 $n_2$ 种... 则总数为 $n_1 \times n_2 …$ + +#### 3.1.2 排列与组合 (Notation: $C_n^r, P_n^r$) +| 模型 | 公式 | 典型场景 | +| :--- | :--- | :--- | +| **排列 (有序)** | $P_n^r = \frac{n!}{(n-r)!}$ | $n$ 人选 $r$ 人排队拍照 | +| **组合 (无序)** | $C_n^r = \frac{n!}{r!(n-r)!}$ | $n$ 人选 $r$ 人组队 | +| **可重排列** | $n^r$ | $r$ 位密码,每位 $n$ 种选择 | +| **可重组合** | $C_{n+r-1}^r$ | $n$ 种口味冰淇淋选 $r$ 球 (隔板法) | + +#### 3.1.3 组合恒等式 +1. **对称性**:$C_n^r = C_n^{n-r}$ +2. **帕斯卡公式**:$C_n^k = C_{n-1}^k + C_{n-1}^{k-1}$ + - *组合意义*:选 $k$ 人,要么包含特定人 A ($C_{n-1}^{k-1}$),要么不包含 A ($C_{n-1}^k$)。 +3. **二项式定理**:$(x+y)^n = \sum_{k=0}^n C_n^k x^{n-k} y^k$ + - 推论:$\sum_{k=0}^n C_n^k = 2^n$ (所有子集个数) + - 推论:$\sum_{k=0}^n (-1)^k C_n^k = 0$ (奇数个元素的子集数 = 偶数个元素的子集数) +4. **范德蒙恒等式**:$C_{m+n}^r = \sum_{k=0}^r C_m^{k} C_n^{r-k}$ + +--- + +### 3.2 高级计数方法 + +#### 3.2.1 鸽巢原理 (Pigeonhole Principle) +- **原理**:$N$ 个物体放入 $k$ 个盒子,必有一个盒子至少有 $\lceil N/k \rceil$ 个物体。 +- **应用技巧**:准确定义“鸽子”(物体)和“巢”(分类标准)。 + - *例*:任意 13 人中必有 2 人生肖相同 ($13/12 \to 2$)。 + +#### 3.2.2 容斥原理 (Inclusion-Exclusion) +求 $|A_1 ∪ A_2 ∪ … ∪ A_n|$: +- **公式**:$\sum |A_i| - \sum |A_i ∩ A_j| + \sum |A_i ∩ A_j ∩ A_k| - …$ +- **错排问题 ($D_n$)**:$n$ 封信全部装错信封的方法数。 + - $D_n = n!(1 - \frac{1}{1!} + \frac{1}{2!} - … + (-1)^n \frac{1}{n!})$ + - 递推式:$D_n = (n-1)(D_{n-1} + D_{n-2})$ + +#### 3.2.3 球盒模型 (Twelvefold Way 概览) +将 $n$ 个球放入 $k$ 个盒子: + +| 球 (Label) | 盒子 (Label) | 限制 | 方案数 | +| :--- | :--- | :--- | :--- | +| 不同 | 不同 | 无 | $k^n$ | +| 不同 | 不同 | $\le 1$ | $P_k^n$ | +| **相同** | **不同** | 无 | $C_{n+k-1}^n$ (隔板法) | +| **相同** | **不同** | $\ge 1$ | $C_{n-1}^{k-1}$ (先各放1个) | +| 不同 | 相同 | 无 | $S_2(n,k)$ (第二类斯特林数) | + +--- + +### 3.3 递推关系 (Recurrence Relations) + +#### 3.3.1 线性常系数齐次递推关系 +形式:$a_n + c_1 a_{n-1} + … + c_k a_{n-k} = 0$ +**求解步骤**: +1. 写出**特征方程**:$r^k + c_1 r^{k-1} + … + c_k = 0$。 +2. 求特征根 $r_1, r_2, …$。 +3. 写出通解结构: + - **无重根**:$a_n = A_1 r_1^n + A_2 r_2^n + …$ + - **有重根** (如 $r_1$ 为 $m$ 重根):$a_n = (A_1 + A_2 n + … + A_m n^{m-1}) r_1^n + …$ +4. 代入初值求解常数 $A_i$。 + +#### 3.3.2 生成函数 (Generating Functions) +- **定义**:$G(x) = \sum_{n=0}^\infty a_n x^n$。 +- **应用场景**: + - 求解组合数:如 $(1+x)^n$ 的系数。 + - 求解不定方程 $x_1 + x_2 + x_3 = k$ 的非负整数解个数。 + - 构造多项式 $(1+x+x^2+…)^3$,求 $x^k$ 系数。 + +--- + +### 3.4 典型考题:不定方程解计数 +**题目**:求 $x_1 + x_2 + x_3 = 15$ 的整数解个数,满足 $x_1 ≥ 1, 0 ≤ x_2 ≤ 5, x_3 ≥ 0$。 +**解题思路**: +1. **换元消下界**:令 $y_1 = x_1 - 1 ≥ 0$。 + - 原方程变为 $(y_1+1) + x_2 + x_3 = 15 ⇒ y_1 + x_2 + x_3 = 14$。 +2. **全集计算**:无上限限制时的非负整数解。 + - $\displaystyle N = C_{14+3-1}^{3-1} = C_{16}^2 = 120$。 +3. **容斥处理上界**: + - 坏条件 $P_1$:$x_2 ≥ 6$ (即原题 $x_2 > 5$)。 + - 在坏条件 $P_1$ 下,令 $z_2 = x_2 - 6 ≥ 0$。 + - 方程变为 $y_1 + (z_2+6) + x_3 = 14 ⇒ y_1 + z_2 + x_3 = 8$。 + - $|P_1| = C_{8+3-1}^2 = C_{10}^2 = 45$。 +4. **最终结果**:$Ans = N - |P_1| = 120 - 45 = 75$。 + +--- + +### 3.5 典型考题:常系数齐次线性递推关系求解 +**题目**:求解递推关系 $a_n = 7a_{n-1} - 16a_{n-2} + 12a_{n-3}$,初始条件为 $a_0 = 0, a_1 = 4, a_2 = 18$。 +**解题步骤**: + +1. **构造特征方程** + 将递推式移项得 $a_n - 7a_{n-1} + 16a_{n-2} - 12a_{n-3} = 0$。 + 对应的特征方程为: + $r^3 - 7r^2 + 16r - 12 = 0$ + +2. **求解特征根** + 观察系数,尝试代入 $r=2$:$8 - 28 + 32 - 12 = 0$,故 $(r-2)$ 是因子。 + 多项式除法分解得: + $(r-2)(r^2 - 5r + 6) = 0$ + $(r-2)(r-2)(r-3) = 0$ + 解得特征根:$r_1 = 2$ (二重根),$r_2 = 3$ (单根)。 + +3. **写出通解结构** + 对于二重根 $2$ 和单根 $3$,通解形式为: + $a_n = (C_1 + C_2 n) \cdot 2^n + C_3 \cdot 3^n$ + +4. **代入初始条件求解常数** + - 当 $n=0$ 时:$C_1 + C_3 = 0 \implies C_3 = -C_1$ + - 当 $n=1$ 时:$(C_1 + C_2) \cdot 2 + 3C_3 = 4$ + - 当 $n=2$ 时:$(C_1 + 2C_2) \cdot 4 + 9C_3 = 18$ + + 将 $C_3 = -C_1$ 代入后两式: + - $2C_1 + 2C_2 - 3C_1 = 4 \implies -C_1 + 2C_2 = 4$ + - $4C_1 + 8C_2 - 9C_1 = 18 \implies -5C_1 + 8C_2 = 18$ + + 联立求解: + 由第一式得 $C_1 = 2C_2 - 4$,代入第二式: + $-5(2C_2 - 4) + 8C_2 = 18$ + $-10C_2 + 20 + 8C_2 = 18$ + $-2C_2 = -2 \implies C_2 = 1$ + 回代得 $C_1 = 2(1) - 4 = -2$ + $C_3 = -(-2) = 2$ + +5. **最终解** + $a_n = (-2 + n) \cdot 2^n + 2 \cdot 3^n$ + 或整理为: + $a_n = (n-2)2^n + 2 \cdot 3^n$ + +## 第四章:图论 + +### 4.1 图的基本概念 + +#### 4.1.1 定义与术语 +- **图 $G=(V, E)$**:$V$ 为顶点集,$E$ 为边集。 +- **度 (Degree)**:$\deg(v)$ 为关联的边数 (自环算 2 度)。 + - **握手定理**:$\sum_{v \in V} \deg(v) = 2|E|$。 + - **推论**:奇度顶点的个数必为偶数。 +- **子图**:$V' \subseteq V, E' \subseteq E$。 +- **补图**:$\bar{G}$,顶点相同,边互补 (完全图 $K_n$ 减去原图的边)。 + +#### 4.1.2 图的连通性 +- **路径 (Path)**:$v_0, e_1, v_1, \dots, v_k$。 +- **简单路径**:不经过重复边。 +- **基本路径 (Elementary Path)**:不经过重复顶点。 +- **连通图**:任意两点间均有路径。 +- **割点 (Cut Vertex)**:删去该点及关联边,图分量增加。 +- **割边 (Bridge)**:删去该边,图分量增加。 +- **连通度**: + - **点连通度 $\kappa(G)$**:使图不连通所需删除的最少顶点数。 + - **边连通度 $\lambda(G)$**:使图不连通所需删除的最少边数。 + - **不等式关系**:$\kappa(G) \le \lambda(G) \le \delta(G)$ (最小度)。 + +#### 4.1.3 图的矩阵表示 +- **邻接矩阵 $A(G)$**:$n \times n$ 矩阵,$a_{ij}$ 表示 $v_i, v_j$ 间的边数。 + - 性质:$A^k$ 的元素 $a_{ij}^{(k)}$ 表示从 $v_i$ 到 $v_j$ 长度为 $k$ 的路径条数。 +- **关联矩阵 $M(G)$**:顶点与边的关系。 + +#### 4.1.4 图的同构 (Isomorphism) +判断 $G_1 \cong G_2$ 的必要条件 (若不满足则必不同构): +1. 顶点数、边数相同。 +2. 度数列相同 (将所有点度数排序后一致)。 +3. 连通分量数相同。 +4. 对应长度的回路数相同 (如都有或都没有三角形)。 +*充分性证明通常需要构造双射函数。* + +### 4.2 特殊图类 + +#### 4.2.1 欧拉图 (Euler) 与 哈密顿图 (Hamilton) +| 特性 | 欧拉图 (Euler) | 哈密顿图 (Hamilton) | +| :--- | :--- | :--- | +| **定义** | 经过**每条边**恰好一次的回路 | 经过**每个顶点**恰好一次的回路 | +| **判定(充要)** | 连通 + **所有点度为偶数** | 无简单充要条件 | +| **判定(充分)** | - | (Dirac) $n \ge 3, \forall v, \deg(v) \ge n/2$ | +| **半图(路径)** | 连通 + **恰有 0 或 2 个奇度点** | - | +**哈密顿图常用判定方式 (充分/必要)**: +- **必要条件**:$\delta(G) \ge 2$;且无割点 (2-连通)。 +- **Dirac 定理 (充分)**:$n \ge 3, \delta(G) \ge n/2$。 +- **Ore 定理 (充分)**:$n \ge 3$ 且任意非邻接顶点 $u,v$ 满足 $\deg(u)+\deg(v) \ge n$。 + +#### 4.2.2 树 (Trees) +- **定义**:连通且无回路的无向图。 +- **等价性质**: + 1. 无回路且 $E = V - 1$。 + 2. 连通且 $E = V - 1$。 + 3. 任意两点间存在**唯一**路径。 +- **度数和**:$\sum_{v \in V} \deg(v) = 2E = 2(V-1)$。 +- **叶子与内部点关系**:设 $L$ 为叶子数,则 $L = 2 + \sum_{\deg(v)\ge 2}(\deg(v) - 2)$。 +- **树中心 (Center)**: + - 反复删除所有叶子,最终剩下 1 个或 2 个顶点,这些顶点即中心。 + - 等价表述:中心是到其他顶点最大距离最小的顶点(们)。 +- **二叉树常用关系**: + - 满二叉树:若内部结点数为 $I$,叶子数为 $L$,则 $L = I + 1$。 + - 完全二叉树:$n$ 个结点时高度 $h = \lfloor \log_2 n \rfloor + 1$。 +- **最小生成树 (MST) 算法**: + - **Kruskal** (加边法):按权值排序,从小到大选边,不构成回路就加入。 + - **Prim** (加点法):从任意点开始,每次选离当前生成树集合最近的点加入。 + +#### 4.2.3 平面图 (Planar Graphs) +- **欧拉公式**:$V - E + R = 2$ ($R$ 为面数,包含无限面)。 +- **定理**:连通简单平面图 ($V \ge 3$) 满足 $E \le 3V - 6$。 + - **证明要点**:每个面至少 3 条边,故 $3R \le 2E$,与欧拉公式联立得 $E \le 3V - 6$。 + - **性质**:简单平面图 ($V \ge 3$) 满足 $E \le 3V - 6$。 + - **重要证明:存在度数 $\le 5$ 的顶点** + - 假设所有顶点度数 $\deg(v) \ge 6$。 + - 由握手定理:$2E = \sum \deg(v) \ge 6V \Rightarrow E \ge 3V$。 + - 这与平面图性质 $E \le 3V - 6$ 矛盾。 + - 故必然存在 $\deg(v) \le 5$ 的顶点。 + - 推论:$K_5$ ($E=10, 3V-6=9$) 不是平面图。 + - 推论:$K_{3,3}$ ($E=9, 3V-6=12$, 但它是二分图无三角形,需用 $E \le 2V-4$, $9 \not\le 8$) 不是平面图。 +- **常用等价与应用**: + - 连通简单平面图:$E \le 3V - 6 \iff V \ge (E+6)/3$。 + - 平均度:$\overline{d} = 2E/V < 6$,因此必存在度 $\le 5$ 的顶点。 + - 判否:若某简单图满足 $E > 3V - 6$,则必非平面图。 + - 若无三角形 (如二分图),改用 $E \le 2V - 4$。 +- **库拉图斯基定理 (Kuratowski)**:图是平面图 $\iff$ 不含同胚于 $K_5$ 或 $K_{3,3}$ 的子图。 + +#### 4.2.4 二分图 (Bipartite Graphs) +- **定义**:顶点集可划分为 $X, Y$,且所有边都在 $X$ 与 $Y$ 之间。 +- **判定**:图是二分图 $\iff$ 图中**没有奇数长度的回路**。 +- **完全二分图**:$K_{m,n}$,$|X|=m, |Y|=n$,边数 $E = mn$。 +- **度数与边数**:$\sum_{x \in X}\deg(x)=\sum_{y \in Y}\deg(y)=|E|$。 +- **平面图推论**:连通简单二分平面图 ($V \ge 3$) 满足 $E \le 2V - 4$。 +- **二染色判定 (BFS/DFS)**: + 1. 对每个连通分量,任选起点染色为 0。 + 2. 进行 BFS/DFS,对每条边 $(u,v)$ 要求 $color[u] \ne color[v]$。 + 3. 若遇到冲突 (已染且相同) 则非二分图;无冲突则是二分图。 +- **匹配**:Hall 定理 (相异代表系)。 + +### 4.3 核心算法逻辑 + +#### 4.3.1 最短路径 (Dijkstra) +*适用于非负权图。* +1. 初始化:$S=\{start\}$, $dist[start]=0$, 其他无穷大。 +2. 循环: + - 在 $V-S$ 中找 $dist$ 最小的点 $u$。 + - 加入 $S$。 + - 松弛 (Relax) $u$ 的所有邻居 $v$:若 $dist[u] + w(u,v) < dist[v]$,则更新。 + +#### 4.3.2 图着色 (Graph Coloring) +- **点色数 $\chi(G)$**:相邻顶点不同色所需的最少颜色数。 +- **布鲁克定理 (Brooks)**:若 $G$ 不是奇环也不是完全图,则 $\chi(G) \le \Delta(G)$ (最大度)。 +- **平面图四色定理**:平面图 $\chi(G) \le 4$。 +- **色多项式 $P_k(G)$**:用 $k$ 种颜色染色的方案数。 + - 递推公式:$P_k(G) = P_k(G-e) - P_k(G \cdot e)$ + - $G-e$:删边。 + - $G \cdot e$:收缩边 (合并端点)。 + +#### 4.3.3 最优二叉树 (Huffman Coding) +*常考题型:给定一组权值,构造哈夫曼树并计算带权路径长度 (WPL)。* + +1. **算法步骤**: + - **初始化**:将所有权值看作独立的单节点树森林 $F = \{T_1, T_2, \dots\}$。 + - **循环**: + 1. 在 $F$ 中选出**根节点权值最小**的两棵树 $T_1, T_2$。 + 2. 构造新树:根权值为 $W(T_1) + W(T_2)$,左右子树分别为 $T_1, T_2$。 + 3. 从 $F$ 中删除 $T_1, T_2$,加入新树。 + 4. 重复直到 $F$ 中只剩一棵树。 +2. **带权路径长度 (WPL)**: + - $WPL = \sum_{i=1}^n w_i \times l_i$ + - $w_i$:第 $i$ 个叶子的权值。 + - $l_i$:第 $i$ 个叶子到根的路径长度(边数)。 + - *简便算法*:WPL = 所有非叶子节点的权值之和。 + diff --git a/docs/sop/notes/mayuan-notes.md b/docs/sop/notes/mayuan-notes.md index d7e5924..6e478a4 100644 --- a/docs/sop/notes/mayuan-notes.md +++ b/docs/sop/notes/mayuan-notes.md @@ -1,408 +1,408 @@ ---- -title: 马克思主义基本原理复习笔记 -date: 2026-01-11 12:00:00 -descriptionHTML: '马克思主义基本原理复习笔记,涵盖唯物论、辩证法、认识论、唯物史观、政治经济学及科学社会主义核心知识点。' -tags: - - 马原 - - 政治 - - 笔记 -sidebar: true -readingTime: true -hidden: false -recommend: true -publish: false ---- - -> **整理说明**: -> 本笔记基于参考文件重点整理,并对**第1-4章**核心知识点进行了详细扩充与深度解析,补充了定义、原理逻辑及常见考点细节。 -> **适用范围**:期末复习、考研政治基础巩固。 - ---- - -## 目录 -1. [导论:什么是马克思主义](#导论什么是马克思主义) -2. [第1章 世界的物质性及发展规律(唯物论+辩证法)](#第1章-世界的物质性及发展规律) -3. [第2章 实践与认识及其发展规律(认识论)](#第2章-实践与认识及其发展规律) -4. [第3章 人类社会及其发展规律(唯物史观)](#第3章-人类社会及其发展规律) -5. [第4章 资本主义的本质及规律(政治经济学)](#第4章-资本主义的本质及规律) -6. [第6章 社会主义的发展及其规律](#第6章-社会主义的发展及其规律) -7. [附录:高频概念速记清单](#附录高频概念速记清单) - ---- - -## 导论:什么是马克思主义 - -**1. 马克思主义的创立与发展** -* **创立者**:由马克思、恩格斯创立,并由后继者(列宁、毛泽东、邓小平等)不断发展。 -* **两个伟大理论发现**:**唯物史观**(历史唯物主义)和**剩余价值学说**。这是马克思一生的两个伟大发现。 -* **理论来源**: - 1. 德国古典哲学 - 2. 英国古典政治经济学 - 3. 英法空想社会主义 -* **研究对象**:关于自然、社会和人类思维发展**一般规律**的学说。 -* **三大组成部分**: - 1. **马克思主义哲学**(世界观与方法论基础) - 2. **马克思主义政治经济学**(揭示资本主义主要矛盾) - 3. **科学社会主义**(核心与归宿) - -**2. 马克思主义的鲜明特征** -* **科学性**:以事实为依据,以规律为对象,以实践为检验标准。它不仅仅是意识形态,更是客观真理体系。 -* **人民性**(本质属性):马克思主义是“为绝大多数人谋利益”的理论。人民至上是其根本政治立场。 -* **实践性**:从实践中来,到实践中去。**实践性是马克思主义区别于其他理论的显著特征**。 -* **发展性**:具有与时俱进的理论品质。 - -**3. 当代价值** -* **观察世界的认识工具**:给予我们观察当代世界的宏大视野,透视时代风云的锐利目光,展望未来世界的长远眼光和战略定力。 -* **行动指南**:坚持马克思主义基本原理同中国具体实际相结合、同中华优秀传统文化相结合(“两个结合”)。它是指引当代中国发展的精神旗帜和行动指南。 -* **科学真理**:引领人类社会进步。世界仍处于马克思主义所指明的从资本主义走向社会主义的大时代。 - ---- - -## 第1章 世界的物质性及发展规律(唯物论+辩证法) - -### 一、 物质及其存在方式(唯物论核心) - -**1. 哲学的基本问题** -* **内容**:思维和存在的关系问题。 -* **两个方面**: - 1. **本原问题**:思维和存在、物质和意识谁为本原(划分唯物主义和唯心主义)。 - 2. **同一性问题**:思维和存在、物质和意识是否具有同一性(划分可知论和不可知论)。 - -**2. 物质的定义** -* **列宁的物质定义**:“物质是标志客观实在的哲学范畴,这种客观实在是人通过感觉感知的,它不依赖于我们的感觉而存在,为我们的感觉所复写、摄影、反映。” -* **核心**:物质的唯一特性是**客观实在性**。 - -**3. 物质与运动** -* **运动是物质的根本属性**:物质是运动的承担者,运动是物质的存在方式。 -* **不可分割**: - * 脱离物质的运动是唯心主义(如“绝对精神”的运动)。 - * 脱离运动的物质是形而上学(机械唯物主义)。 - -**4. 运动与静止** -* **绝对运动**:运动是无条件的、永恒的。 -* **相对静止**:运动的特殊状态(空间位置相对不变或事物性质相对稳定)。 -* **关系**:动中有静,静中有动。**承认相对静止是衡量事物、区分事物的必要前提**。 - -**5. 时空观** -* **时间**:一维性(不可逆)、持续性。 -* **空间**:三维性、广延性。 -* **客观性与相对性**:时空是客观的,但其具体度量随物质运动状态变化(如相对论指出高速运动下尺缩钟慢),体现了**物质、运动、时空的内在统一**。 -* **方法论**:一切以时间、地点、条件为转移。 - -### 二、 意识及其能动作用 - -**1. 意识的起源与本质** -* **起源**:自然界长期发展的产物,更是**社会历史**的产物(劳动起了决定性作用)。 -* **本质**: - * 人脑是意识的器官(生理基础)。 - * 意识是**客观世界的主观映象**(内容是客观的,形式是主观的)。 - -**2. 意识的能动作用(反作用)** -* **表现**: - 1. **目的性与计划性**:人在行动前在大脑中已有蓝图。 - 2. **创造性**:不仅反映事物的现象,还能揭示本质(由此及彼、由表及里)。 - 3. **指导实践**:通过实践把观念的东西变成现实的东西(最突出的表现)。 - 4. **调控作用**:控制人的生理活动和行为。 -* **原则**:主观能动性的发挥必须以**尊重客观规律**为前提。 - -**3. 人工智能 vs 人类意识** -* **结论**:人工智能不会具有人类意识,不会超越和取代人类智能。 -* **区别**: - 1. **知情意统一**:人类意识是知情意的统一体,AI只是对人类理性智能的模拟。 - 2. **社会性**:社会性是人的意识所固有的本质属性,AI不具备社会属性。 - 3. **语言与理解**:人类自然语言是思维的物质外壳,AI难以具备理解自然语言真实意义的能力。 - -### 三、 主观能动性与客观规律性的辩证统一 - -* **关系**: - * **尊重客观规律是前提**:不违背规律才能成功。人们创造历史不是随心所欲,而是遵循历史的规律。 - * **发挥主观能动性是条件**:规律必须通过人的自觉活动才能被认识和利用。 -* **正确发挥的条件**: - 1. **从实际出发**(根本立足点)。 - 2. **实践**(基本途径,将“想”转化为“做”)。 - 3. **依赖物质条件**(巧妇难为无米之炊)。 - -### 四、 世界的物质统一性 - -* **原理**:世界的本原是物质,世界统一于物质。 -* **表现**:自然界是客观的;人类社会本质上是物质的(生产方式是物质的);意识统一于物质。 -* **意义**:是马克思主义哲学的基石,是**一切从实际出发、实事求是**的思想路线的哲学基础。 - -### 五、 唯物辩证法的三大规律 - -**1. 对立统一规律(矛盾规律)—— 核心与实质** -* **地位**:唯物辩证法的**根本规律**,揭示了事物发展的**源泉和动力**。 -* **矛盾的同一性与斗争性**: - * **同一性**:相互依存、相互贯通(在一定条件下相互转化)。 - * **同一性的作用**: - 1. 是事物存在和发展的前提。 - 2. 使矛盾双方相互吸取有利于自身的因素,在相互作用中各自得到发展。 - 3. 规定事物转化的可能和发展的趋势。 - * **斗争性**:相互排斥、相互分离。 - * **关系**:**斗争性寓于同一性之中**。没有同一性就没有斗争性,没有斗争性也就没有同一性。 -* **矛盾的普遍性与特殊性**: - * **普遍性**:事事有矛盾,时时有矛盾(承认矛盾)。 - * **特殊性**:具体问题具体分析(马克思主义活的灵魂)。 - * **表现**:不同事物的矛盾不同;同一矛盾在不同阶段不同;矛盾双方地位不同(主要矛盾/次要矛盾,矛盾的主要方面/次要方面)。 - * **方法论**:坚持“两点论”和“重点论”的统一。 - -**2. 量变质变规律** -* **揭示**:事物发展的**形式和状态**。 -* **内容**: - * **量变**:数量增减或场所变更(渐进性、连续性)。 - * **质变**:根本性质的变化(飞跃性、断裂性)。 - * **关系**:量变是质变的必要准备;质变是量变的必然结果;量变质变相互渗透(总的量变中有阶段性部分质变)。 -* **方法论**:注重量的积累(适度原则),抓住机遇促成质变(底线思维)。 - -**3. 否定之否定规律** -* **揭示**:事物发展的**方向和道路**(螺旋式上升,波浪式前进)。 -* **辩证否定观**: - * **自我否定**:事物内部矛盾运动的结果。 - * **实质是“扬弃”**:既克服又保留(批判继承)。 - * *错误观点*:肯定一切(复古论)或否定一切(虚无主义)。 - -### 六、 联系与发展的基本环节(补充) - -**1. 辨别新旧事物** -* **标准**:是否符合历史前进方向、具有远大前途。 -* **误区**:不是看出现时间的先后,也不看形式的新旧。 - -**2. 辩证思维方法** -* 归纳和演绎、分析和综合、抽象和具体、逻辑和历史相统一。 - ---- - -## 第2章 实践与认识及其发展规律(认识论) - -### 一、 实践的本质与基本特征 - -* **定义**:实践是人类能动地改造世界的**社会性的物质活动**。 -* **基本特征**: - 1. **客观现实性**:构成要素(主体、客体、中介)和结果都是客观的。**这区别于纯粹的精神活动**。 - 2. **自觉能动性**:受意识指导,有目的。**这区别于动物的本能活动**。 - 3. **社会历史性**:在一定社会关系中进行,受历史条件限制。 -* **基本形式**:物质生产实践(最基本)、社会政治实践、科学文化实践。 - -### 二、 实践对认识的决定作用(实践是认识的基础) - -1. **实践是认识的来源**:一切真知来源于实践(直接经验)。通过实践才能把握对象的本质和规律。 -2. **实践是认识发展的动力**: - * 实践不断提出新问题。 - * 实践提供新的认识工具(如望远镜、显微镜)。 - * 实践锻炼人的思维能力。 -3. **实践是检验真理的唯一标准**:主观不能检验主观,客观不能检验客观,只有连接主客体的**实践**才能检验。 -4. **实践是认识的目的**:认识世界的目的是为了改造世界。 - -### 三、 认识的本质与过程 - -**1. 辩证唯物主义认识论的两个特点** -* 把**实践**的观点引入认识论。 -* 把**辩证法**应用于反映论,考察认识的发展过程。 - -**2. 认识的本质** -* **主体在实践基础上对客体的能动反映**。 - * **反映性**:以客观事物为原型。 - * **创造性**:在思维中能动地创造(不仅反映现象,更把握本质)。 - -**3. 认识的过程(两次飞跃)** -* **第一次飞跃:感性认识 -> 理性认识** - * **感性认识的三种形式**:感觉、知觉、表象。 - * **条件**: - 1. 投身实践,获取丰富、合乎实际的感性材料。 - 2. 经过思考(去粗取精、去伪存真、由此及彼、由表及里),形成概念和理论。 -* **第二次飞跃:理性认识 -> 实践**(更为重要) - * 原因:认识需回到实践中检验和发展;认识需指导实践改造世界。 - -### 四、 真理与谬误 - -* **真理的属性**: - * **客观性**:内容是客观的(不以人的意志为转移)。 - * **绝对性**:承认客观真理,且人类认识能力无限。 - * **相对性**:在一定条件下,认识的广度和深度是有限的。 - * **关系**:绝对性与相对性辩证统一,绝对之中有相对,相对之中有绝对。 -* **实践标准的确定性与不确定性** - * **确定性(绝对性)**:实践是检验真理的唯一标准,不可替代。 - * **不确定性(相对性)**:任何实践都受历史条件限制,具有局限性。 -* **真理与谬误的关系**: - * 对立统一。在一定范围内界限绝对,超出范围则可能转化。 - * 真理往往是在同谬误的斗争中发展的。 - -### 五、 价值与价值观 - -* **价值**:客体对主体的有用性。 -* **特性**: - * **主体性**:取决于主体的需要(不同人对同一事物价值判断不同)。 - * **客观性**:依赖于客体的固有属性。 -* **真理与价值的统一**: - * 成功的实践必须既符合**真理尺度**(按规律办事),又符合**价值尺度**(满足人的需要)。 -* **社会主义核心价值观** - * **国家层面**:富强、民主、文明、和谐。 - * **社会层面**:自由、平等、公正、法治。 - * **个人层面**:爱国、敬业、诚信、友善。 - ---- - -## 第3章 人类社会及其发展规律(唯物史观) - -### 一、 社会存在与社会意识 - -* **社会存在**(物质方面): - * 地理环境、人口因素(必要条件,但不起决定作用)。 - * **物质生产方式**(生产力+生产关系):**决定力量**。 -* **社会意识**(精神方面): - * **意识形态**(含阶级性):政治法律思想、道德、艺术、宗教、哲学等。 - * **非意识形态**:自然科学、语言学、逻辑学(无阶级性)。 -* **辩证关系**: - * 社会存在决定社会意识(来源、随之变化)。 - * 社会意识具有**相对独立性**: - * 发展具有不完全同步性(可能超前或滞后)。 - * 内部各形式间相互影响。 - * 具有历史继承性。 - * **最突出的表现**:对社会存在具有**能动反作用**(先进的意识促进发展,落后的阻碍)。 - -### 二、 社会基本矛盾(根本动力) - -1. **生产力 vs 生产关系**: - * **生产力要素**:劳动资料、劳动对象、劳动者(+科学技术)。 - * **生产关系要素**:生产资料所有制(决定性)、生产中人与人的关系、产品分配关系。 - * **作用**:物质生产方式是社会发展的决定力量。 -2. **经济基础 vs 上层建筑**: - * **经济基础**:占统治地位的生产关系的总和。 - * **上层建筑**:观念上层建筑(意识形态)+ 政治上层建筑(制度、组织、设施)。 - * **关系**:经济基础决定上层建筑;上层建筑反作用于经济基础(为经济基础服务)。 - * 当上层建筑适合经济基础时,推动社会发展;反之阻碍。 - -### 三、 社会发展的动力系统 - -* **根本动力**:社会基本矛盾。 - * 生产力和生产关系的矛盾决定着社会中其他矛盾的存在和发展。 -* **直接动力**(在阶级社会中):**阶级斗争**。 -* **重要动力**:改革(社会主义社会的自我完善)、科学技术(革命力量)。 -* **交往(Interaction)的作用**: - * 促进生产力发展。 - * 促进社会关系进步。 - * 促进文化发展与传播。 - * 促进人的全面发展。 -* **文化的作用**:提供思想保证、精神动力、智力支持、凝聚力量。 - -### 四、 人民群众在历史中的作用 - -* **唯物史观 vs 唯心史观**: - * 唯物史观:**人民群众是历史的创造者**。 - * 唯心史观:英雄史观(帝王将相决定历史)。 -* **人民群众的作用**: - 1. 社会物质财富的创造者。 - 2. 社会精神财富的创造者。 - 3. 社会变革的决定力量。 -* **群众、阶级、政党、领袖的关系**: - * 构成一个有机整体。 - * 群众是划分为阶级的。 - * 阶级通常由政党领导。 - * 政党由领袖主持。 -* **个人/杰出人物的作用**:可以加速或延缓历史进程,但不能改变历史发展的总趋势。 - ---- - -## 第4章 资本主义的本质及规律(政治经济学) - -### 一、 商品经济与价值规律 - -**1. 商品经济出现的两个条件** -* **存在社会分工**。 -* **生产资料和劳动产品属于不同的所有者**(决定性条件)。 - -**2. 商品二因素** -* **使用价值**:商品的自然属性,满足人的某种需要。反映人与自然的关系。 -* **价值**:商品的社会属性,凝结在商品中的无差别的一般人类劳动。 -* **关系**:对立统一。商品交换者必须让渡使用价值才能获得价值;二者不可兼得。 - -**3. 劳动二重性(理解政治经济学的枢纽)** -* **具体劳动**:生产不同使用价值(如木匠做桌子)。反映人与自然的关系(自然属性)。 -* **抽象劳动**:形成价值实体(耗费的体力和脑力)。反映商品生产者的社会关系(社会属性)。 -* **结论**:**同一劳动过程的两个方面**,不是两次劳动。 - -**4. 价值规律** -* **内容**:商品的价值量由**社会必要劳动时间**决定;商品按照价值量进行**等价交换**。 -* **表现形式**:价格围绕价值上下波动。 -* **作用**:调节资源配置;刺激生产力发展;导致优胜劣汰和贫富分化。 - -### 二、 资本主义经济制度的本质 - -**1. 资本原始积累** -* **定义**:用暴力手段使生产者和生产资料分离,资本迅速集中在少数人手中。 -* **途径**: - 1. 用暴力手段掠夺农民的土地。 - 2. 用暴力手段掠夺货币财富。 - -**2. 劳动力成为商品** -* **条件**: - 1. 劳动者在法律上是自由人。 - 2. 劳动者没有任何生产资料,不得不出卖劳动力。 -* **特点**:劳动力商品的使用价值是**价值的源泉**。它在消费过程中能创造出比自身价值更大的价值(即剩余价值)。 - -**3. 剩余价值生产** -* **资本的本质**:不是物,而是体现在物上的**生产关系**(剥削关系)。 -* **资本主义生产过程**:劳动过程 + **价值增殖过程**(核心)。 -* **剩余价值(m)**:雇佣工人创造的、被资本家无偿占有的、超过劳动力价值的那部分价值。唯一源泉是**雇佣劳动者的剩余劳动**。 -* **马克思劳动价值论的意义**:扬弃了古典政治经济学,为剩余价值论奠基;揭示了商品经济一般规律。 - -**4. 资本积累与社会再生产** -* **资本积累**:把剩余价值转化为资本(剩余价值资本化)。 -* **社会再生产的核心问题**:**社会总产品的实现问题**。 - * 即社会总产品的**价值补偿**和**实物替换**。 - -### 三、 资本主义的矛盾与危机及政治制度 - -* **基本矛盾**:**生产社会化**与**生产资料资本主义私人占有**之间的矛盾。 -* **经济危机**: - * **本质**:**生产相对过剩**(相对于劳动人民有支付能力的需示而言,不是绝对过剩)。 - * **根源**:资本主义基本矛盾。 -* **资本主义政治制度的局限性**: - 1. **金钱操纵**:实际是资产阶级精英统治下的民主。 - 2. **法律名义上的平等**:掩盖着事实上的不平等。 - 3. **政党维护统治**:资产阶级政党是维护资产阶级统治的工具。 - 4. **政党恶斗**:相互掣肘,决策效率低下,激化社会矛盾。 - ---- - -## 第6章 社会主义的发展及其规律 - -### 一、 社会主义五百年的历史进程 -* **从空想到科学**: - * 马克思、恩格斯创立科学社会主义。 - * 理论基石:唯物史观 + 剩余价值学说。 -* **从理想到现实**:十月革命(列宁)建立了世界上第一个社会主义国家。 -* **从一国到多国**:二战后社会主义阵营形成。 -* **中国特色社会主义**:科学社会主义在中国的成功实践。 - -### 二、 科学社会主义基本原则 -1. **历史必然性**:资本主义必然灭亡,社会主义必然胜利。 -2. **领导核心**:无产阶级及其政党(共产党)。 -3. **经济基础**:生产资料公有制。 -4. **价值追求**:消灭剥削,实现共同富裕。 -5. **最终目标**:实现共产主义(人的自由而全面的发展)。 - -### 三、 社会主义发展的规律性 -* **长期性**:从资本主义向共产主义过渡是一个漫长的历史过程。 -* **多样性**:各国国情不同,发展道路必然多样(不能一种模式)。 -* **前进性与曲折性**:事物发展不是直线的,会有波折,但总趋势是前进的。 - ---- - -## 附录:高频概念速记清单 - -| 概念 | 速记要点 | -| :--- | :--- | -| **马克思主义三大部分** | 哲学(世界观)、政治经济学(解剖)、科学社会主义(核心) | -| **物质根本属性** | 运动(运动绝对,静止相对) | -| **意识本质** | 人脑机能 + 客观存在的主观映象 | -| **两大基本特征** | 普遍联系 + 永恒发展 | -| **三大规律** | 对立统一(核心)、量变质变(状态)、否定之否定(方向) | -| **实践三大特征** | 客观现实性、自觉能动性、社会历史性 | -| **真理特性** | 客观性、绝对性、相对性 | -| **社会历史观基本问题** | 社会存在 vs 社会意识 | -| **社会发展根本动力** | 社会基本矛盾(生产力vs生产关系、经基vs上建) | -| **商品二因素** | 使用价值(自然属性) + 价值(社会属性) | -| **劳动二重性** | 具体劳动(造物) + 抽象劳动(造价) | -| **剩余价值来源** | 雇佣工人的剩余劳动 | -| **资本主义基本矛盾** | 生产社会化 vs 私人占有 | +--- +title: 马克思主义基本原理复习笔记 +date: 2026-01-11 12:00:00 +descriptionHTML: '马克思主义基本原理复习笔记,涵盖唯物论、辩证法、认识论、唯物史观、政治经济学及科学社会主义核心知识点。' +tags: + - 马原 + - 政治 + - 笔记 +sidebar: true +readingTime: true +hidden: false +recommend: true +publish: false +--- + +> **整理说明**: +> 本笔记基于参考文件重点整理,并对**第1-4章**核心知识点进行了详细扩充与深度解析,补充了定义、原理逻辑及常见考点细节。 +> **适用范围**:期末复习、考研政治基础巩固。 + +--- + +## 目录 +1. [导论:什么是马克思主义](#导论什么是马克思主义) +2. [第1章 世界的物质性及发展规律(唯物论+辩证法)](#第1章-世界的物质性及发展规律) +3. [第2章 实践与认识及其发展规律(认识论)](#第2章-实践与认识及其发展规律) +4. [第3章 人类社会及其发展规律(唯物史观)](#第3章-人类社会及其发展规律) +5. [第4章 资本主义的本质及规律(政治经济学)](#第4章-资本主义的本质及规律) +6. [第6章 社会主义的发展及其规律](#第6章-社会主义的发展及其规律) +7. [附录:高频概念速记清单](#附录高频概念速记清单) + +--- + +## 导论:什么是马克思主义 + +**1. 马克思主义的创立与发展** +* **创立者**:由马克思、恩格斯创立,并由后继者(列宁、毛泽东、邓小平等)不断发展。 +* **两个伟大理论发现**:**唯物史观**(历史唯物主义)和**剩余价值学说**。这是马克思一生的两个伟大发现。 +* **理论来源**: + 1. 德国古典哲学 + 2. 英国古典政治经济学 + 3. 英法空想社会主义 +* **研究对象**:关于自然、社会和人类思维发展**一般规律**的学说。 +* **三大组成部分**: + 1. **马克思主义哲学**(世界观与方法论基础) + 2. **马克思主义政治经济学**(揭示资本主义主要矛盾) + 3. **科学社会主义**(核心与归宿) + +**2. 马克思主义的鲜明特征** +* **科学性**:以事实为依据,以规律为对象,以实践为检验标准。它不仅仅是意识形态,更是客观真理体系。 +* **人民性**(本质属性):马克思主义是“为绝大多数人谋利益”的理论。人民至上是其根本政治立场。 +* **实践性**:从实践中来,到实践中去。**实践性是马克思主义区别于其他理论的显著特征**。 +* **发展性**:具有与时俱进的理论品质。 + +**3. 当代价值** +* **观察世界的认识工具**:给予我们观察当代世界的宏大视野,透视时代风云的锐利目光,展望未来世界的长远眼光和战略定力。 +* **行动指南**:坚持马克思主义基本原理同中国具体实际相结合、同中华优秀传统文化相结合(“两个结合”)。它是指引当代中国发展的精神旗帜和行动指南。 +* **科学真理**:引领人类社会进步。世界仍处于马克思主义所指明的从资本主义走向社会主义的大时代。 + +--- + +## 第1章 世界的物质性及发展规律(唯物论+辩证法) + +### 一、 物质及其存在方式(唯物论核心) + +**1. 哲学的基本问题** +* **内容**:思维和存在的关系问题。 +* **两个方面**: + 1. **本原问题**:思维和存在、物质和意识谁为本原(划分唯物主义和唯心主义)。 + 2. **同一性问题**:思维和存在、物质和意识是否具有同一性(划分可知论和不可知论)。 + +**2. 物质的定义** +* **列宁的物质定义**:“物质是标志客观实在的哲学范畴,这种客观实在是人通过感觉感知的,它不依赖于我们的感觉而存在,为我们的感觉所复写、摄影、反映。” +* **核心**:物质的唯一特性是**客观实在性**。 + +**3. 物质与运动** +* **运动是物质的根本属性**:物质是运动的承担者,运动是物质的存在方式。 +* **不可分割**: + * 脱离物质的运动是唯心主义(如“绝对精神”的运动)。 + * 脱离运动的物质是形而上学(机械唯物主义)。 + +**4. 运动与静止** +* **绝对运动**:运动是无条件的、永恒的。 +* **相对静止**:运动的特殊状态(空间位置相对不变或事物性质相对稳定)。 +* **关系**:动中有静,静中有动。**承认相对静止是衡量事物、区分事物的必要前提**。 + +**5. 时空观** +* **时间**:一维性(不可逆)、持续性。 +* **空间**:三维性、广延性。 +* **客观性与相对性**:时空是客观的,但其具体度量随物质运动状态变化(如相对论指出高速运动下尺缩钟慢),体现了**物质、运动、时空的内在统一**。 +* **方法论**:一切以时间、地点、条件为转移。 + +### 二、 意识及其能动作用 + +**1. 意识的起源与本质** +* **起源**:自然界长期发展的产物,更是**社会历史**的产物(劳动起了决定性作用)。 +* **本质**: + * 人脑是意识的器官(生理基础)。 + * 意识是**客观世界的主观映象**(内容是客观的,形式是主观的)。 + +**2. 意识的能动作用(反作用)** +* **表现**: + 1. **目的性与计划性**:人在行动前在大脑中已有蓝图。 + 2. **创造性**:不仅反映事物的现象,还能揭示本质(由此及彼、由表及里)。 + 3. **指导实践**:通过实践把观念的东西变成现实的东西(最突出的表现)。 + 4. **调控作用**:控制人的生理活动和行为。 +* **原则**:主观能动性的发挥必须以**尊重客观规律**为前提。 + +**3. 人工智能 vs 人类意识** +* **结论**:人工智能不会具有人类意识,不会超越和取代人类智能。 +* **区别**: + 1. **知情意统一**:人类意识是知情意的统一体,AI只是对人类理性智能的模拟。 + 2. **社会性**:社会性是人的意识所固有的本质属性,AI不具备社会属性。 + 3. **语言与理解**:人类自然语言是思维的物质外壳,AI难以具备理解自然语言真实意义的能力。 + +### 三、 主观能动性与客观规律性的辩证统一 + +* **关系**: + * **尊重客观规律是前提**:不违背规律才能成功。人们创造历史不是随心所欲,而是遵循历史的规律。 + * **发挥主观能动性是条件**:规律必须通过人的自觉活动才能被认识和利用。 +* **正确发挥的条件**: + 1. **从实际出发**(根本立足点)。 + 2. **实践**(基本途径,将“想”转化为“做”)。 + 3. **依赖物质条件**(巧妇难为无米之炊)。 + +### 四、 世界的物质统一性 + +* **原理**:世界的本原是物质,世界统一于物质。 +* **表现**:自然界是客观的;人类社会本质上是物质的(生产方式是物质的);意识统一于物质。 +* **意义**:是马克思主义哲学的基石,是**一切从实际出发、实事求是**的思想路线的哲学基础。 + +### 五、 唯物辩证法的三大规律 + +**1. 对立统一规律(矛盾规律)—— 核心与实质** +* **地位**:唯物辩证法的**根本规律**,揭示了事物发展的**源泉和动力**。 +* **矛盾的同一性与斗争性**: + * **同一性**:相互依存、相互贯通(在一定条件下相互转化)。 + * **同一性的作用**: + 1. 是事物存在和发展的前提。 + 2. 使矛盾双方相互吸取有利于自身的因素,在相互作用中各自得到发展。 + 3. 规定事物转化的可能和发展的趋势。 + * **斗争性**:相互排斥、相互分离。 + * **关系**:**斗争性寓于同一性之中**。没有同一性就没有斗争性,没有斗争性也就没有同一性。 +* **矛盾的普遍性与特殊性**: + * **普遍性**:事事有矛盾,时时有矛盾(承认矛盾)。 + * **特殊性**:具体问题具体分析(马克思主义活的灵魂)。 + * **表现**:不同事物的矛盾不同;同一矛盾在不同阶段不同;矛盾双方地位不同(主要矛盾/次要矛盾,矛盾的主要方面/次要方面)。 + * **方法论**:坚持“两点论”和“重点论”的统一。 + +**2. 量变质变规律** +* **揭示**:事物发展的**形式和状态**。 +* **内容**: + * **量变**:数量增减或场所变更(渐进性、连续性)。 + * **质变**:根本性质的变化(飞跃性、断裂性)。 + * **关系**:量变是质变的必要准备;质变是量变的必然结果;量变质变相互渗透(总的量变中有阶段性部分质变)。 +* **方法论**:注重量的积累(适度原则),抓住机遇促成质变(底线思维)。 + +**3. 否定之否定规律** +* **揭示**:事物发展的**方向和道路**(螺旋式上升,波浪式前进)。 +* **辩证否定观**: + * **自我否定**:事物内部矛盾运动的结果。 + * **实质是“扬弃”**:既克服又保留(批判继承)。 + * *错误观点*:肯定一切(复古论)或否定一切(虚无主义)。 + +### 六、 联系与发展的基本环节(补充) + +**1. 辨别新旧事物** +* **标准**:是否符合历史前进方向、具有远大前途。 +* **误区**:不是看出现时间的先后,也不看形式的新旧。 + +**2. 辩证思维方法** +* 归纳和演绎、分析和综合、抽象和具体、逻辑和历史相统一。 + +--- + +## 第2章 实践与认识及其发展规律(认识论) + +### 一、 实践的本质与基本特征 + +* **定义**:实践是人类能动地改造世界的**社会性的物质活动**。 +* **基本特征**: + 1. **客观现实性**:构成要素(主体、客体、中介)和结果都是客观的。**这区别于纯粹的精神活动**。 + 2. **自觉能动性**:受意识指导,有目的。**这区别于动物的本能活动**。 + 3. **社会历史性**:在一定社会关系中进行,受历史条件限制。 +* **基本形式**:物质生产实践(最基本)、社会政治实践、科学文化实践。 + +### 二、 实践对认识的决定作用(实践是认识的基础) + +1. **实践是认识的来源**:一切真知来源于实践(直接经验)。通过实践才能把握对象的本质和规律。 +2. **实践是认识发展的动力**: + * 实践不断提出新问题。 + * 实践提供新的认识工具(如望远镜、显微镜)。 + * 实践锻炼人的思维能力。 +3. **实践是检验真理的唯一标准**:主观不能检验主观,客观不能检验客观,只有连接主客体的**实践**才能检验。 +4. **实践是认识的目的**:认识世界的目的是为了改造世界。 + +### 三、 认识的本质与过程 + +**1. 辩证唯物主义认识论的两个特点** +* 把**实践**的观点引入认识论。 +* 把**辩证法**应用于反映论,考察认识的发展过程。 + +**2. 认识的本质** +* **主体在实践基础上对客体的能动反映**。 + * **反映性**:以客观事物为原型。 + * **创造性**:在思维中能动地创造(不仅反映现象,更把握本质)。 + +**3. 认识的过程(两次飞跃)** +* **第一次飞跃:感性认识 -> 理性认识** + * **感性认识的三种形式**:感觉、知觉、表象。 + * **条件**: + 1. 投身实践,获取丰富、合乎实际的感性材料。 + 2. 经过思考(去粗取精、去伪存真、由此及彼、由表及里),形成概念和理论。 +* **第二次飞跃:理性认识 -> 实践**(更为重要) + * 原因:认识需回到实践中检验和发展;认识需指导实践改造世界。 + +### 四、 真理与谬误 + +* **真理的属性**: + * **客观性**:内容是客观的(不以人的意志为转移)。 + * **绝对性**:承认客观真理,且人类认识能力无限。 + * **相对性**:在一定条件下,认识的广度和深度是有限的。 + * **关系**:绝对性与相对性辩证统一,绝对之中有相对,相对之中有绝对。 +* **实践标准的确定性与不确定性** + * **确定性(绝对性)**:实践是检验真理的唯一标准,不可替代。 + * **不确定性(相对性)**:任何实践都受历史条件限制,具有局限性。 +* **真理与谬误的关系**: + * 对立统一。在一定范围内界限绝对,超出范围则可能转化。 + * 真理往往是在同谬误的斗争中发展的。 + +### 五、 价值与价值观 + +* **价值**:客体对主体的有用性。 +* **特性**: + * **主体性**:取决于主体的需要(不同人对同一事物价值判断不同)。 + * **客观性**:依赖于客体的固有属性。 +* **真理与价值的统一**: + * 成功的实践必须既符合**真理尺度**(按规律办事),又符合**价值尺度**(满足人的需要)。 +* **社会主义核心价值观** + * **国家层面**:富强、民主、文明、和谐。 + * **社会层面**:自由、平等、公正、法治。 + * **个人层面**:爱国、敬业、诚信、友善。 + +--- + +## 第3章 人类社会及其发展规律(唯物史观) + +### 一、 社会存在与社会意识 + +* **社会存在**(物质方面): + * 地理环境、人口因素(必要条件,但不起决定作用)。 + * **物质生产方式**(生产力+生产关系):**决定力量**。 +* **社会意识**(精神方面): + * **意识形态**(含阶级性):政治法律思想、道德、艺术、宗教、哲学等。 + * **非意识形态**:自然科学、语言学、逻辑学(无阶级性)。 +* **辩证关系**: + * 社会存在决定社会意识(来源、随之变化)。 + * 社会意识具有**相对独立性**: + * 发展具有不完全同步性(可能超前或滞后)。 + * 内部各形式间相互影响。 + * 具有历史继承性。 + * **最突出的表现**:对社会存在具有**能动反作用**(先进的意识促进发展,落后的阻碍)。 + +### 二、 社会基本矛盾(根本动力) + +1. **生产力 vs 生产关系**: + * **生产力要素**:劳动资料、劳动对象、劳动者(+科学技术)。 + * **生产关系要素**:生产资料所有制(决定性)、生产中人与人的关系、产品分配关系。 + * **作用**:物质生产方式是社会发展的决定力量。 +2. **经济基础 vs 上层建筑**: + * **经济基础**:占统治地位的生产关系的总和。 + * **上层建筑**:观念上层建筑(意识形态)+ 政治上层建筑(制度、组织、设施)。 + * **关系**:经济基础决定上层建筑;上层建筑反作用于经济基础(为经济基础服务)。 + * 当上层建筑适合经济基础时,推动社会发展;反之阻碍。 + +### 三、 社会发展的动力系统 + +* **根本动力**:社会基本矛盾。 + * 生产力和生产关系的矛盾决定着社会中其他矛盾的存在和发展。 +* **直接动力**(在阶级社会中):**阶级斗争**。 +* **重要动力**:改革(社会主义社会的自我完善)、科学技术(革命力量)。 +* **交往(Interaction)的作用**: + * 促进生产力发展。 + * 促进社会关系进步。 + * 促进文化发展与传播。 + * 促进人的全面发展。 +* **文化的作用**:提供思想保证、精神动力、智力支持、凝聚力量。 + +### 四、 人民群众在历史中的作用 + +* **唯物史观 vs 唯心史观**: + * 唯物史观:**人民群众是历史的创造者**。 + * 唯心史观:英雄史观(帝王将相决定历史)。 +* **人民群众的作用**: + 1. 社会物质财富的创造者。 + 2. 社会精神财富的创造者。 + 3. 社会变革的决定力量。 +* **群众、阶级、政党、领袖的关系**: + * 构成一个有机整体。 + * 群众是划分为阶级的。 + * 阶级通常由政党领导。 + * 政党由领袖主持。 +* **个人/杰出人物的作用**:可以加速或延缓历史进程,但不能改变历史发展的总趋势。 + +--- + +## 第4章 资本主义的本质及规律(政治经济学) + +### 一、 商品经济与价值规律 + +**1. 商品经济出现的两个条件** +* **存在社会分工**。 +* **生产资料和劳动产品属于不同的所有者**(决定性条件)。 + +**2. 商品二因素** +* **使用价值**:商品的自然属性,满足人的某种需要。反映人与自然的关系。 +* **价值**:商品的社会属性,凝结在商品中的无差别的一般人类劳动。 +* **关系**:对立统一。商品交换者必须让渡使用价值才能获得价值;二者不可兼得。 + +**3. 劳动二重性(理解政治经济学的枢纽)** +* **具体劳动**:生产不同使用价值(如木匠做桌子)。反映人与自然的关系(自然属性)。 +* **抽象劳动**:形成价值实体(耗费的体力和脑力)。反映商品生产者的社会关系(社会属性)。 +* **结论**:**同一劳动过程的两个方面**,不是两次劳动。 + +**4. 价值规律** +* **内容**:商品的价值量由**社会必要劳动时间**决定;商品按照价值量进行**等价交换**。 +* **表现形式**:价格围绕价值上下波动。 +* **作用**:调节资源配置;刺激生产力发展;导致优胜劣汰和贫富分化。 + +### 二、 资本主义经济制度的本质 + +**1. 资本原始积累** +* **定义**:用暴力手段使生产者和生产资料分离,资本迅速集中在少数人手中。 +* **途径**: + 1. 用暴力手段掠夺农民的土地。 + 2. 用暴力手段掠夺货币财富。 + +**2. 劳动力成为商品** +* **条件**: + 1. 劳动者在法律上是自由人。 + 2. 劳动者没有任何生产资料,不得不出卖劳动力。 +* **特点**:劳动力商品的使用价值是**价值的源泉**。它在消费过程中能创造出比自身价值更大的价值(即剩余价值)。 + +**3. 剩余价值生产** +* **资本的本质**:不是物,而是体现在物上的**生产关系**(剥削关系)。 +* **资本主义生产过程**:劳动过程 + **价值增殖过程**(核心)。 +* **剩余价值(m)**:雇佣工人创造的、被资本家无偿占有的、超过劳动力价值的那部分价值。唯一源泉是**雇佣劳动者的剩余劳动**。 +* **马克思劳动价值论的意义**:扬弃了古典政治经济学,为剩余价值论奠基;揭示了商品经济一般规律。 + +**4. 资本积累与社会再生产** +* **资本积累**:把剩余价值转化为资本(剩余价值资本化)。 +* **社会再生产的核心问题**:**社会总产品的实现问题**。 + * 即社会总产品的**价值补偿**和**实物替换**。 + +### 三、 资本主义的矛盾与危机及政治制度 + +* **基本矛盾**:**生产社会化**与**生产资料资本主义私人占有**之间的矛盾。 +* **经济危机**: + * **本质**:**生产相对过剩**(相对于劳动人民有支付能力的需示而言,不是绝对过剩)。 + * **根源**:资本主义基本矛盾。 +* **资本主义政治制度的局限性**: + 1. **金钱操纵**:实际是资产阶级精英统治下的民主。 + 2. **法律名义上的平等**:掩盖着事实上的不平等。 + 3. **政党维护统治**:资产阶级政党是维护资产阶级统治的工具。 + 4. **政党恶斗**:相互掣肘,决策效率低下,激化社会矛盾。 + +--- + +## 第6章 社会主义的发展及其规律 + +### 一、 社会主义五百年的历史进程 +* **从空想到科学**: + * 马克思、恩格斯创立科学社会主义。 + * 理论基石:唯物史观 + 剩余价值学说。 +* **从理想到现实**:十月革命(列宁)建立了世界上第一个社会主义国家。 +* **从一国到多国**:二战后社会主义阵营形成。 +* **中国特色社会主义**:科学社会主义在中国的成功实践。 + +### 二、 科学社会主义基本原则 +1. **历史必然性**:资本主义必然灭亡,社会主义必然胜利。 +2. **领导核心**:无产阶级及其政党(共产党)。 +3. **经济基础**:生产资料公有制。 +4. **价值追求**:消灭剥削,实现共同富裕。 +5. **最终目标**:实现共产主义(人的自由而全面的发展)。 + +### 三、 社会主义发展的规律性 +* **长期性**:从资本主义向共产主义过渡是一个漫长的历史过程。 +* **多样性**:各国国情不同,发展道路必然多样(不能一种模式)。 +* **前进性与曲折性**:事物发展不是直线的,会有波折,但总趋势是前进的。 + +--- + +## 附录:高频概念速记清单 + +| 概念 | 速记要点 | +| :--- | :--- | +| **马克思主义三大部分** | 哲学(世界观)、政治经济学(解剖)、科学社会主义(核心) | +| **物质根本属性** | 运动(运动绝对,静止相对) | +| **意识本质** | 人脑机能 + 客观存在的主观映象 | +| **两大基本特征** | 普遍联系 + 永恒发展 | +| **三大规律** | 对立统一(核心)、量变质变(状态)、否定之否定(方向) | +| **实践三大特征** | 客观现实性、自觉能动性、社会历史性 | +| **真理特性** | 客观性、绝对性、相对性 | +| **社会历史观基本问题** | 社会存在 vs 社会意识 | +| **社会发展根本动力** | 社会基本矛盾(生产力vs生产关系、经基vs上建) | +| **商品二因素** | 使用价值(自然属性) + 价值(社会属性) | +| **劳动二重性** | 具体劳动(造物) + 抽象劳动(造价) | +| **剩余价值来源** | 雇佣工人的剩余劳动 | +| **资本主义基本矛盾** | 生产社会化 vs 私人占有 | diff --git a/package-lock.json b/package-lock.json index c8179d2..5845e1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "aplayer": "^1.10.1", "element-plus": "^2.7.2", "gsap": "^3.13.0", + "pnpm": "^10.33.0", "vue": "3.5.12", "vue3-aplayer": "^1.7.3" }, @@ -1771,9 +1772,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.48.0.tgz", - "integrity": "sha512-aVzKH922ogVAWkKiyKXorjYymz2084zrhrZRXtLrA5eEx5SO8Dj0c/4FpCHZyn7MKzhW2pW4tK28vVr+5oQ2xw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", "cpu": [ "arm" ], @@ -1784,9 +1785,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.48.0.tgz", - "integrity": "sha512-diOdQuw43xTa1RddAFbhIA8toirSzFMcnIg8kvlzRbK26xqEnKJ/vqQnghTAajy2Dcy42v+GMPMo6jq67od+Dw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", "cpu": [ "arm64" ], @@ -1797,9 +1798,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.48.0.tgz", - "integrity": "sha512-QhR2KA18fPlJWFefySJPDYZELaVqIUVnYgAOdtJ+B/uH96CFg2l1TQpX19XpUMWUqMyIiyY45wje8K6F4w4/CA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", "cpu": [ "arm64" ], @@ -1810,9 +1811,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.48.0.tgz", - "integrity": "sha512-Q9RMXnQVJ5S1SYpNSTwXDpoQLgJ/fbInWOyjbCnnqTElEyeNvLAB3QvG5xmMQMhFN74bB5ZZJYkKaFPcOG8sGg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", "cpu": [ "x64" ], @@ -1823,9 +1824,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.48.0.tgz", - "integrity": "sha512-3jzOhHWM8O8PSfyft+ghXZfBkZawQA0PUGtadKYxFqpcYlOYjTi06WsnYBsbMHLawr+4uWirLlbhcYLHDXR16w==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", "cpu": [ "arm64" ], @@ -1836,9 +1837,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.48.0.tgz", - "integrity": "sha512-NcD5uVUmE73C/TPJqf78hInZmiSBsDpz3iD5MF/BuB+qzm4ooF2S1HfeTChj5K4AV3y19FFPgxonsxiEpy8v/A==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", "cpu": [ "x64" ], @@ -1849,9 +1850,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.48.0.tgz", - "integrity": "sha512-JWnrj8qZgLWRNHr7NbpdnrQ8kcg09EBBq8jVOjmtlB3c8C6IrynAJSMhMVGME4YfTJzIkJqvSUSVJRqkDnu/aA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", "cpu": [ "arm" ], @@ -1862,9 +1863,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.48.0.tgz", - "integrity": "sha512-9xu92F0TxuMH0tD6tG3+GtngwdgSf8Bnz+YcsPG91/r5Vgh5LNofO48jV55priA95p3c92FLmPM7CvsVlnSbGQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", "cpu": [ "arm" ], @@ -1875,9 +1876,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.48.0.tgz", - "integrity": "sha512-NLtvJB5YpWn7jlp1rJiY0s+G1Z1IVmkDuiywiqUhh96MIraC0n7XQc2SZ1CZz14shqkM+XN2UrfIo7JB6UufOA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", "cpu": [ "arm64" ], @@ -1888,9 +1889,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.48.0.tgz", - "integrity": "sha512-QJ4hCOnz2SXgCh+HmpvZkM+0NSGcZACyYS8DGbWn2PbmA0e5xUk4bIP8eqJyNXLtyB4gZ3/XyvKtQ1IFH671vQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", "cpu": [ "arm64" ], @@ -1900,10 +1901,23 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.48.0.tgz", - "integrity": "sha512-Pk0qlGJnhILdIC5zSKQnprFjrGmjfDM7TPZ0FKJxRkoo+kgMRAg4ps1VlTZf8u2vohSicLg7NP+cA5qE96PaFg==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", "cpu": [ "loong64" ], @@ -1914,9 +1928,22 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.48.0.tgz", - "integrity": "sha512-/dNFc6rTpoOzgp5GKoYjT6uLo8okR/Chi2ECOmCZiS4oqh3mc95pThWma7Bgyk6/WTEvjDINpiBCuecPLOgBLQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", "cpu": [ "ppc64" ], @@ -1927,9 +1954,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.48.0.tgz", - "integrity": "sha512-YBwXsvsFI8CVA4ej+bJF2d9uAeIiSkqKSPQNn0Wyh4eMDY4wxuSp71BauPjQNCKK2tD2/ksJ7uhJ8X/PVY9bHQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", "cpu": [ "riscv64" ], @@ -1940,9 +1967,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.48.0.tgz", - "integrity": "sha512-FI3Rr2aGAtl1aHzbkBIamsQyuauYtTF9SDUJ8n2wMXuuxwchC3QkumZa1TEXYIv/1AUp1a25Kwy6ONArvnyeVQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", "cpu": [ "riscv64" ], @@ -1953,9 +1980,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.48.0.tgz", - "integrity": "sha512-Dx7qH0/rvNNFmCcIRe1pyQ9/H0XO4v/f0SDoafwRYwc2J7bJZ5N4CHL/cdjamISZ5Cgnon6iazAVRFlxSoHQnQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", "cpu": [ "s390x" ], @@ -1966,9 +1993,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.48.0.tgz", - "integrity": "sha512-GUdZKTeKBq9WmEBzvFYuC88yk26vT66lQV8D5+9TgkfbewhLaTHRNATyzpQwwbHIfJvDJ3N9WJ90wK/uR3cy3Q==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", "cpu": [ "x64" ], @@ -1979,9 +2006,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.48.0.tgz", - "integrity": "sha512-ao58Adz/v14MWpQgYAb4a4h3fdw73DrDGtaiF7Opds5wNyEQwtO6M9dBh89nke0yoZzzaegq6J/EXs7eBebG8A==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", "cpu": [ "x64" ], @@ -1991,10 +2018,36 @@ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.48.0.tgz", - "integrity": "sha512-kpFno46bHtjZVdRIOxqaGeiABiToo2J+st7Yce+aiAoo1H0xPi2keyQIP04n2JjDVuxBN6bSz9R6RdTK5hIppw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", "cpu": [ "arm64" ], @@ -2005,9 +2058,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.48.0.tgz", - "integrity": "sha512-rFYrk4lLk9YUTIeihnQMiwMr6gDhGGSbWThPEDfBoU/HdAtOzPXeexKi7yU8jO+LWRKnmqPN9NviHQf6GDwBcQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", "cpu": [ "ia32" ], @@ -2017,10 +2070,23 @@ "win32" ] }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.48.0.tgz", - "integrity": "sha512-sq0hHLTgdtwOPDB5SJOuaoHyiP1qSwg+71TQWk8iDS04bW1wIE0oQ6otPiRj2ZvLYNASLMaTp8QRGUVZ+5OL5A==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", "cpu": [ "x64" ], @@ -2110,9 +2176,9 @@ "license": "MIT" }, "node_modules/@sugarat/theme": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/@sugarat/theme/-/theme-0.5.16.tgz", - "integrity": "sha512-1oTLBnWhcVtgmtKqVzJaH9eFNQiGY0U0/QXuWQ1S/apLljYHNq48jpPSAF83OOQTyVx7bRCXbdFRh0+4VXZQKQ==", + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@sugarat/theme/-/theme-0.5.17.tgz", + "integrity": "sha512-w6EwyX/5zsPC2MdGG6A4Z78lfGPedhm9fKOHAXIWwff90zPFI0LexzH7vMDcpsdgelgtkWAjYLORHbGxhsO0bA==", "license": "MIT", "dependencies": { "@giscus/vue": "^3.1.1", @@ -2125,6 +2191,9 @@ "oh-my-live2d": "^0.19.3", "vitepress-markdown-timeline": "^1.2.1", "vitepress-plugin-announcement": "0.1.7", + "vitepress-plugin-artalk": "0.1.0", + "vitepress-plugin-back2top": "0.1.0", + "vitepress-plugin-giscus": "0.1.0", "vitepress-plugin-group-icons": "1.6.5", "vitepress-plugin-image-preview": "0.1.1", "vitepress-plugin-mermaid": "2.0.13", @@ -3026,9 +3095,9 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.8.tgz", - "integrity": "sha512-p96FSY54r+WJ50FIOsCOjyj/wavs8921hG5+kVMmZgKcvIKxMXHTrjNJvRgWa/zuX3B6t2lijLNFaOyuxUH+2A==", + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.9.tgz", + "integrity": "sha512-qycIHAucxy/LXAYIjmLmtQ8q9GPnMbnjG1KXhWm9o5sCr6pOYDATkMPiTNa6/v8eELyqOQ2FsEqeoFYmgv/gJg==", "devOptional": true, "license": "MIT", "engines": { @@ -3075,9 +3144,9 @@ } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "peer": true, "dependencies": { @@ -4132,9 +4201,9 @@ } }, "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -4195,9 +4264,9 @@ } }, "node_modules/dompurify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz", - "integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.3.tgz", + "integrity": "sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -4532,10 +4601,12 @@ } }, "node_modules/fuse.js": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", - "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.2.0.tgz", + "integrity": "sha512-zf4vdcIGpjNKTuXwug33Hm2okqX6a0t2ZEbez+o9oBJQSNhVJ5AqERfeiRD3r8HcLqP66MrjdkmzxrncbAOTUQ==", "license": "Apache-2.0", + "optional": true, + "peer": true, "engines": { "node": ">=10" } @@ -4700,9 +4771,9 @@ } }, "node_modules/immutable": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", - "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", "devOptional": true, "license": "MIT" }, @@ -4995,15 +5066,15 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", "license": "MIT" }, "node_modules/lodash-unified": { @@ -5986,9 +6057,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", "optional": true, "engines": { @@ -6009,6 +6080,22 @@ "pathe": "^2.0.1" } }, + "node_modules/pnpm": { + "version": "10.33.0", + "resolved": "https://registry.npmjs.org/pnpm/-/pnpm-10.33.0.tgz", + "integrity": "sha512-EFaLtKavtYyes2MNqQzJUWQXq+vT+rvmc58K55VyjaFJHp21pUTHatjrdXD1xLs9bGN7LLQb/c20f6gjyGSTGQ==", + "license": "MIT", + "bin": { + "pnpm": "bin/pnpm.cjs", + "pnpx": "bin/pnpx.cjs" + }, + "engines": { + "node": ">=18.12" + }, + "funding": { + "url": "https://opencollective.com/pnpm" + } + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -6063,16 +6150,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/readdirp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", @@ -6134,9 +6211,9 @@ "license": "Unlicense" }, "node_modules/rollup": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.48.0.tgz", - "integrity": "sha512-BXHRqK1vyt9XVSEHZ9y7xdYtuYbwVod2mLwOMFP7t/Eqoc1pHRlG/WdV2qNeNvZHRQdLedaFycljaYYM96RqJQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -6149,26 +6226,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.48.0", - "@rollup/rollup-android-arm64": "4.48.0", - "@rollup/rollup-darwin-arm64": "4.48.0", - "@rollup/rollup-darwin-x64": "4.48.0", - "@rollup/rollup-freebsd-arm64": "4.48.0", - "@rollup/rollup-freebsd-x64": "4.48.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.48.0", - "@rollup/rollup-linux-arm-musleabihf": "4.48.0", - "@rollup/rollup-linux-arm64-gnu": "4.48.0", - "@rollup/rollup-linux-arm64-musl": "4.48.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.48.0", - "@rollup/rollup-linux-ppc64-gnu": "4.48.0", - "@rollup/rollup-linux-riscv64-gnu": "4.48.0", - "@rollup/rollup-linux-riscv64-musl": "4.48.0", - "@rollup/rollup-linux-s390x-gnu": "4.48.0", - "@rollup/rollup-linux-x64-gnu": "4.48.0", - "@rollup/rollup-linux-x64-musl": "4.48.0", - "@rollup/rollup-win32-arm64-msvc": "4.48.0", - "@rollup/rollup-win32-ia32-msvc": "4.48.0", - "@rollup/rollup-win32-x64-msvc": "4.48.0", + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", "fsevents": "~2.3.2" } }, @@ -6190,27 +6272,6 @@ "node": ">=6" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -6299,16 +6360,6 @@ "node": ">=10" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/sharp": { "version": "0.34.5", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", @@ -6465,13 +6516,13 @@ } }, "node_modules/speech-rule-engine": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-4.1.2.tgz", - "integrity": "sha512-S6ji+flMEga+1QU79NDbwZ8Ivf0S/MpupQQiIC0rTpU/ZTKgcajijJJb1OcByBQDjrXCN1/DJtGz4ZJeBMPGJw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-4.1.3.tgz", + "integrity": "sha512-SBMgkuJYvP4F62daRfBNwYC2nXTEhNXAfsBZ/BB7Ly85/KnbnjmKM7/45ZrFbH6jIMiAliDUDPSZFUuXDvcg6A==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@xmldom/xmldom": "0.9.8", + "@xmldom/xmldom": "0.9.9", "commander": "13.1.0", "wicked-good-xpath": "1.3.0" }, @@ -6588,16 +6639,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.16", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", - "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", + "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", "license": "MIT", "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "engines": { @@ -7049,6 +7099,178 @@ "vitepress": "^1 || ^2" } }, + "node_modules/vitepress-plugin-artalk": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vitepress-plugin-artalk/-/vitepress-plugin-artalk-0.1.0.tgz", + "integrity": "sha512-KvEIcQp1F2hksu3d/y0tx5j1bnTmOfluVEmMdJCpMKax1hgZRrtK3HijhMaGZ+uhjLD3fSFV19LxNmgjAa3ofg==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "^14.1.0", + "javascript-stringify": "^2.1.0" + }, + "peerDependencies": { + "vitepress": "^1 || ^2" + } + }, + "node_modules/vitepress-plugin-artalk/node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/vitepress-plugin-artalk/node_modules/@vueuse/core": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.2.1.tgz", + "integrity": "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.2.1", + "@vueuse/shared": "14.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vitepress-plugin-artalk/node_modules/@vueuse/metadata": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.2.1.tgz", + "integrity": "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vitepress-plugin-artalk/node_modules/@vueuse/shared": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.2.1.tgz", + "integrity": "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vitepress-plugin-back2top": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vitepress-plugin-back2top/-/vitepress-plugin-back2top-0.1.0.tgz", + "integrity": "sha512-Evx/GSowrrDUl/1Lbh0BPUhCa0oNVR7+Y+jQg99Bt0LcdwjQ2s3NMC9HtNJSj7FOrxBqvZl3q/z2lG4wq/5yiw==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "^14.1.0", + "javascript-stringify": "^2.1.0" + }, + "peerDependencies": { + "vitepress": "^1 || ^2" + } + }, + "node_modules/vitepress-plugin-back2top/node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/vitepress-plugin-back2top/node_modules/@vueuse/core": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.2.1.tgz", + "integrity": "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.2.1", + "@vueuse/shared": "14.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vitepress-plugin-back2top/node_modules/@vueuse/metadata": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.2.1.tgz", + "integrity": "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vitepress-plugin-back2top/node_modules/@vueuse/shared": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.2.1.tgz", + "integrity": "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vitepress-plugin-giscus": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vitepress-plugin-giscus/-/vitepress-plugin-giscus-0.1.0.tgz", + "integrity": "sha512-hJMUvUj9/GWRxBSKNFRmyDQY3mkHi61LVMW18iKynVS3TPBR60eTI4idJTS/DGKQw1yyfQOTEJa0GeNP5b7dCA==", + "license": "MIT", + "dependencies": { + "@giscus/vue": "^3.1.1", + "@vueuse/core": "^14.1.0", + "javascript-stringify": "^2.1.0" + }, + "peerDependencies": { + "vitepress": "^1 || ^2" + } + }, + "node_modules/vitepress-plugin-giscus/node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/vitepress-plugin-giscus/node_modules/@vueuse/core": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.2.1.tgz", + "integrity": "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.2.1", + "@vueuse/shared": "14.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vitepress-plugin-giscus/node_modules/@vueuse/metadata": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.2.1.tgz", + "integrity": "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vitepress-plugin-giscus/node_modules/@vueuse/shared": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.2.1.tgz", + "integrity": "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, "node_modules/vitepress-plugin-group-icons": { "version": "1.6.5", "resolved": "https://registry.npmjs.org/vitepress-plugin-group-icons/-/vitepress-plugin-group-icons-1.6.5.tgz", @@ -7445,6 +7667,15 @@ "nanoid": "^4.0.0" } }, + "node_modules/vue-command-palette/node_modules/fuse.js": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", + "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, "node_modules/vue-command-palette/node_modules/nanoid": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", diff --git a/package.json b/package.json index efb5bdc..d3861f5 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,11 @@ }, "dependencies": { "@element-plus/icons-vue": "^2.3.1", - "@sugarat/theme": "^0.5.16", + "@sugarat/theme": "^0.5.17", "aplayer": "^1.10.1", "element-plus": "^2.7.2", "gsap": "^3.13.0", + "pnpm": "^10.33.0", "vue": "3.5.12", "vue3-aplayer": "^1.7.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 15b4272..120356f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^2.3.1 version: 2.3.2(vue@3.5.12(typescript@5.9.2)) '@sugarat/theme': - specifier: ^0.5.16 - version: 0.5.16(@element-plus/icons-vue@2.3.2(vue@3.5.12(typescript@5.9.2)))(element-plus@2.11.1(vue@3.5.12(typescript@5.9.2)))(pagefind@1.3.0)(vite@5.4.19(@types/node@24.10.1)(sass@1.90.0)(terser@5.44.1))(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2))(vue@3.5.12(typescript@5.9.2)) + specifier: ^0.5.17 + version: 0.5.17(@element-plus/icons-vue@2.3.2(vue@3.5.12(typescript@5.9.2)))(element-plus@2.11.1(vue@3.5.12(typescript@5.9.2)))(pagefind@1.3.0)(vite@5.4.19(@types/node@24.10.1)(sass@1.90.0)(terser@5.44.1))(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2))(vue@3.5.12(typescript@5.9.2)) aplayer: specifier: ^1.10.1 version: 1.10.1 @@ -23,6 +23,9 @@ importers: gsap: specifier: ^3.13.0 version: 3.13.0 + pnpm: + specifier: ^10.33.0 + version: 10.33.0 vue: specifier: 3.5.12 version: 3.5.12(typescript@5.9.2) @@ -379,89 +382,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -565,36 +584,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.1': resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.1': resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.1': resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.1': resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.1': resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.5.1': resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} @@ -652,56 +677,67 @@ packages: resolution: {integrity: sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.48.1': resolution: {integrity: sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.48.1': resolution: {integrity: sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.48.1': resolution: {integrity: sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loongarch64-gnu@4.48.1': resolution: {integrity: sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-gnu@4.48.1': resolution: {integrity: sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.48.1': resolution: {integrity: sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.48.1': resolution: {integrity: sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.48.1': resolution: {integrity: sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.48.1': resolution: {integrity: sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.48.1': resolution: {integrity: sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.48.1': resolution: {integrity: sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ==} @@ -745,8 +781,8 @@ packages: '@sugarat/theme-shared@0.0.7': resolution: {integrity: sha512-rFK+NF5ORXjxmisVjVKI1A2WWu/J2NMw367n9Dxy7rF4jJE8CaHqryu3vOLwp96RUBDbaN95ABT3E4wyaGzGKA==} - '@sugarat/theme@0.5.16': - resolution: {integrity: sha512-1oTLBnWhcVtgmtKqVzJaH9eFNQiGY0U0/QXuWQ1S/apLljYHNq48jpPSAF83OOQTyVx7bRCXbdFRh0+4VXZQKQ==} + '@sugarat/theme@0.5.17': + resolution: {integrity: sha512-w6EwyX/5zsPC2MdGG6A4Z78lfGPedhm9fKOHAXIWwff90zPFI0LexzH7vMDcpsdgelgtkWAjYLORHbGxhsO0bA==} peerDependencies: '@element-plus/icons-vue': ^2.3.1 element-plus: ^2.7 @@ -1908,6 +1944,11 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + pnpm@10.33.0: + resolution: {integrity: sha512-EFaLtKavtYyes2MNqQzJUWQXq+vT+rvmc58K55VyjaFJHp21pUTHatjrdXD1xLs9bGN7LLQb/c20f6gjyGSTGQ==} + engines: {node: '>=18.12'} + hasBin: true + postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -2201,6 +2242,21 @@ packages: peerDependencies: vitepress: ^1 || ^2 + vitepress-plugin-artalk@0.1.0: + resolution: {integrity: sha512-KvEIcQp1F2hksu3d/y0tx5j1bnTmOfluVEmMdJCpMKax1hgZRrtK3HijhMaGZ+uhjLD3fSFV19LxNmgjAa3ofg==} + peerDependencies: + vitepress: ^1 || ^2 + + vitepress-plugin-back2top@0.1.0: + resolution: {integrity: sha512-Evx/GSowrrDUl/1Lbh0BPUhCa0oNVR7+Y+jQg99Bt0LcdwjQ2s3NMC9HtNJSj7FOrxBqvZl3q/z2lG4wq/5yiw==} + peerDependencies: + vitepress: ^1 || ^2 + + vitepress-plugin-giscus@0.1.0: + resolution: {integrity: sha512-hJMUvUj9/GWRxBSKNFRmyDQY3mkHi61LVMW18iKynVS3TPBR60eTI4idJTS/DGKQw1yyfQOTEJa0GeNP5b7dCA==} + peerDependencies: + vitepress: ^1 || ^2 + vitepress-plugin-group-icons@1.6.5: resolution: {integrity: sha512-+pg4+GKDq2fLqKb1Sat5p1p4SuIZ5tEPxu8HjpwoeecZ/VaXKy6Bdf0wyjedjaTAyZQzXbvyavJegqAcQ+B0VA==} peerDependencies: @@ -2928,7 +2984,7 @@ snapshots: cross-spawn: 7.0.6 gray-matter: 4.0.3 - '@sugarat/theme@0.5.16(@element-plus/icons-vue@2.3.2(vue@3.5.12(typescript@5.9.2)))(element-plus@2.11.1(vue@3.5.12(typescript@5.9.2)))(pagefind@1.3.0)(vite@5.4.19(@types/node@24.10.1)(sass@1.90.0)(terser@5.44.1))(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2))(vue@3.5.12(typescript@5.9.2))': + '@sugarat/theme@0.5.17(@element-plus/icons-vue@2.3.2(vue@3.5.12(typescript@5.9.2)))(element-plus@2.11.1(vue@3.5.12(typescript@5.9.2)))(pagefind@1.3.0)(vite@5.4.19(@types/node@24.10.1)(sass@1.90.0)(terser@5.44.1))(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2))(vue@3.5.12(typescript@5.9.2))': dependencies: '@element-plus/icons-vue': 2.3.2(vue@3.5.12(typescript@5.9.2)) '@giscus/vue': 3.1.1(vue@3.5.12(typescript@5.9.2)) @@ -2942,6 +2998,9 @@ snapshots: oh-my-live2d: 0.19.3 vitepress-markdown-timeline: 1.2.2 vitepress-plugin-announcement: 0.1.7(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2)) + vitepress-plugin-artalk: 0.1.0(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2))(vue@3.5.12(typescript@5.9.2)) + vitepress-plugin-back2top: 0.1.0(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2))(vue@3.5.12(typescript@5.9.2)) + vitepress-plugin-giscus: 0.1.0(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2))(vue@3.5.12(typescript@5.9.2)) vitepress-plugin-group-icons: 1.6.5(vite@5.4.19(@types/node@24.10.1)(sass@1.90.0)(terser@5.44.1)) vitepress-plugin-image-preview: 0.1.1(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2))(vue@3.5.12(typescript@5.9.2)) vitepress-plugin-mermaid: 2.0.13(mermaid@10.9.4)(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2)) @@ -4324,6 +4383,8 @@ snapshots: mlly: 1.8.0 pathe: 2.0.3 + pnpm@10.33.0: {} + postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -4633,6 +4694,31 @@ snapshots: javascript-stringify: 2.1.0 vitepress: 1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2) + vitepress-plugin-artalk@0.1.0(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2))(vue@3.5.12(typescript@5.9.2)): + dependencies: + '@vueuse/core': 14.2.1(vue@3.5.12(typescript@5.9.2)) + javascript-stringify: 2.1.0 + vitepress: 1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2) + transitivePeerDependencies: + - vue + + vitepress-plugin-back2top@0.1.0(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2))(vue@3.5.12(typescript@5.9.2)): + dependencies: + '@vueuse/core': 14.2.1(vue@3.5.12(typescript@5.9.2)) + javascript-stringify: 2.1.0 + vitepress: 1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2) + transitivePeerDependencies: + - vue + + vitepress-plugin-giscus@0.1.0(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2))(vue@3.5.12(typescript@5.9.2)): + dependencies: + '@giscus/vue': 3.1.1(vue@3.5.12(typescript@5.9.2)) + '@vueuse/core': 14.2.1(vue@3.5.12(typescript@5.9.2)) + javascript-stringify: 2.1.0 + vitepress: 1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.1)(async-validator@4.2.5)(markdown-it-mathjax3@4.3.2)(postcss@8.5.6)(sass@1.90.0)(search-insights@2.17.3)(terser@5.44.1)(typescript@5.9.2) + transitivePeerDependencies: + - vue + vitepress-plugin-group-icons@1.6.5(vite@5.4.19(@types/node@24.10.1)(sass@1.90.0)(terser@5.44.1)): dependencies: '@iconify-json/logos': 1.2.9