当前位置: 首页 > news >正文

Tarjan 求连通性相关

复健发现自己对于 Tarjan 的一些东西都有些搞不清了啊。整理一下。

如有错误/不足,欢迎指出。

先给一些定义:

  • \(u\) 表示某个子树的根节点。
  • \(v\) 表示与 \(u\) 相连的点。如果是无向图那么不包含父亲。
  • \(fa\) 表示 \(u\) 在 DFS 生成树上的父亲节点。
  • \(dfn_u\),表示 \(u\) 点的时间戳,即 \(u\) 点被搜索的次序。\(dfn_u\) 越小,那么被搜到的就越早。
  • \(low_u\),表示 \(u\) 子树中向外连至多一条非树边所能到达的最小 \(dfn\)

我认为理解了 \(low_u\) 的定义就基本掌握 Tarjan 了。请牢记 \(low\) 的定义。

有向图的 DFS 生成树

这是一棵有向图 DFS 生成树。

有这几种边的类型:

  • 树边(黑),DFS 过程中经过的边。
  • 返祖边(红),指向祖先的边。
  • 前向边(绿),由祖先指向子树内点的边。
  • 横插边(蓝),两个没有祖先关系的点之间的连边。
  • 非树边,字面意思,除了树边的边,即返祖边、前向边、横插边。

有向图中求强连通分量(SCC)

定义:SCC 中任意两点可以互相到达。

显然这两点在一个环中。

先给出实现:

void dfs(int u){dfn[u]=low[u]=++idx,ins[u]=1,s[++tp]=u;for(int v:G[u]){if(!dfn[v])dfs(v),cmn(low[u],low[v]);else if(ins[v])cmn(low[u],dfn[v]);}if(dfn[u]==low[u]){int p;++cnt;do p=s[tp--],ins[p]=0,fa[p]=cnt,val[cnt]+=a[p];while(p!=u);}
}

我们维护一个搜索栈,记录当前可能成为一个 SCC 的所有点。

考虑 \(low\) 数组的更新。遍历 \(v\),有这几种情况:

  • \(v\) 没被搜过。先搜 \(v\),并更新 \(v\) 的信息,有 low[u]=min(low[u],low[v])
  • \(v\) 被搜过了。此时 \((u,v)\) 就是非树边。如果 \(v\) 不在栈内,那么 \(v\) 已经在其他 SCC 中了,被处理过了,不管。如果在栈内,就说明可以跟它在同一个 SCC 中(通过这条边和 \(v\) 已经在的 SCC 走到 \(u\) 的祖先,再走下来,成为了一个环),有转移 low[u]=min(low[u],dfn[v])

让我们考虑什么时候会形成一个新的 SCC。在遍历完所有子树之后,\(u\) 的所有子树中的在栈内的点(包括 \(u\))对应到原图上的子图是强连通的。有这两种情况:(下面所说的子树 \(u\) 内的点都表示子树 \(u\) 中在栈内的那些点)

  • \(low_u<dfn_u\),则子树 \(u\) 可以通过一条非树边到达 \(u\) 的祖先,然后再通过树边回到 \(u\),成环。那么 \(u\)\(fa\) 就是强连通的。又因为 \(u\) 的子树强连通,所以 \(fa\) 和子树 \(u\) 强连通。
  • \(low_u=dfn_u\),子树 \(u\) 无法回到 \(fa\) 及以上了,无法与 \(fa\) 强连通。此时就将栈中 \(u\) 及其子树都弹出,SCC 数 \(+1\)。显然栈中的数是升序的,\(u\) 及以后的都在 \(u\) 的子树内。

这些就是对上面实现比较详细的解释。

可能还有一个问题,第二个 low[u]=min(low[u],dfn[v]) 写作 low[u]=min(low[u],low[v]) 也能过。但是要注意这是 错误的。据我了解应该有挺多选手这样写的。

这样写 \(low_u\) 的定义应为经过若干条边能够到达的 \(dfn\) 最小的点。理论上,这样确实也是可做的。

但是注意到,如果搜的是一条反祖边,\(v\) 是祖先节点,此时 \(low_v\) 还在更新中,还没更新完,直接转移是无法得到你想要的 \(low_u\) 的。

但是因为有 \(low_u\le dfn_u\),而且如果按照这个定义来讲,我们记正确的 \(low_u\)\(low_{right_u}\),那么有我们求出来的 \(low_u\in[low_{right_u},dfn_u]\),而在取到这两个端点去做的时候是对的,所以 low[u]=min(low[u],dfn[v]) 写作 low[u]=min(low[u],low[v]) 也可以过。

无向图的 DFS 生成树

请自行将此图中的有向边视为无向边。

相较于有向图的 DFS 生成树,有些许不同。

  • 没有了反祖边和前向边之分。由于边无向,这两者就成一个概念了。
  • 不存在横插边。由于边无向以及 DFS 的性质,显然你搜一个子树肯定会把往外的所有边都搜完,不会留给你横插边让你在另外一个地方搜的。

所以,我们可以认为无向图的 DFS 生成树中只有树边和非树边之分。

无向图的 DFS 生成树中,\(u\) 的所有子树之间都没有连边。

无向图中求割点

定义:去掉割点后原图的连通块数量会增加。

举例:这张图中 \(2\) 是割点。

现在我们对 \(low_u\) 的定义回到 \(u\) 子树中向外连至多一条非树边所能到达的最小 \(dfn\)

考虑什么时候一个点是割点。根据定义,如果一个点的某两个子树之间在原图上没有边相连,那么这个点去掉之后连通块数量会增加。放到 DFS 生成树上去看,那么就是 \(low_v\le dfn_u\),即子树 \(v\) 无法通过非树边到达 \(u\) 以上的位置,无法跟向上的子树有连边。

至于为什么不考虑下面的子树之间没有连边,在进行过上面的操作之后,如果所有子树都与那个向上的子树有连边,显然去掉 \(u\) 以后连通块数量不会增加。否则在上面已经记录过了。我们只需要判断一个点是不是割点即可,不需要考虑去掉它之后将会形成几个连通块。

那此时的 \(low\) 的转移就应该是 low[u]=min(low[u],dfn[v]) 了。

考虑一下为什么,定义 \(low\) 为走若干条边能到达的最小 \(dfn\),使用 low[u]=min(low[u],low[v]) 的转移在此时是错的。

首先这是无向图,你可以自由移动到任何一个点。

那如果我们不走与父亲相连的边呢?这样还对吗?

可能存在子孙节点通过非树边来到了割点的情况,此时你还是能走到任意一个节点。

而且根据上面 SCC 部分的解释,这个更加错完了。

所以这样的定义是完全错误的。

此时需要特判整个树的根节点,因为它上面没有点了,只能考虑子树之间的贡献。

先看实现:

void dfs(int u,int fa){dfn[u]=low[u]=++idx;int son=0;for(int v:G[u]){if(v==fa)continue;if(!dfn[v]){dfs(v,u),++son,cmn(low[u],low[v]);if(fa&&low[v]>=dfn[u])fl[u]=1;}else cmn(low[u],dfn[v]);}if(!fa&&son>1)fl[u]=1;
}

其实上面已经讲的差不多了。\(low\) 的更新同有向图中求 SCC 的。

无向图中求割边(桥)

定义:去掉割边后原图的连通块数量会增加。

举例:这张图中 \((1,2)\) 是割边。

理解了割点的求法割边也就很好理解了。

同样的考虑什么时候一条边是割边。根据定义,如果一条边两端的子树在原图上没有连边,那么这条边去掉之后连通块数量会增加。放到 DFS 生成树上去看,那么就是 \(low_v>dfn_u\),即子树 \(v\) 无法通过非树边到达 \(u\) 及以上的位置,无法跟向上的子树有连边。

显然此时不用判什么根节点了。

实现根求割点差不多。注意如果有重边的话,我们记录的不是 \(fa\),是下来的那条边的编号,那条重边我们也是可以走的。

无向图中求边双连通分量

定义:边双连通图中去掉一条边之后,连通块数量不会增加。边双连通分量是极大的边双连通子图。

显然这条边不能是割边。换句话说,是割边将边双连通分量分开来了。

所以一种做法就是,求出所有的割边,然后删掉割边去求连通块。

甚至还要一遍 DFS,还要记录割边,太麻烦了。

我们考虑将 DFS 生成树上的树边定向为从 \(dfn\) 小的连向 \(dfn\) 大的(从上往下),非树边定向为 \(dfn\) 大的连向 \(dfn\) 小的(从下往上的反祖边),此时这个新图的 SCC 即原图的边双。

如何证明?不难发现,两个点 \(u,v\) 在一个边双中,当且仅当两点存在一个环中,环上断一条边显然没有任何影响。两个点 \(u,v\) 在一个 SCC 中,当且仅当两点在一个环中,显然这时两点可以互相到达。

对于无向图的 DFS 生成树,如果要找一个环,根据上面 \(low\) 的定义和更新方式,你显然是通过“往上走”的方式去走一条非树边的,否则没有什么意义。

然后你就发现,定向完之后跟 SCC 的做法是一样的。所以就跟 SCC 一样做即可。

注意重边。

看看实现:

void dfs(int u,int pr){dfn[u]=low[u]=++idx,ins[u]=1,s[++tp]=u;for(pii i:G[u]){int v=i.fi,id=i.se;if(id==pr)continue;if(!dfn[v])dfs(v,id),cmn(low[u],low[v]);else if(ins[v])cmn(low[u],dfn[v]);}if(dfn[u]==low[u]){int p;++cnt;do p=s[tp--],ins[p]=0,ans[cnt].pb(p);while(p!=u);}
}

几个注意点:

  • 同 SCC 部分,这里的第二个 low[u]=min(low[u],dfn[v]) 写作 low[u]=min(low[u],low[v]) 也是对的。为了方便记忆,不与其他的搞混,建议写前者。
  • 因为不存在横插边,所以可以不记 \(ins\) 数组。

无向图中求点双连通分量

定义:点双连通图中去掉一个点之后,连通块数量不会增加。点双连通分量是极大的点双连通子图。

显然这个点不是割点。换句话说,是割点将点双连通分量分开来了。

先看实现:

void dfs(int u,int fa){if(!SZ(G[u])){ans[++cnt].pb(u);return;}dfn[u]=low[u]=++idx,s[++tp]=u;for(int v:G[u]){if(v==fa)continue;if(!dfn[v]){dfs(v,u),cmn(low[u],low[v]);if(low[v]>=dfn[u]){int p;++cnt;do p=s[tp--],ans[cnt].pb(p);while(p!=v);ans[cnt].pb(u);}}else cmn(low[u],dfn[v]);}
}

实现跟求割点的也差不多,就是搜到割点的时候弹出栈内 \(u\) 之前的点,注意割点会被多个点双共用,所以在割点作为根的时候不弹出,当然也不要忘记后面加入答案。

注意孤点。

相关文章:

Tarjan 求连通性相关

复健发现自己对于 Tarjan 的一些东西都有些搞不清了啊。整理一下。 如有错误/不足,欢迎指出。 先给一些定义:\(u\) 表示某个子树的根节点。 \(v\) 表示与 \(u\) 相连的点。如果是无向图那么不包含父亲。 \(fa\) 表示 \(u\) 在 DFS 生成树上的父亲节点。 \(dfn_u\),表示 \(u\…...

暑假学习笔记

Hadoop 生态:实时 + 离线一体化 Flink on YARN 初体验 使用 Flink 1.17.1 提交 yarn-session 模式,队列 queue.stream 独享 4G 堆、2 vcore;编写 Kafka → Hive 的流式入湖作业,消费 user_behavior Topic,Checkpoint 30 s,Exactly-Once 写入 Hive 表 ods_log_rt,实现分钟…...

qoj #8557. Goldberg Machine 题解

有意思原题:https://qoj.ac/problem/8557 弱化版:https://www.luogu.com.cn/problem/P7830 但是弱化版要求做到更优复杂度,但是没有修改。 本文的 参考文章钦定树以 \(1\) 为根。钦定所有点 \(u\neq 1\) 的 \(e,t\) 循环位移成 \(e_{u,k_u-1}=fa_u\),就是把父亲丢到最后。 …...

centos7云主机磁盘清理过程纪要

云主机总磁盘大小为120G,在阿里云控制台配置了磁盘使用达90%告警 1. 收到告警短信 2. 当前磁盘占用情况 df -h | grep dev 已达到 89% 3. 开始排查 3-1. 查看哪个目录占用最大 du -sh /* 或者 du -sh /* | sort -h 发现 /www 目录占用 69G 3-2. 查看 /www du -sh /www/* /ww…...

『随笔』我的唱歌练习史

继续加油!因为热爱。...

2025浙江省信息通信业职业技能竞赛-数据安全管理员竞赛-决赛wp

通信证-签到flag{data_security_is_very_interesting}数据加密与解密-KeekKey题目描述:在数据安全领域,弱密钥和不安全的加密方式如同数字世界的 "隐形杀手",可能引发严重安全漏洞,威胁个人、企业甚至国家网络安全。如金融交易系统使用弱密钥,会被黑客暴力破解篡…...

Java基础核心问题解析

Java基础核心问题解析:方法、数组与类的深度探讨 在Java学习过程中,方法参数传递、数组特性、类与对象的关系等是基础且核心的知识点,也是容易产生困惑的地方。本文将围绕课前提出的一系列问题,逐一解析,帮助大家深入理解这些概念。 一、方法相关问题解析 先看这段代码,我…...

2025年浙江省信息通信业职业技能竞赛-数据安全管理员竞赛-初赛WriteUp

数据传输-网恋需谨慎:你是一个管理员,在一个名为orwell.freenode.net的服务器上结识了用户RiotCard85,RiotCard85主动联系了你,询问近况并提到他最近在做一个项目想让你看看。项目中隐藏了一些有趣的信息和内容,不幸的是黑客截获了你们的的网恋聊天记录,请分析找出RiotCa…...

九三阅兵实时记录+次日补

激动啊!情绪有点激动。...

铸网-2025”山东省工业互联网网络安全职业技能竞赛wp(职工组)

ICS失窃的工艺下载后test.PCZ文件,需要使用力控软件打开。但电脑没有安装这个软件,尝试把后缀名改为.zip,解压后直接搜索flag文本:成功在文件中找到flag:flag{D076-4D7E-92AC-A05ACB788292}。工控协议分析WireShark打开分析,追踪TCP流,flag被逐字符藏在流量中:拼凑起来…...

视洞R33定制版改造自制IPC网络摄像头(可rtsp可web)

这期的主角是视洞R33智能摄像头,LT定制版。我们通过修改启动命令让它运行开放系统,并且搭建rkipc平台,通过WEB/VLC预览视频画面 硬件配置很高啊,主控使用RV1106G2(带0.5T NPU),传感器gc4023,宽视角分辨率2560x1440@30fps,实测4M分辨率能跑满。能连WiFi,支持双向对讲、红…...

二十一、流水线的冒险与处理

目录总览:冒险的类型1. 结构冒险 (Structural Hazard)2. 数据冒险 (Data Hazard)3. 控制冒险 (Control Hazard)总结表流水线的冒险(Hazard)是破坏流水线顺畅执行,导致流水线不得不停顿(Stall)或清空(Flush)的主要因素。处理这些冒险是流水线设计的核心挑战。我们将详细…...

java线程的一些思考

java线程AI问答join是怎么实现的 1.join() 方法被 synchronized 修饰,意味着当前线程调用 t.join() 时,必须先获取目标线程 t 的对象锁(即进入 t 的同步代码块)。 2.方法内部通过 while (isAlive()) 循环检查目标线程是否存活: -若存活,当前线程调用 wait(0)(在目标线程…...

2025智能数据分类分级产品选型指南:构建数据治理的智能基座

2025智能数据分类分级产品选型指南:构建数据治理的智能基座在《数据安全法》《个人信息保护法》以及《数据安全技术 数据分类分级规则》(GB/T 43697-2024)等法规标准的推动下,数据分类分级已从“可选项”变为企业数据安全治理的“必答题”。面对金融、运营商、政务等行业中…...

这是我的第一个博客

这是我的第一个博客...

3

12...

eqw

qwe...

第一个c语言项目

1.打开vs 2.创建项目 3.创建源文件 .c 源文件 .h 头文件 注意后缀: .cpp 编译器会按照C++语法来编译代码 .C 编译器会按照C语言来编译代码 4.写代码 C语言一定要有(主函数)main函数 C语言规定:main函数是程序的入口 一个工程中nain函数有且仅有一个 include.h s…...

GitHub Copilot 2025年8月最新更新!

GitHub Copilot 2025年8月最新更新!GitHub Copilot迎来2025年8月重大更新,新增自动模型选择功能,可根据可用性智能匹配最优AI模型,提升开发效率。安全方面增加敏感文件编辑确认机制,同时优化了代理工作流程和终端自动批准功能。更新还支持AGENTS.md文件指导团队协作,并改…...

NOIP 模拟赛十五

Ds+计数DP+计数DP/容斥+根号重构range 将所有值以及除以二所能得到的所有值插入一个数据结构里,如果变为 \(0\) 就停止。 那么答案即为第 \(m+1\) 大的值减去第 \(m\) 大的值和前缀最小值取 \(\min\) 的差。 维护这个使用权值树状数组做到小常数 \(O(n\log^2 n)\) 。 注意查排…...

面试必备进程调度:fg,bg,jobs,ctrl+z,

面试必备进程调度:fg,bg,jobs,ctrl+z,& linux提供的fg和bg命令,可以让我们轻松调度正在运行的任务 假如你发现前天运行的一个程序需要很长的时间,但是需要干前天的事情,你就可以用ctrl-z挂起这个程序,然后可以看到系统的提示: [1]+ Stopped /root/bin/rsync.sh然后我们…...

完整教程:计算机毕设 java 多媒体教室管理系统 基于 Java+SSM 的多媒体教室运维平台 Java+MySQL 的教室预约与设备管理系统

完整教程:计算机毕设 java 多媒体教室管理系统 基于 Java+SSM 的多媒体教室运维平台 Java+MySQL 的教室预约与设备管理系统pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…...

笔记一

大家好!我是一名计算机相关专业的学生,平常做的最多的事情就是坐在电脑前敲代码解决各种 “小难题”。但写代码让我养成了 “遇到问题不逃避” 的思维,毕竟调试 BUG 时,多试一次可能就会有新突破。 说到值得分享的记忆,那就是我对于一些体育项目的热衷,比如打排球比赛,你…...

二十、指令流水线的基本实现

目录一、设计原则 (Design Principles)二、逻辑结构 (Logical Structure)三、时空图表示 (Space-Time Diagram Representation)总结一、设计原则 (Design Principles) 流水线的设计遵循几个核心原则,以确保其正确性和高效性。任务分解 (Decomposition)原则: 将指令的完整执行…...

物料模板匹配成功后,自动跟随的逻辑

问题简介 在对物料进行模板匹配时,往往是去匹配物料最突出的部分。然后在根据匹配到的位置。再去找我们需要测量或者检测部分。那么,这里就涉及到一个问题。该如何根据我们模板匹配到的特定位置,计算偏差值,并进行一些测量工具(卡尺,ROI)的跟随移动。 获取相对位置 此处…...

TCL t508n 关闭电话语音王提醒/改用4G

先吐槽一波( TCL的系统真的比原生还毛坯,到目前为止部分功能没有完善由于学业压力本文缺少部分图片说明,请见谅改用4g 打开拨号界面输入 ##4636## 设置首选网络类型 NR就是5G ,LTE是4G,WCDMA 3G 只用4g就选择LTE only 按照自己的需求选择 https://pic1.imgdb.cn/item/68c5…...

完整教程:Markdown 编辑器 语法

完整教程:Markdown 编辑器 语法pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; fon…...

天地图的带洞多边形操作

/** 往 polygon 中添加一个洞 */ function addHole(polygon: T.Polygon) {const handler = new T.PolygonTool(map)handler.open()handler.addEventListener(draw, ({ currentPolygon }) => {const oldLnglats = polygon.getLngLats()map.removeOverLay(currentPolygon)poly…...

k8s集群中一台etcd的pod异常

k8s集群中一台etcd的pod异常 记一次etcd报错2380bind already in use杀掉容器依然无效 起初通过命令:kubectl get pod -n kube-system 发现etcd容器异常在主节点通过kubectl logs查看pod日志发现很明显的报错端口被占用当时查看2380端口确实有在占用通过nerdctl stop指令试着停…...

深入解析:基于51单片机电子称称重压力检测阈值报警系统设计

深入解析:基于51单片机电子称称重压力检测阈值报警系统设计pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New",…...

手撕大模型|KVCache 原理及代码解析

在大型语言模型(LLM)的推理过程中,KV Cache 是一项关键技术,它通过缓存中间计算结果显著提升了模型的运行效率。本文将深入解析 KV Cache 的工作原理、实现方式,并通过代码示例展示其在实际应用中的效果。 一、为什么需要 KV Cache? 在 Transformer 进行自回归推理(如文…...

Kuby免疫学读书笔记01——造血干细胞

造血干细胞(HSC, Hematopoietic stem cell) 血细胞的起源造血干细胞位置骨髓(主要) 脾和肝(少量)分裂与分化正常状态多部份沉默 小部分分裂并分化 分裂得到的daughter cells部分依旧保持分裂分化潜力 另一部分分化为祖细胞,自我更新能力下降,并更倾向于分化为血细胞感染状态和…...

微信群机器人开发

使用微信云pad协议来开发微信机器人,可以开发的项目很多,例如一些娱乐机器人、云发单系统,私域流量的智能管理和营销拓客,还有一些自动采集和发朋友圈的云端系统等。每个行业都有需求这样的系统应用,在线教育、金融、电商已经一些个人微商应用。 可开发的功能包括但不限于…...

动态规划和马尔可夫决策对比

二、三大关键维度的效果对比 1. 问题适配性:动态规划适配 “简单线性流程”,MDP 适配 “复杂网状流程” 动态规划的优势在于 “处理线性、低维度的多阶段决策”,MDP 的优势在于 “处理多维、网状的动态决策”,二者在论文场景中的适配效果差异显著:动态规划在问题二中的适配…...

20250913 之所思 - 人生如梦

20250913 之所思这一周发生了太多的事,连续两晚彻夜失眠,咳嗽不止,但是工作又特别忙,没有时间和精力来复盘,今天身体稍微恢复了一点,好好整理一下9.9日晚上十点,软件刚刚发出来,同事们刚刚下班,结果某人说客户那边今天测试发现了两个严重的问题,一定要今天解决,并且…...

电视剧和综艺

综艺团建不能停电视机春色寄情人 爱情剧...

天地图编辑多边形和折线时,双击删除编辑点

天地图的编辑不支持删除编辑点的操作,于是研究写了一个。 // 使用 lodash 的防抖函数,防止双击时触发两次 const removeDotEventListener = debounce((e: T.MapEvent) => {// 获取被点击的目标// @ts-ignoreconst classList: DOMTokenList = e.originalEvent.target.class…...

Codeforces Round 1049 (Div. 2)

这场质量非常高。 A 我像区,我怎么卡 A 卡那么久。 睡眠不足会导致思路不清晰。这种题显然应该考虑所有位置不正确的字符。 对于一个在 \(0\) 位置上的 \(1\) 一定有一个与它未匹配的 \(0\),考虑能否通过一次操作将它们归位。 对于操作我们显然应该选择一个未归位的 \(0\) 和…...

POCamp 2023

P14011 [POCamp 2023] 珿求 / bootfall 神人题目。 令 \(A\) 为当前选择 \(a\) 的和,\(D\) 同理。我们要尽量让 \(\max(0, A - D) > \max(0, A - D)\)。 分类讨论,发现当 \(A - D \leq 0\) 且 \(A - D \leq 0\) 的时候一定平局,然后是两种特殊情况,若 \(A - D < 0 \w…...

美团AI面试

1、什么是正向代理和反向代理?两者有什么区别? 2、正向代理的作用时候,使用正向代理去访问被屏蔽的网站会怎样 3、JMM是什么,volintile的作用是什么 3、多线程中原子性的怎么实现的 4、数据库的事务分别是什么,他们解决了什么问题 5、可重复读是怎么实现的,他是怎么解决幻…...

技术面:Spring (bean的生命周期、创建方式、注入方式、作用域)

Spring Bean的生命周期是什么样的? 在Spring容器里一个Bean的从创建到销毁一般都是经历了以下几个阶段: 定义阶段(Bean元信息配置)=>实例化阶段(创建Bean对象)=>初始化阶段(执行初始化逻辑)=>使用阶段(Bean可用)=>销毁阶段(释放资源)定义阶段(BeanDef…...

马尔可夫决策

马尔可夫决策 马尔可夫决策:随机动态环境下序贯决策,其核心假设是 “马尔可夫性”—— 即 “未来状态的概率分布仅依赖于当前状态,与当前状态之前的历史无关”。MDP 的最终目标是找到一套最优策略 π(π: S→A,即 “在每个状态下选择哪个动作” 的规则) 马尔可夫决策可以…...

十九、指令流水线的基本概念

目录一、核心思想:类比工厂装配线二、一个经典的5级流水线模型(RISC)三、流水线的可视化:时空图四、流水线的优势五、流水线的挑战: hazards(冒险/冲突)总结指令流水线是一个计算机体系结构中的核心概念,旨在提高处理器的效率和吞吐率。 一、核心思想:类比工厂装配线 …...

本地布署Diffusers库 实现文生图 - yi

本地布署Diffusers库 实现文生图本地布署Diffusers库实现文生图 本次随笔,记录开源Python库Diffusers库的使用。 Diffusers库由Hugging Face维护,拥有活跃的社区和丰富的文档。Diffusers库是专注于扩散模型(Diffusion Models)的开源Python库。Diffusers库多任务支持​​:支…...

【光照】[光照模型]发展里程碑时间线

【从UnityURP开始探索游戏渲染】专栏-直达图形学光照模型发展史:技术演进与里程碑 section 基础奠基期(1960s-1970s)1967 : Lambert模型(漫反射) - Bui Tuong Phong提出 1971 : Gouraud着色 - Henri Gouraud发明顶点插值着色 1973 : Warnock算法 - 首次实现隐藏面消除 1975…...

算法设计作业-week1

任务一:企业内部编码规范参考 https://max.book118.com/html/2020/1120/8077006051003017.shtm任务二:《数学之美》阅读 读《数学之美》第二章:自然语言处理从规则到统计的启示 在阅读吴军博士《数学之美》第二章后,我对自然语言处理(NLP)的发展历程有了深刻的认识。这一…...

git merge

git merge :合并分支,从指定的分支名合并到当前所处的分支上。...

C语言学习

file:/D:/study/C语言/test1.c 现在开始学习c语言了,感觉跟java的大差不差,之后一段时间就学他吧。还有就是想吐槽一下devc的功能性有点差,连把代码文件拖拽到这里都不行。...

Ubuntu 的剪贴板

在 Ubuntu 上可以安装 copyq: sudo apt install copyq然后启动 copyq: copyqUbuntu 默认 Win+V 快捷键是打开通知,可以进行修改:为 copyq 添加快捷键,命令必须是 copyq toggle,名称可以随意。...

IDAPro--MCP详细配置教程

IDAPro--MCP详细配置教程 本文介绍如何配置idamcp实现ai自动化分析二进制文件,用于解决CTF竞赛中reverse与pwn类型的题目 IDA版本:9.1专业版 mcp:cherrystudio,lmstudio(本地部署ai) 一、项目简介 项目地址:https://github.com/mrexodia/ida-pro-mcp 功能:与IDApro实现联动…...