【数学 线性代数】差分约束

前言

C++算法与数据结构
本博文代码打包下载

什么是差分约束

x系列是变量,y系列是常量,差分系统由若干如下不等式组成。
x1-x2 <= y1 x2-x3 <= y2 ⋯ \cdots

可能有负环的最短路

个人习惯:如果存在a指向b的边,则a是b的前置节点,b是a的后续节点。
某差分约束有n个变量(编号从1到n),m个不等式。根据此差分约束建立有向图G。
第一步,n个节点,m条边。每个不等式 x 1 − x 2 < = y 1 都增加边 x 2 → x1 - x2 <=y1都增加边 x2 \rightarrow x1x2<=y1都增加边x2x1,边权位y1。
第二步:增加节点0,0到所有节点都有边,边权为0。
差分系统的变量和0到各节点的最短路一一对应。
性质一:差分约束所有的限制,有向图都有。故:有向图的解一定是差分约束的解。差分约束的解不一定是G的最短路。 ⟺ \iff 差分系统是G的充分不必要条件。
性质二:有向图无解时,差分约束也无解。存在负环时,有向图无解。不失一般性,以3个节点的环为例。有向图有负环时,差分系统有: x1<=x2+y1 x2<=x3+y2 x3 <=x1+y3 x1 <= x1 + y1+y2+y3 即 0 <= y1+y2+y3,和节点1,2,3是负环矛盾。可以用数学归纳法证明。
性质三:令(a1,a2 ⋯ \cdots )是有向图的解,则(a1+d,a2+d ⋯ \cdots )也是差分系统的解。因为:(x1+d)-(x2-d)等于x1-x2。
性质四:在不引入负环的前提下,缩短任意一条边的解仍然是原系统的解。将y1减去正无穷小(此边权变小),构成的新图。如果有解,也是旧系统的解。
推论一:将任何节点i的直接、间接前置节点和i增加一个正数,则新系统的解仍然是老系统的解。如果节点在环上,此环上所有节点都增加。由于环的点都增加了x,故环上的边权不变,故不会引入负环。
性质五:延长任意一条边产生的新解一定不是旧系统的解。产生的新解 x1-x2一定大于y1。
推论二:原始图,如果节点i增加了一个正整数x,则它的直接、间接前置节点都需要增加x或更多。

负环最短路

dis[t][cur]记录最多经过t条边,从0到cur的最短路。
∀ \forall cur ,dis[n][cur] != dis[n-1][cur],说明存在负环。则无解。
第一层循环枚举前置状态,t = 0 to N-1。第二循环枚举各边。
时间复杂度:O(点数边数)

template<class T = int, T iDef = INT_MAX / 2>
class CDisNegativeRing //贝尔曼-福特算法
{
public:bool Dis(int N, vector<tuple<int, int, int>> edgeFromToW, int start) {vector<T> pre(N, iDef);pre[start] = 0;for (int t = 0; t < N; t++) {auto cur = pre;for (const auto& [u, v, w] : edgeFromToW) {cur[v] = min(cur[v], pre[u] + w);}if (t + 1 == N) {for (int i = 0; i < N; i++) {if (pre[i] != cur[i]) { return false; }}}pre.swap(cur);}m_vDis = pre;		return true;}vector<T> m_vDis;
};

最长路

对应的差分系统是:x1-x2 >= y1 x2-x3 >=y2 x3-x1 >=y3
如果存在正环,则无解。
可以延长边,不能缩短边。
节点i和它的直接间接前置节点可以减去一个正数,仍然是解。

样例

【差分约束】P5960 差分约束普及+
【差分约束】P4878 [USACO05DEC] Layout G普及+
如果差分系统无解,本题无解。如果有解,求第N个变量减第一个变量的最大值。如果1不是N的前置节点,则N可无限增大,即无穷大。否则就是最短路相减。
【差分约束】P5590 赛车游戏省选-
本题求边权,任意解,即差分系统的y系列。
【差分约束】 P3275 [SCOI2011] 糖果省选-
本题求最小正整数解,利用拓扑排序和推论一。

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/72503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AutoGen :使用 Swarm 构建自治型多智能体团队

👉👉👉本人承接各类AI相关应用开发项目(包括但不限于大模型微调、RAG、AI智能体、NLP、机器学习算法、运筹优化算法、数据分析EDA等) !!!👉👉👉 有意愿请私信!!!AutoGen 的 AgentChat 模块提供了一种强大的方法来构建多智能体协作系统。 在之前的文章中,我们探讨了…

2025人工智能“落地生花”:这六大领域正掀起颠覆性革命

——从医疗到养老&#xff0c;一场“AI”的全民狂欢正在上演 2025年的春天&#xff0c;全球科技界的热搜被一个中国AI大模型“霸榜”——DeepSeek。从春晚的机器人热舞到政务系统的“数字员工上岗”&#xff0c;从医疗诊断到工业炼钢&#xff0c;这场始于春节的技术海啸&#…

第27周JavaSpringboot git初识

Git 课程笔记 一、Git 的介绍 1. Git 的诞生背景 Git 是 Linux 内核的作者 Linus Torvalds 为了更好地管理 Linux 内核开发而创建的版本控制系统。在 Linux 内核开发初期&#xff0c;由于开发者众多&#xff0c;协作成本很高&#xff0c;后来使用了 BitKeeper 工具来辅助协作…

蓝耘智算|从静态到动态:探索Maas平台海螺AI图片生成视频功能的强大能力

文章目录 &#x1f44f;一、技术介绍&#x1f44f;二、平台注册&#x1f44f;三、功能体验&#x1f44f;四、总结 随着人工智能技术的快速发展&#xff0c;视频处理和生成技术已经成为了众多行业关注的热点。最近&#xff0c;我有机会体验了蓝耘智算平台的Maas平海螺AI视频产品…

解决从deepseek接口获取的流式响应输出到前端都是undefined的问题

你的前端 EventSource 代码遇到了 undefined 连续输出 的问题&#xff0c;通常是因为&#xff1a; AI 返回的内容被拆成了单个字符&#xff0c;导致前端 JSON.parse(event.data).content 获取到的是单个字符&#xff0c;而 undefined 可能是因为某些数据块没有 content 字段。…

VLLM专题(二十七)—使用 Kubernetes

在Kubernetes上部署vLLM是一种可扩展且高效的方式来服务机器学习模型。本指南将引导您使用原生Kubernetes部署vLLM。 此外,您还可以使用以下任意一种方式将vLLM部署到Kubernetes: HelmInftyAI/llmazKServekubernetes-sigs/lwsmeta-llama/llama-stacksubstratusai/kubeaivllm…

前缀和 之 哈希表 之 和 的奇偶与倍数

文章目录 930.和相同的二元子数组523.连续的子数组和 求解连续子数组的和的问题&#xff0c;常常会使用到这个前缀和的思路&#xff0c;当然当数组存在单调性的时候&#xff0c;可以考虑使用不定长滑动窗口&#xff0c;在这里解释一下&#xff0c;何为数组的和存在这个单调性&a…

Docker Compose 和 Kubernetes(K8s)对比

Docker Compose 和 Kubernetes&#xff08;K8s&#xff09;在某些方面有相似的功能&#xff0c;但它们的 核心用途和适用场景不同。以下是它们的主要区别和联系&#xff1a; 1. Docker Compose 和 Kubernetes 的区别 对比项Docker ComposeKubernetes&#xff08;K8s&#xff0…

晶艺代理,100V3.5A高耐压LA1823完全替换MP9487--启烨科技有限公司

晶艺品牌LA1823是异步降压转换器&#xff0c;COT控制&#xff0c;PFM工作模式, 150KHz/ 250KHz/ 450KHz &#xff0c;开关频率可调节&#xff0c;输入电压4.5~100V&#xff0c;2A平均电流&#xff0c;峰值电流3.5A&#xff0c;采用ESOP8封装。 晶艺LA1823的特性&#xff1a; 4.…

PLC控制柜在技术创新驱动中功能演进 尤劲恩科技

在智能制造体系中&#xff0c;PLC控制柜不仅承担着传统设备控制的基础功能&#xff0c;更通过工业以太网、PROFIBUS等现场总线技术&#xff0c;构建起分布式控制系统&#xff08;DCS&#xff09;。这种拓扑结构使生产线具备实时数据采集、远程监控和智能决策能力&#xff0c;显…

【JavaEE】Spring Boot 日志

目录 一、日志概述二、使用日志2.1 打印日志2.2 日志框架2.2.1 门面 / 外观 模式 2.3 日志级别2.3.1 六大分类2.3.2 使用 2.4 日志级别配置2.5 日志的持久化2.6 日志文件分割2.7 日志文件格式2.8 Slf4j 简单打印日志 一、日志概述 ⽇志主要是为了发现问题, 分析问题, 定位问题…

代码随想录算法训练营第34天 | 62.不同路径 63. 不同路径 II 整数拆分 不同的二叉搜索树 (跳过)

62.不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 本题大家掌握动态规划的方法就可以。 数论方法 有点非主流&#xff0c;很难想到。 代码随想录 视频讲解&#xff1a;动态规划中如何初始化很重要&#xff01;| LeetCode&#xff1a;62.不同路径_哔哩哔哩_b…

uniapp APP权限弹框

效果图 第一步 新建一个页面&#xff0c;设置透明 {"path": "pages/permissionDisc/permissionDisc","style": {"navigationBarTitleText": "","navigationStyle": "custom","app-plus": {&…

网络安全证书培训机构有哪些

一、前言少叙 记得刚入行的时候&#xff0c;想考一个证书来装装门面&#xff0c;结果发现费用太高了&#xff0c;比当时一个月的工资都高&#xff0c;感叹网络安全这帮人真舍得花钱&#xff0c;遂放弃。后来入职网络安全公司&#xff0c;考了一个CISP&#xff0c;在工作中逐渐…

torch.argsorttorch.gather

文章目录 1. 举例说明2. pytorch 代码 1. 举例说明 torch.argsort 的作用是可以将矩阵中的元素进行从小到大排序&#xff0c;得到对应的序号。假设我们有一个向量a表示如下 a [ 8 , 7 , 6 , 9 , 7 ] \begin{equation} a[8,7,6,9,7] \end{equation} a[8,7,6,9,7]​​ 那么从小…

JSON数据格式介绍

2.5 JSON 2.5.1.JSON格式的用途 在开发中凡是涉及到『跨平台数据传输』&#xff0c;JSON格式一定是首选 2.5.2.JSON格式的说明 1.JSON数据两端要么是{}&#xff0c;要么是[] {}定义JSON对象[]定义JSON数组 2.JSON对象的格式是&#xff1a;json {key:value,key:value,...,ke…

(性能测试)性能测试工具 2.jmeter的环境搭建 3jmeter元件和4使用实例 5jmeter元件和参数化

目录 性能测试工具 性能测试工具 jemeter环境搭建 jmeter的常用目录介绍 jmeter修改语言和主题--jmeter界面的汉化 jmeter元件 jmeter元件和组件的介绍 jmeter的作用域原则 jmeter的执行顺序 案例&#xff1a;执行顺序 jmeter使用案例 jmeter线程组的介绍 jmeter…

Qt程序基于共享内存读写CodeSys的变量

文章目录 1.背景2.结构体从CodeSys导出后导入到C2.1.将结构体从CodeSys中导出2.2.将结构体从m4文件提取翻译成c格式 3.添加RTTR注册信息4.读取PLC变量值5.更改PLC变量值6.Qt读写CodeSys的共享内存 1.背景 在文章【基于RTTR在C中实现结构体数据的多层级动态读写】中&#xff0c…

大模型架构全景解析:从Transformer到未来计算范式

1. Transformer 架构 核心模型 GPT-4、BERT、T5、LLaMA、通义千问、文心ERNIE 关键技术 多头注意力&#xff1a;GPT-4 使用 96 头注意力位置编码创新&#xff1a;LLaMA 采用 RoPE&#xff08;旋转位置编码&#xff09;&#xff0c;Claude 3 引入 ALiBi归一化优化&#xff1…

AI第一天 自我理解笔记--微调大模型

目录 1. 确定目标&#xff1a;明确任务和数据 2. 选择预训练模型 3. 数据预处理 (1) 数据清洗与格式化 (2) 划分数据集 (3) 数据加载与批处理 4. 构建微调模型架构 (1) 加载预训练模型 (2) 修改模型尾部&#xff08;适配任务&#xff09; (3) 冻结部分层&#xff08;可…