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

动态规划算法:完全背包类问题

前言

现在我们考虑下面的问题:
(1)小明有一个背包,背包容积为v,有m种物品,其中第i种物品的价值为val[i],体积为t[i]每样物品有无限个,请问背包内物品总价值最大为多少?

(2)小明有若干面值的硬币nums,小明需要买一个物品需要m元,小明想知道自己的硬币能否刚好凑够m元,如果可以,那么需要的最少硬币数量是多少?假设每种面值的硬币数量不做限制

分析这些问题我们发现,后两个问题仅需要一个结果,一个数字,因此可以使用动态规划来解决。而这两个问题与上一篇文章中讲的问题的区别就在于,每种物品可以放入无限次。这种问题一般叫做完全背包问题,暨每个物品可以选择无数次。

还记得之前我在回溯算法的子集问题文章中描述过这样一个问题:
给你一个无重复元素的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的所有不同组合 ,并以列表形式返回。你可以按任意顺序返回这些组合。candidates中的同一个数字可以无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。(文章链接:回溯算法(1):子集问题)

可以看到这些子集问题具有高度相似性,每个回溯的题型都对应了一个动态规划的案例,对于使用回溯方法解决这个问题我已经讲过了,今天我们要解决的是使用动态规划来解决这些问题。注意,使用动态规划方法解决就会损失具体信息,选择方案时一定要看一下题目要求
没看过我上一篇文章的请移步:动态规划算法:01背包问题(子集问题)

问题分析

这里我们分析问题(1):
小明有一个背包,背包容积为v,有m种物品,其中第i种物品的价值为val[i],体积为t[i]每样物品有无限个,请问背包内物品总价值最大为多少?

dp数组的定义
首先确定dp数组的定义,与上一篇文章一致,
dp[i][j]:在0i种物品中选取若干物品放入容积为j的背包可能获得的最大价值。

dp数组的状态转移
不同之处主要在dp[i][j]的状态转移过程中,还是两种情况:
(1)当j<t[i]时,背包无法放入第i种物品,因此能取得的最大价值与前i-1种能取得的最大价值相同,暨dp[i][j] = dp[i-1][j]
(2)当j≥t[i]时,可以放入第i种物品,当我们不放入第i种物品,则dp[i][j] = dp[i-1][j]。当我们放入一个i种物品时,(注意,差别就在这里!!!),背包剩余容量为j-t[i],我们能获得的价值是:dp[i][j] = dp[i][j-t[i]] + val[i]
迟钝的同学还没发现问题,这里用伪代码我们横向对比一下:
01背包(上一节案例):

if(j >= t[i]) dp[i][j] = max(dp[i-1][j], val[i] + dp[i-1][j-t[i]]);

完全背包(本节案例)

if(j >= t[i]) dp[i][j] = max(dp[i-1][j], val[i] + dp[i][j-t[i]]);

差别体现在容积缩小后的处理,由于在题目中我们得知,我们可以放入任意数量的同种物品,因此背包容积缩小后,内部仍然可能有第i种物品。默念一下定义:
dp[i-1][j-t[i]]:在0i-1种物品中选取若干物品放入容积为j-t[i]的背包可能获得的最大价值。
因此,如果我们使用dp[i-1][j-t[i]]是不正确的,因为这相当于我们背包中第i种物品只有一个。
我们应该使用的是:dp[i][j] = max(dp[i-1][j], val[i] + dp[i][j-t[i]])
在这里插入图片描述

dp数组的初始化
初始化的过程是最能体现出01背包与完全背包差异性的一个步骤,直接上代码展示:

for(int i = 0; i<=v; i++) {dp[0][i] = ((int)(i/t[0]))*val[0];
}

与之前不同之处在于,现在只要背包还放得下,我么就要将第0个物品放进去,没有次数限制。

完整代码:

#include <iostream>
#include <vector>
using namespace std;int main() {int v, m;cin >> m >> v;vector<int> t(m, 0);vector<int> val(m, 0);for(int i = 0; i<m; i++) cin >> t[i] >> val[i]; vector<vector<int>> dp(m, vector<int>(v+1, 0));for(int j = 0; j <= v; i++) {dp[0][j] = (j/t[0])*val[0];}for(int i = 1; i < m; i++) {for(int j = 0; j <= v; j++) {if( j < t[i] ) dp[i][j] = dp[i-1][j];elsedp[i][j] = max(dp[i][j-t[i]] + val[i], dp[i-1][j]);}}cout << dp.back().back() << endl;return 0;
}

维度压缩

同理我们也可以用一个维度来代替两个维度,与上一篇文章类似,但是有一点点细微的差别,我们先上代码,再来看差别。

完整代码(维度压缩后)

#include <iostream>
#include <vector>
using namespace std;int main() {int v, m;cin >> m >> v;vector<int> t(m, 0);vector<int> val(m, 0);for(int i = 0; i < m; i++) cin >> t[i] >> val[i];vector<int> dp(v+1, 0);for(int i = 0; i < m; i++) {for(int j = 0; j <= v; j++) {if(j >= t[i]) dp[j] = max(dp[j], dp[j-t[i]] + val[i]); }}cout << dp.back() <<endl;return 0;
}

维度压缩的思想是一样的,把第一个维度消掉,但是在for循环内部遍历是顺序与之前发生了改变,我们来对比一下:
01背包(上一节案例)

	for(int i = 0; i < m; i++) {for(int j = v; j >= 0; j--) {if(j < t[i]) dp[j] = dp[j];		// 这一行其实没有用,为了让大家更加清晰else dp[j] = max(dp[j], dp[j-t[i]] + val[i]);}}

完全背包(本节案例)

	for(int i = 0; i < m; i++) {for(int j = 0; j <= v; j++) {if(j >= t[i]) dp[j] = max(dp[j], dp[j-t[i]] + val[i]); }}

在上一节中我们使用了从后向前遍历避免数据污染,而这节课我们使用了从前向后遍历,实现了题目的要求,为什么会这样呢?,我们从状态转移图来看:
在这里插入图片描述
对于01背包,推导dp[j]的源数据应该是来自上一行的,不会被改变的数据。而如果从小到大遍历,在维度压缩后,数据一定会被改变,因为可以存储数据的维度消失了,所有的数据都在当前维度上。
对于完全背包,可以看到,在未压缩维度时,我的数据就是来自于同一行的,已经被修改过的数据,因此压缩维度后不会参数任何影响。推导方向决定了我必须先更新数据再进行计算。

补充

对于前言中提到的问题(2),如果大家认真看了上一篇文章以及这一篇文章,相信已经没有任何难度了,子要改变一下dp[i][j]的定义以及dp[i][j]的取值方法即可。因此我在这里也不做过多讲述。

小结

在这两篇文章里我们详细讲述了如何使用动态规划方法来解决子集类的问题。在阉割掉最终结果包含信息量的前提下可以快速计算出想要的答案。
这里问题基于子集的不同性质,可能演化出不同的变种,但是实质上都是一样的,无非是求(1)子集内元素的和、(2)子集内元素的数量、(3)满足条件的子集个数。大家遇到问题不要慌,可能做一个脑筋急转弯,分清是哪一种情况,之后代码怎么写自然就清楚了。

举个例子力扣上的例子:

目标和-力扣

给你一个非负整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :
例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1"
返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

看到这道题,题目要求返回的是数目,不是具体表达式,因此条件反射的要使用动态规划。那么这道题和我们的子集问题有联系吗?乍一看没有,实际上我们分析一下。

表达式中前面是加号的数字实际上就是正数,前面是减号的数字实际上就是负数。假设数组元素总和为sum,前面为加号的元素的和为t,那剩余的就是前面是减号的数字,他们的总和就是(sum-t)

要求表达式的和为target,暨t-(sum-t) = target,因此t = (target + sum)/2

换句话说,这道题描述的就是我刚刚说的(3)求满足条件的子集个数。就是让你在给定的元素中寻找一些子集,另这些子集的元素的和为 (target + sum)/2,返回符合条件的子集个数罢了。

这就是我想表达的,要从看似毫无关联的题干中找到问题的本质。这种能力需要锻炼,希望大家早日具有这样的能力!

相关文章:

动态规划算法:完全背包类问题

前言 现在我们考虑下面的问题&#xff1a; &#xff08;1&#xff09;小明有一个背包&#xff0c;背包容积为v&#xff0c;有m种物品&#xff0c;其中第i种物品的价值为val[i]&#xff0c;体积为t[i]&#xff0c;每样物品有无限个&#xff0c;请问背包内物品总价值最大为多少?…...

数据存储方式补码原码反码

1. 关于数据存储&#xff08;补码、原码、反码&#xff09; 有符号类型&#xff08;Signed Types&#xff09; 存储方式&#xff1a;现代计算机普遍采用 补码&#xff08;Two’s Complement&#xff09; 存储有符号整数。 原码&#xff1a;最高位为符号位&#xff08;0正&…...

【AAudio】A2dp sink创建音频轨道的源码流程分析

一、AAudio概述 AAudio 是 Android 8.0(API 级别 26)引入的 C/C++ 原生音频 API,专为需要低延迟、高性能音频处理的应用设计,尤其适用于实时音频应用(如音频合成器、音乐制作工具、游戏音效等)。 1.1 主要特点 低延迟:通过减少音频数据在内核与用户空间之间的拷贝,直…...

黑马点评之Feed流技术实现关注推送与滚动分页查询

Feed流 关注推送也叫做Feed流&#xff0c;直译为“投喂”。为用户持续的提供“沉浸式体验”&#xff0c;通过无限下拉刷新获取新的信息。 Feed流&#xff08;信息流&#xff09;是一种常见的内容分发形式&#xff0c;通过动态更新的内容列表向用户展示个性化或实时信息。典型应…...

vue3+canvas裁剪框样式【前端】

目录 canvas绘制裁剪框&#xff1a;拖拽改变框的大小&#xff1a;圆圈样式&#xff1a;方块样式&#xff1a; canvas绘制裁剪框&#xff1a; // 绘制裁剪框 const drawCropRect (ctx: CanvasRenderingContext2D): void > {if (cropRect.value.width > 0 && crop…...

Python 设计模式:模板模式

1. 什么是模板模式&#xff1f; 模板模式是一种行为设计模式&#xff0c;它定义了一个操作的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板模式允许子类在不改变算法结构的情况下&#xff0c;重新定义算法的某些特定步骤。 模板模式的核心思想是将算法的固定部分提取…...

usb2.0的硬件知识(一)

一、USB2.0的硬件知识 1.1 USB2.0速率 USB 2.0协议支持3种速率&#xff1a;低速(Low Speed&#xff0c;1.5Mbps)、全速(Full Speed, 12Mbps)、高速(High Speed, 480Mbps)&#xff1b;USB Hub、USB设备&#xff0c;也分为低速、全速、高速三种类型。 1.2 USB2.0硬件线序组成 U…...

LangGraph(二)——QuickStart样例中的第二步

目录 1. 添加依赖2. 官网QuickStart——第二步&#xff1a;用工具增强聊天机器人2.1 Tavily Search2.2 简单测试Tavily Search2.3 添加带工具的ChatBot node2.4 添加tool node2.5 添加条件边2.6 可视化StateGraph2.7 构建聊天循环 参考 1. 添加依赖 LangGraph(一)——QuickStar…...

机器学习第二篇 多变量线性回归

数据集&#xff1a;世界幸福指数数据集中的变量有幸福指数排名、国家/地区、幸福指数得分、人均国内生产总值、健康预期寿命、自由权、社会支持、慷慨程度、清廉指数。我们选择GDP per Capita和Freedom&#xff0c;来预测幸福指数得分。 文件一&#xff1a;linear&#xff0c;…...

【MCP Node.js SDK 全栈进阶指南】中级篇(3):MCP高级资源设计

前言 在MCP TypeScript-SDK的初级篇中,我们介绍了资源开发的基础知识,包括静态资源与动态资源的创建、资源模板设计与参数提取,以及基本的资源列表与发现机制。随着应用规模的扩大和复杂性的提高,我们需要更加高级的资源设计方案来应对各种挑战。 本文作为中级篇的第三篇…...

PostgreSQL 常用日志

PostgreSQL 常用日志详解 PostgreSQL 提供了多种日志类型&#xff0c;用于监控数据库活动、排查问题和优化性能。以下是 PostgreSQL 中最常用的日志类型及其配置和使用方法。 一、主要日志类型 日志类型文件位置主要内容用途服务器日志postgresql-<日期>.log服务器运行…...

PostgreSQL认证培训推荐机构

首先来看一张2025年4月份db-engines上的数据库排行情况&#xff0c;前三名是雷打不动的Oracle、MySQL、Microsoft SQL Server&#xff0c;排名第四的就是我们今天的主角 - PostgreSQL数据库&#xff0c;从这张图上可以看出&#xff0c;PostgreSQL数据库的上升超非常明显&#x…...

2025年NISP一级题库试题

NISP一级考试只考50道单选题&#xff0c;难度不算大&#xff0c;话不多说&#xff0c;直接上硬菜&#xff01; 1、物理销毁的方式不包括&#xff08;&#xff09; .消磁 B.焚化炉烧毀 C.反复覆写数据 &#xff24;.机器硏磨粉碎 2、信息安全应该建立贯穿信息系统的整个生命周期…...

pip install pymysql报错

python安装pymysql报错解决 【现象】 很多时候会出现安装pip包报错的问题&#xff0c;看过很多网上教程以及ai都是如下说法&#xff1a; 镜像问题pip版本问题ssh证书问题网络问题… 在遇见这些情况时&#xff0c;上述的各种解决方法都一一实验过但最后都是ERROR。 【解决办…...

达梦官方管理工具 SQLark 更新--不仅支持达梦、Oracle、MySQL,还新增 PostgreSQL 数据库!

SQLark 是一款面向信创应用开发者的数据库开发和管理工具&#xff0c;用于快速查询、创建和管理不同类型的数据库系统&#xff0c;已支持达梦、Oracle、MySQL数据库&#xff1b;在最新的 V3.4 版本中&#xff0c;SQLark 新增了对 PostgreSQL 的支持&#xff0c;兼容 PostgreSQL…...

Windows 同步-互锁变量访问

互锁变量访问 应用程序必须同步对多个线程共享的变量的访问。 应用程序还必须确保对这些变量的作以原子方式执行&#xff08;完全或根本不执行&#xff09;。 对正确对齐的 32 位变量的简单读取和写入是原子作。 换句话说&#xff0c;你最终不会只更新变量的一部分;所有位都以…...

前端学习笔记

文章目录 前端主要内容基于脚手架创建前端工程vue的基本使用axios 路由Vue-Router路由组成嵌套路由 状态管理 vuex心得 前端主要内容 HTML、CSS JavaScript axios Vue基础语法&#xff08;router、vuex、typescript&#xff09; Element UI 基于脚手架创建前端工程 node.js …...

2025-04-22| Docker: --privileged参数详解

在 Docker 中&#xff0c;--privileged 是一个运行容器时的标志&#xff0c;它赋予容器特权模式&#xff0c;大幅提升容器对宿主机资源的访问权限。以下是 --privileged 的作用和相关细节&#xff1a; 作用 完全访问宿主机的设备&#xff1a; 容器可以访问宿主机的所有设备&am…...

Java八股 深入理解Spring的AOP 面向切面编程 底层 保姆级教程 手写例子

目录 概念 AOP 术语 1. 连接点&#xff08;Jointpoint&#xff09;&#xff1a; 2. 切入点&#xff08;Pointcut&#xff09;&#xff1a; 3. 通知&#xff08;Advice&#xff09;&#xff1a; 4. 方面/切面&#xff08;Aspect&#xff09;&#xff1a; 5. 引入&#xff…...

macOS安全隐私最佳实践分析

1. 引言 随着数字世界的不断扩展&#xff0c;个人和组织面临的安全与隐私威胁也日益增加。作为专业的安全合规与隐私保护研究团队&#xff0c;Kaamel 对 macOS 系统的安全隐私现状进行了全面分析&#xff0c;并提出了一系列最佳实践建议&#xff0c;旨在帮助用户更好地保护自己…...

WeakSet:JavaScript 中容易被忽视的“弱集合”

目录 WeakSet 详解 基本概念 创建 WeakSet WeakSet 的主要方法 WeakSet 的特性 WeakSet 的使用场景 1. 避免内存泄漏&#xff08;DOM 元素管理&#xff09; 2. 临时缓存系统 3. 私有属性模拟 4. 防止循环引用 与其他数据结构的对比 1. WeakSet 没有实例属性 2. We…...

Discuz!+DeepSeek:传统论坛的智能化蜕变之路

在数字化浪潮中&#xff0c;社区论坛作为互联网早期的产物&#xff0c;面临着功能单一、用户体验滞后的发展瓶颈。虎跃办公&#xff08;https://www.huyueapp.com&#xff09;通过Discuz!搭建的网址导航网站&#xff0c;在集成DeepSeek的AI能力后&#xff0c;成功实现了从工具导…...

vs2017中,将CMake构建目录设置在项目目录下

修改CMake构建目录位置 在Visual Studio 2017中&#xff0c;可以通过以下方法将CMake构建目录设置在项目目录下&#xff1a; 修改CMakeSettings.json文件‌&#xff1a; 在VS中生成CMakeSettings.json文件&#xff08;通过点击编译平台按钮如x64-Debug或x64-Release&#xf…...

跨平台.NET 版本 使用率排名

截至2025年4月&#xff0c;跨平台.NET版本的安装使用率排名主要基于版本支持状态、性能优化和企业迁移趋势。以下是结合微软官方政策、行业动态及开发者行为分析的综合结论&#xff1a; 1. .NET 8 (LTS) 占据主导地位 支持周期&#xff1a;作为2023年11月发布的长期支持&…...

基于无障碍跳过广告-基于节点跳过广告

2025-04-22 一些广告的关闭是叉图标&#xff0c;获取到的信息也没什么特征&#xff0c;这种广告怎么跳过 用autojs无障碍的节点定位ui控件位置&#xff0c;点击...

STM32提高篇: WIFI通讯

STM32提高篇: WIFI通讯 一.WIFI通讯介绍1.WiFi的频段5G和2.4G2.WiFi的信道二.ESP32固件烧录及驱动1.一个AT指令响应的完成2.测试其他指令三.Wifi功能初始化和TCP通讯四.volatile关键字一.WIFI通讯介绍 Wi-Fi,又称“无线网路”,是Wi-Fi联盟的商标,一个基于IEEE 802.11标准的…...

资本怪兽贝莱德投资数据分析报告-独家

贝莱德概述 贝莱德集团是全球最大的资产管理公司&#xff0c;其管理的资产规模达到了11.6万亿美元(约合人民币84.18万亿元)&#xff0c;这个数字相当于中国2024年GDP的62%。贝莱德通过收购李嘉诚旗下的43个全球港口资产&#xff0c;将在全球运营约100个港口。此外&#xff0c;…...

操作系统-用户级-内核级线程

一、先明确几个基本概念&#xff1a; 用户级线程&#xff08;ULT&#xff09;&#xff1a; 完全由用户空间的线程库&#xff08;如 pthread 或 green threads&#xff09;管理。 操作系统内核对此一无所知。 切换线程时&#xff0c;不需要进入内核&#xff0c;效率高&#xf…...

【深度学习】LoRA:低秩适应性微调技术详解

LoRA&#xff1a;低秩适应性微调技术详解 文章目录 LoRA&#xff1a;低秩适应性微调技术详解1. 引言2. LoRA原理解析2.1 核心思想2.2 数学表达 3. LoRA实现细节3.1 适用层选择3.2 缩放因子3.3 初始化策略 4. 代码实现示例5. LoRA在实际应用中的优势5.1 内存效率5.2 训练速度5.3…...

研发效率破局之道阅读总结(3)工程优化

研发效率破局之道阅读总结(3)工程优化 Author: Once Day Date: 2025年4月22日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 程序的艺术_Once-Day…...

树莓派超全系列教程文档--(40)树莓派config.txt旧版GPIO控制、超频及条件过滤器

树莓派config.txt旧版GPIO控制、超频及条件过滤器 传统GPIO控制enable_jtag_gpio 传统超频选项超频never_over_voltagedisable_auto_turbo 遗留条件过滤器The [HDMI:*] 过滤器 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 传统GPIO控制 &…...

网络基础概念(下)

网络基础概念&#xff08;上&#xff09;https://blog.csdn.net/Small_entreprene/article/details/147261091?sharetypeblogdetail&sharerId147261091&sharereferPC&sharesourceSmall_entreprene&sharefrommp_from_link 网络传输的基本流程 局域网网络传输流…...

DES、3DES、SM4 加密算法简介

1. DES&#xff08;Data Encryption Standard&#xff09; 设计时间&#xff1a;1975 年&#xff08;IBM 开发&#xff0c;1977 年被 NIST 采纳为美国联邦标准&#xff09;。 密钥长度&#xff1a;64 位&#xff08;实际有效 56 位 8 位校验&#xff09;。 分组长度&#xf…...

如何在 Ansys Icepak AEDT 中设置多个流程以加快仿真速度?

您将学习如何进行正确的设置&#xff0c;以通过增加进程数量来加快仿真速度。 Ansys Icepak AEDT 需要与 Icepak Classic 不同的设置。 要设置要在 Ansys Icepak AEDT 中使用的进程数&#xff0c;您需要按照以下步骤作&#xff1a; 首先&#xff0c;转到“工具 - >选项 - …...

【MCP Node.js SDK 全栈进阶指南】初级篇(2):MCP基础服务器开发

引言 在上一篇文章中,我们详细介绍了MCP开发环境的搭建。本文作为MCP TypeScript-SDK系列的第二篇,将深入探讨MCP基础服务器开发的核心内容,包括服务器创建与生命周期管理、McpServer与Server的区别与选择、各种配置选项的详解,以及基本启动与调试技巧。通过本文学习,你将…...

客户端 AI 与服务器端 AI 的深度比较及实践建议?

1. 性能与延迟 ​​客户端AI&#xff08;In-Browser AI&#xff09;​​&#xff1a; // 使用TensorFlow.js在浏览器中进行图像分类 const model await tf.loadLayersModel(local-model/model.json);// 实时摄像头处理 const video document.getElementById(webcam); const…...

【(保姆级教程)Ubuntu24.10下部署Dify】

目录 一、下载Ubuntu二、安装Ubuntu三、在 Ubuntu 上安装 Docker Engine1、设置Docker的apt仓库2、安装 Docker 包 四、在 Ubuntu 上安装 Docker Desktop1、先决条件2、下载最新 DEB 包3、安装软件包4、启动 Docker Desktop5、检查版本 五、克隆 Dify 代码仓库六、启动 Dify1、…...

计算机组成原理---总线系统的详细概述

1.数据传输的两个方式 串行传输和并行传输&#xff1a;串行传输和并行传输 串行&#xff1a;适合的就是传输的距离比较远&#xff0c;这个对应的成本也是比较低的&#xff1b; 并行&#xff1a;传输的效率很高&#xff0c;因为分成了不同的线路&#xff0c;这个适合的就是短距离…...

C++静态与动态联编区别解析

在 C++ 中,静态联编(Static Binding)和动态联编(Dynamic Binding)是两种不同的函数调用绑定机制,核心区别在于确定函数调用的时机和多态性的支持。以下是详细解释: 1. 静态联编(Static Binding) 定义:在编译阶段确定函数调用与具体实现的关系。特点: 由编译器直接确…...

Linux 一些常用的命令记录

常见命令如下 查询内容 find / -name 例如&#xff1a;查找 libstdc.so* find / -name "libstdc.so*" 查询运行环境&#xff1a;/lib64/libstdc.so.6 内容是可以修改为其他的 strings /lib64/libstdc.so.6 | grep CXXABI创建软连接&#xff08;创建超链接&…...

面试题-链表(1)

1.移除链表元素&#xff1a; 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 删除一个链表中的相同元素。 我这里用的方法只需要将链表遍历一次&#xff0c;就可以删除所有节点。 前后指针法: public ListNode removeElements(ListNode head, int val) { //先判…...

【云馨AI-大模型】Dify 1.2.0:极速集成 SearXNG,畅享智能联网搜索新境界,一键脚本轻松部署SearXNG

SearXNG部署目录创建一键脚本SearXNG访问 Dify SearXNG插件安装SearXNG 插件安装进行授权工作流中进行验证工作流测试 SearXNG部署 目录创建 mkdir -p /data/yunxinai && cd /data/yunxinai 一键脚本 git clone https://gitcode.com/yunxinai/rag-sh.git 一键执行脚…...

Python 设计模式:访问者模式

1. 什么是访问者模式&#xff1f; 访问者模式是一种行为设计模式&#xff0c;它允许你在不改变对象结构的前提下&#xff0c;定义新的操作。通过将操作封装在访问者对象中&#xff0c;访问者模式使得你可以在不修改元素类的情况下&#xff0c;向元素类添加新的功能。 访问者模…...

dify工作流之text-2-e-sql,大模型写sql并执行

市面上有太多的text-to-sql工具&#xff0c;但是我这次突发灵感&#xff0c;为什么不做一个可以执行sql得text2sql呢。 dify的安装我不再赘述&#xff0c;我采用的是win10本地docker部署的方式。 mysql的安装也不再介绍&#xff0c;如有需要还请移步其他博主。 1.dify创建工…...

Neo4j 可观测性最佳实践

Neo4j 介绍 Neo4j 是一款领先的图数据库管理系统&#xff0c;采用图数据模型来表示和存储数据。它以节点、关系和属性的形式组织数据&#xff0c;节点代表实体&#xff0c;关系表示节点间的连接&#xff0c;属性则为节点和关系附加信息。Neo4j 使用 Cypher 查询语言&#xff0…...

【随手记】jupyter notebook绘制交互式图像

在 Jupyter Notebook 中 魔法命令特点%matplotlib notebook图形是交互式的&#xff0c;可缩放、旋转&#xff08;适合 3D 图&#xff09;%matplotlib inline图像静态显示&#xff0c;简单快速&#xff0c;适用于大多数2D图绘制 在 %matplotlib notebook 的 3D 图中&#xff0c…...

[大模型]AI Agent入门01——AI Agent概念梳理

什么是 Agent&#xff08;智能体&#xff09; 定义 Agent 是并能够感知环境&#xff0c;同时可以自主采取行动以实现特定目标的实体。 Agent&#xff08;代理&#xff09;是计算机科学中的一个概念&#xff0c;​​指一种置于某种环境中&#xff0c;能够感知环境中的信息并自…...

【锂电池剩余寿命预测】BiLSTM双向长短期记忆神经网络锂电池剩余寿命预测(Matlab源码)

目录 效果一览程序获取程序内容代码分享研究内容BiLSTM双向长短期记忆神经网络锂电池剩余寿命预测摘要关键词1. 引言1.1 研究背景1.2 研究现状与问题1.3 研究目的与意义2. 文献综述2.1 锂电池剩余寿命预测理论基础2.2 传统预测方法概述2.3 基于深度学习的预测方法进展3. BiLSTM…...

基于机器学习的房租影响因素分析系统

基于机器学习的房租影响因素分析系统 【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】数据可视化及预测分析的完整流程文档 【技术栈】 ①&#xff1a;系统环境&#xff1a;Python 3.8, Django 4.2 ②&#xff1a;开发环境&#…...

【c++深入系列】:万字string详解(附有sso优化版本的string模拟实现源码)

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 当你想放弃时&#xff0c;想想为什么当初坚持走到了这里 ★★★ 本文前置知识&#xff1a; 类和对象&#xff08;上&#xff09; 类和对…...