贪心算法思路详解
文章目录
- 一、贪心算法是什么?
- 二、贪心算法原理
- 三、再谈背包问题
- 四、活动选择问题
- 五、拟阵理论
- 总结
一、贪心算法是什么?
贪心算法与动态规划算法一样是用于求解最优化类问题的算法,其本质上是基于动态规划算法的改进算法,其所求解的问题是动态规划算法的一个子集。
我们知道,动态规划在求解时,会考虑子问题分解的所有可能性,而贪心算法则只会考虑其中的部分情况,这个减少的数量相当可观。但也正因为如此,贪心算法所求的结果不一定为问题的最优解,而是次优解。
对于动态规划,每个子问题,需要从多个选择中选出其收益最大(正向收益)的那个或最小的那个(负向收益),而对于贪心算法来说,选择是唯一确定的(总是选择局部最优的那个),且选择只会产生一个子问题。
如果把贪心算法的调用图画出来,会发现它是一个类似链表的线性结构,而非动态规划那样的树结构,由此也可推测贪心算法的复杂度在O(n)量级。
由于每次选择都是唯一确定的,因此贪心算法通常直接返回问题的解决方案,而非像动态规划那样,需要在计算过程中记录信息再通过这些信息进行推导。
贪心算法与动态规划的另一个不同之处在于贪心通常都是自上而下的,而动态规划通常都是自下而上的。这里的自上而下并非指递归实现,而是说解决问题的方向是从大到小,即使动态规划的自上而下带备忘的递归实现版本,形式上看是从大到小的解决问题,但实际计算时,依然需要先计算出较小问题的解。
二、贪心算法原理
一个动态规划的问题何时可以转化为贪心算法问题,我总结的规律如下:
当发现动态规划中的选择存在某种规律,使得我们可以通过这种规律直接得到该问题下的一个最优选择时便可以考虑贪心算法。
因为动态规划的一个子问题的最佳选择依赖于其子问题的计算,再说的直白点,动态规划的选择依赖于将来待解未解的子问题,而贪心算法则恰恰相反,它依赖其历史决策而非将来。
但这也并非绝对,只是说此问题有可能适用于贪心算法,到底能不能用需要加以证明,而非主观臆测。
设计贪心算法的一般步骤如下:
注意第二步与第三步的区别。第二步是在证明一个子问题的局部最优解总是存在于全局问题的一个最优解中,或者说是在证明我们所作的选择在当时来看确实是最优的。这两种说法其实是等价的,因为对于子问题S(k-1)中的一个选择ak-1如果处于原问题S(k)的一个最优解中,那么对于子问题S(k-1)来说选择它也是没有任何问题的,也就是说它就是S(k-1)的局部最优解,所以两者的证明方式是一样的。而第三步是在证明最优子结构的正确性,即子问题本身的解也是其最优解,只有这样由以证明存在于原问题最优解中的一个选择+此选择所产生的子问题的最优解才能构成原问题的一个最优解。
例如对于活动选择问题的贪心算法的特征刻画最终得到的公式是 S(k)+ak;其中S(k)是一个选择活动k后剩余集合构成的子问题, 第二步是在证明这个贪心选择确实在原问题的最优解中,即证明公式中ak部分。而第三步是在证明,活动k与子问题S(k)的解构成原问题的一个最优解,即证明S(k)+ak是原问题一个最优解,即证明S(k)得到的是其子问题本身的最优解。
那么如何证明一个贪心算法是否能够求解一个最优化问题?并没有适合所有情况的方法,但贪心选择性质和最优子结构是两个关键要素。如果我们能够证明问题具有这些性质,就向贪心算法迈出了重要一步。
贪心选择性质:我们可以通过做出局部最优(贪心)选择来构造全局最优解。换句话说,当进行选择时,我们直接做出在当前问题中看来最优的选择,而不必考虑子问题的解。
对于动态规划,它的每个选择都是实际计算只后得到的结果,无需加以证明,而对于贪心选择是我们主观上的意想,为了保证总体结果正确必须对其证明
证明贪心选择性质,即它存在于原问题最优解中通常使用替换法
为了进一步优化算法性能,通常会对输入数据进行预处理,或是采用特殊数据结构(通常是优先队列)存储,如在A*算法中会使用优先队列优化开放列表原素的获取。
这么做是为了减少对众多选择进行比较从而选出最优的那个选择所造成的开销。
既然我们可以直接判断选择的优劣,那必然存在一个评估方法,对选择进行评估,得到每个选择的分值或权重。
而对于最优子结构,我在讲解动态规划时,已经详细对其进行了介绍,这里不再说明,其证明方法是使用一种叫剪切-复制的方法。
三、再谈背包问题
在上篇讲解动态规划时,我展示了0-1背包问题的实现,那么考虑可否使用贪心算法实现0-1背包问题?为什么0-1背包问题是动态规划的经典问题,而非贪心算法的经典问题?
为了说明动态规划与贪心算法的差异,我们来研究一下0-1背包问题的变种——分数背包问题,它与0-1背包问题的区别如下所示:
两个背包问题都具有最优子结构性质
为了说明贪心算法对0-1背包问题无效,下面给出一个实例展示两者差异:
可见,看似单位价值最高的物品,实际却不在最终的选择方案中,造成这个问题的本质是我们无法证明0-1背包问题的贪心选择性质,在0-1背包问题中我们不仅要考虑物品单位价值对最终价值的影响还要考虑背包容量对最终价值的影响,最优选择方案实质上应该使得背包的有效单位价值最大化,而非物品的单位价值。选择商品1造成的空间浪费实际拉低了背包总体有效单位价值,带来的影响抵消了物品单位价值的影响。
四、活动选择问题
下面给出一个使用贪心算法解决问题的实际案例,并且为了表现出动态规划与贪心算法的关联性,我会展示如何从动态规划的思维模式过渡到贪心算法的思维模式。
我以贪心算法的经典问题活动选择问题为例,这个问题的描述大致如下:
首先,直观的感受上,这是一个动态规划问题,先尝试使用动态规划的思路求解。整体思路如下所示:
得到动态规划的递推公式,观察公式会发现,对于每种选择我们都需要求解出所有选择的子问题才能得出结论,而实际上我们发现存在某种规律使得我们可以直接确定这个选择而无需实际求解子问题。
我们主观的感觉,取活动Sij中第一个结束的活动会是此问题的最优选择。因为活动结束越早,就越能留下更多的资源(时间)分配给其他的活动。
如果每次都这样取,那么实际上上述公式中c[i,k]变成了一个空集,子问题只剩下一个,且选择唯一,也就说公式实际变成了c[i,j]=c[k,j]+1这样的形式,其中k是c[i,j]范围内第一个结束的活动。
既然如此,那我们实际可以考虑优化最优子结构,我们只考虑后半段子问题,新的特征方程为S(k)+ak,其中S(k)表示选择活动ak后所产生的子问题
得到新的方程,别忘了我们还需要对其加以证明,每次选择第一个结束的活动只是我们主观臆测,那么究竟这是不是一个最优选择?有没有可能我k取的是中间某个活动,分割出的子问题比上述取法还要更优?
现在的问题就是我们需要证明每次取第一个确实是此问题下的最优选择,别忘了我之前说过,证明一个选择是局部最优选择与证明该选择在原问题的一个最优解中其实是等价的。
它们的证明过程如下所示:
之前我们也证明了此问题的最优子结构性质。说明此问题确实可以使用贪心算法求解,接下来就是设计代码实现了,到此时思路已经比较清晰了。我们假设输入以按照其选择评估指标(对于此问题就是结束时间)进行了预处理,并且为了方便算法进行初始化,我们加入一个哨兵活动(a0,开始结束时间都为0),下面给出活动选择问题的递归与循环版本的两种代码实现:
/// <summary>
/// 活动选择问题递归实现
/// </summary>
/// <param name="s">开始时间</param>
/// <param name="f">结束时间</param>
/// <param name="k">上一个选择的活动序号</param>
/// <param name="n">活动数量</param>
/// <param name="plan">选择方案</param>
public static void GreedyRecursive(int[] s, int[] f,int k,int n,Stack<int> plan)
{int m = k + 1;while (m <= n && s[m] < f[k]){m++;}if (m<=n){plan.Push(m);GreedyRecursive(s,f,m,n,plan);}
}
循环实现版本如下:
/// <summary>
/// 活动选择问题迭代版本
/// </summary>
/// <param name="s"></param>
/// <param name="f"></param>
/// <param name="n"></param>
public static Stack<int> GreedyIteration(int[] s, int[] f, int n)
{var plan = new Stack<int>();plan.Push(1);int k = 1;for (int i=2; i<s.Length; i++){if (s[i] >= f[k]){plan.Push(i);k = i;}}return plan;
}
五、拟阵理论
该理论描述了很多贪心方法生成最优解的情形,它涉及一种称为“拟阵”的组合结构。虽然这种理论不能涵盖贪心方法适用的所有情况,但它确实覆盖了很多有实际意义的情况。
拟阵的定义如下:
定义比较晦涩难懂,通俗的解释,就是说对一个给定的集合,取它的满足某种性质I(独立性)的所有子集,如果存在一个集合s1是这些子集种某个子集s2的子集,那么s1同样满足性质I,这就是遗传性。而对于这些子集中的某两个子集A和B,如果A的元素比B的元素要少,那么从B中取一个A中没有的元素放到A中,新的A集合依然满足性质I,这就是交换性。
这个独立性对于不同的问题的问题有不同的解释,例如对于活动选择问题,我们要求解的是互相兼容的红动的集合,那么互相兼容这个性质就是此问题的独立性,再比如对于图来说,不存在环路的所有边集构成的集合就是它的独立性。
该理论中的一些概念:
- 扩展:如上述从B中取一个元素到A,这个元素就是A的扩展
- 独立集:满足性质I的所有S的子集称为S的独立子集
- 最大独立子集:S的所有独立子集中最大的独立子集,即不可再被扩展的独立子集
- 加权拟阵:如果集合S中每个元素都有一个加权函数w,为每个元素产生一个非负的权值,把这样的拟阵叫做加权拟阵
- 最优子集:S的所有独立子集中,所有元素权值总和最大的那个独立子集
可以证明加权拟阵的最优子集一定是其最大独立子集。
拟阵问题的贪心选择性质、最优子结构的证明较为复杂,我就不再展示,我们只需知道,任何可以形式化为拟阵的最优解问题,都可以使用贪心算法求得其最优解。
《算法导论》一书中给出了求解此类问题的通用算法框架:
其中唯一需要我们自定义的部分,也就是独立性的判断部分
使用拟阵理论求解问题的关键在于如何定义独立性,以及如何判断一个集合是否是独立的,以及证明该问题确实可形式化为拟阵问题,这需要证明问题满足拟阵的性质,其中难点是证明拟阵的交换性
我们所熟知的图的最小生成树算法其实就利用了拟阵理论:
关于其拟阵性质的证明较为复杂,不再展示。
下面我尝试利用此理论,解决活动选择问题,证明其可形式化为拟阵问题。我们最终要求解的是互相兼容的活动的最大集合,那么就将独立性定义为集合中的活动互相兼容,遗传性显而易见很容易证明,但是在证明交换性时我们发现此问题并不满足此性质,因为可以找出不满足的反例。所以得出结论活动选择问题不是一个拟阵问题。
总结
本文分析了动态规划与贪心算法之间的关联与差异,以及使用实际案例,详细阐述了如何从动态规划思维转变到贪心算法思维,相信这篇文章能够给读者很大启发,关于拟阵部分的理论了解即可,重点是掌握贪心算法的思维模式。当贪心选择的规律性显而易见时,我们可以跳过动态规划的过程,直接使用贪心算法的设计方法。
相关文章:
贪心算法思路详解
文章目录 一、贪心算法是什么?二、贪心算法原理三、再谈背包问题四、活动选择问题五、拟阵理论总结 一、贪心算法是什么? 贪心算法与动态规划算法一样是用于求解最优化类问题的算法,其本质上是基于动态规划算法的改进算法,其所求…...
Keil 安装 CMSIS-FreeRTOS 失败解决方案
一、问题现象 在 Keil 中安装 CMSIS-FreeRTOS 时出现以下错误: (1) 通过内置工具安装: (2)通过官网安装: 二、核心原因 Keil 版本过低,与 CMSIS-FreeRTOS 包不兼容: …...
Python打卡DAY33
DAY33:MLP神经网络的训练 恩师浙大疏锦行 知识点: PyTorch和cuda的安装查看显卡信息的命令行命令(cmd中使用)cuda的检查简单神经网络的流程 数据预处理(归一化、转换成张量)模型的定义 继承nn.Module类定义…...
RJ45 网口实现千兆传输速率(1Gbps)的原理,涉及物理层传输技术、线缆标准、信号调制及网络协议等多方面的协同设计。以下从技术维度展开详细解析:
一、千兆以太网的标准与物理层基础 1. 标准规范 千兆以太网遵循 IEEE 802.3ab(针对双绞线)和 IEEE 802.3z(针对光纤)标准,其中 RJ45 接口对应双绞线场景,核心是通过四对双绞线(CAT5e/CAT6 线缆…...
leetcode hot 100之:二叉树的层序遍历
层序遍历和前中后序遍历不一样,大家可以想象的是:前中后序遍历可以用递归,因为他是以子树为标准来选择的;那层序怎么办呢?怎么才能一层层地遍历呢? void First(TreeNode* root) {printf("%d",ro…...
深入解析BERT:语言分类任务的革命性引擎
“BERT的出现,如同在自然语言处理领域投下了一颗认知炸弹——它让机器真正学会了’联系上下文’。” ——自然语言处理研究者普遍共识 在自然语言处理(NLP)领域,2018年诞生的BERT(Bidirectional Encoder Representatio…...
Pycharm中Jupyter Notebook 插件常用快捷键
bg:Jupyter跟LINQPad很像,都是方便写的时候看数据用 快捷键功能Shift Enter执行当前单元格,并跳转到下一个单元格Ctrl Enter执行当前单元格,不跳转(留在当前单元格)Alt Enter执行当前单元格,…...
【Python】Excel表格操作:ISBN转条形码
一、效果 原始文件: 输出文件: 二、代码 import os import logging from openpyxl import load_workbook from openpyxl.drawing.image import Image as ExcelImage from barcode import EAN13 from barcode.writer import ImageWriterlogging.basicCo…...
大数据Hadoop集群搭建
文章目录 大数据Hadoop集群搭建一、VMware准备Linux虚拟机二、VMware虚拟机系统设置1、主机名、IP、SSH免密登录2、JDK环境部署3、防火墙、SELinux、时间同步 三、VMware虚拟机集群上部署HDFS集群1、集群规划2、上传&解压3、Hadoop安装包目录结构4、修改配置文件࿰…...
饼图:数据可视化的“切蛋糕”艺术
饼图,作为数据可视化家族中最经典、最易识别的成员之一,其核心功能如同其名——像切分蛋糕一样,直观展示一个整体(100%)被划分为若干组成部分的比例关系。 往期文章推荐: 20.用Mermaid代码画ER图:AI时代的…...
mysql server层做了什么
服务器处理客户端请求 服务器程序在处理来自客户端的查询请求时,大致需要分为3部分:连接管理、解析与优化、存储引擎。 连接管理 每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程专门处理与这个客户端的交互ÿ…...
3.5.1_1 信道划分介质访问控制(上)
在这个视频中我们要介绍信道划分、介质访问控制,这是两个词,我们先介绍一下什么叫做介质访问控制。 通过之前的学习,我们知道在计算机网络当中,有的信道它在逻辑上属于总线型,我们也可以把这种信道称为广播信道&#x…...
RPC常见问题回答
项目流程和架构设计 1.服务端的功能: 1.提供rpc调用对应的函数 2.完成服务注册 服务发现 上线/下线通知 3.提供主题的操作 (创建/删除/订阅/取消订阅) 消息的发布 2.服务的模块划分 1.网络通信模块 net 底层套用的moude库 2.应用层通信协议模块 1.序列化 反序列化数…...
数据分析和可视化:Py爬虫-XPath解析章节要点总结
重要知识点 XPath 概述:XPath 是一门可以在 XML 文件中查找信息的语言,也可用于 HTML 文件。它功能强大,提供简洁明了的路径表达式和多个函数,用于字符串、数值、时间比较等。1999 年成为 W3C 标准,常用于爬虫中抓取网…...
WIFI原因造成ESP8266不断重启的解决办法
一、报错 报错信息如下: 21:37:21.799 -> ets Jan 8 2013,rst cause:2, boot mode:(3,7) 21:37:21.799 -> 21:37:21.799 -> load 0x4010f000, len 3424, room 16 21:37:21.799 -> tail 0 21:37:21.799 -> chksum 0x2e 21:37:21.799 -> loa…...
OSI网络通信模型详解
OSI 模型就是把这整个过程拆解成了 7 个明确分工的步骤,每一层只负责自己那一摊事儿,这样整个系统才能顺畅运转,出了问题也容易找到“锅”在谁那。 核心比喻:寄快递 📦 想象你要把一份重要的礼物(你的数据…...
第五章 中央处理器
5.1 CPU的功能和基本构造 5.1.1 CPU的基本功能 5.1.2 CPU的基本结构 1.运算器 算术逻辑单元ALU 累加寄存器ACC 程序字状态寄存器PSW 计数器CT 暂存寄存器 通用寄存器组 移位器 通用寄存器供用户自由编程,可以存放数据和地址。而指令寄存器是专门用于存放指令的专用寄存器,…...
大模型学习入门——Day3:注意力机制
本系列笔记的教材:快乐学习大模型-DataWhale团队 注意力机制 注意力机制最先源于计算机视觉领域,其核心思想为当我们关注一张图片,我们往往无需看清楚全部内容而仅将注意力集中在重点部分即可。而在自然语言处理领域,我们往往也…...
C++ 学习笔记精要(二)
第一节 特殊类的设计 1. 一个类: 只能在堆上创建对象 关键点:自己控制析构 1.1 方法一: 使用delete禁掉默认析构函数 #include <iostream> using namespace std;class HeapOnly { public:HeapOnly(){_str new char[10];}~HeapOnly() delete;void Destroy(){delete[…...
博士,超28岁,出局!
近日,长沙市望城区《2025年事业引才博士公开引进公告》引发轩然大波——博士岗位年龄要求28周岁及以下,特别优秀者也仅放宽至30周岁。 图源:网络 这份规定让众多"高龄"博士生直呼不合理,并在社交平台掀起激烈讨论。 图源…...
macOS - 根据序列号查看机型、保障信息
文章目录 最近在看 MacBook 二手机,有个咸鱼卖家放个截图 说不清参数,于是想根据 序列号 查看机型。苹果提供了这样的网页: https://checkcoverage.apple.com/ (无需登录) 结果 2025-06-20(五)…...
C/C++ 高频八股文面试题1000题(一)
原作者:Linux教程,原文地址:C/C 高频八股文面试题1000题(一) 在准备技术岗位的求职过程中,C/C始终是绕不开的核心考察点。无论是互联网大厂的笔试面试,还是嵌入式、后台开发、系统编程等方向的岗位,C/C 都…...
C++ map 和 unordered_map 的区别和联系
C map 和 unordered_map 的区别和联系 map 和 unordered_map 都是 C 标准库中关联容器,用于存储键值对。它们的主要区别在于底层实现和性能特性,联系在于它们都提供了键值对的存储和访问功能。 区别: 特性mapunordered_map底层实现红黑树 …...
Sentinel实现原理
Sentinel 是阿里巴巴开源的分布式系统流量控制组件,主要用于服务保护,涵盖流量控制、熔断降级、系统负载保护等功能。 以下是 Sentinel 的实现原理,使用中文简要说明: 1. 总体架构 Sentinel 采用 轻量级 设计,分为 核…...
python打卡day37
疏锦行 知识点回顾: 1. 过拟合的判断:测试集和训练集同步打印指标 2. 模型的保存和加载 a. 仅保存权重 b. 保存权重和模型 c. 保存全部信息checkpoint,还包含训练状态 3. 早停策略 作业:对信贷数据集训练后保存权重…...
MySQL复杂查询优化实战:从多表关联到子查询的性能突破
文章目录 一、复杂查询性能瓶颈分析与优化框架二、多表关联查询的优化策略与实战1. JOIN顺序优化:基于成本估算的表关联策略2. 复合索引与JOIN条件优化3. 大表JOIN的分片处理 三、子查询优化:从嵌套到JOIN的转换艺术1. 标量子查询转换为JOIN2. EXISTS子查…...
LeetCode 680.验证回文串 II
目录 题目: 题目描述: 题目链接: 思路: 核心思路: 思路详解: 代码: C代码: Java代码: 题目: 题目描述: 题目链接: 680. 验证…...
window显示驱动开发—输出合并器阶段
逻辑管道中的最后一步是通过模具或深度确定可见性,以及写入或混合输出以呈现目标,这可以是多种资源类型之一。 这些操作以及输出资源 (呈现目标) 绑定在输出合并阶段定义。 1. 核心功能与管线定位 输出合并是渲染管线的最终固定功能阶段,负…...
单片机开发日志cv MDK-ARM工具链迁移到MAKE
核心经验: STM32H7 多 RAM 区域,外设相关数据段必须放在 AXI SRAM(RAM)区,不能放在 DTCMRAM,否则外设无法访问,程序表面正常但外设全失效。迁移工程时,务必检查链接脚本的内存分布&a…...
大模型与搜索引擎的技术博弈及未来智能范式演进
基于认知革命与技术替代的全景综述 一、大模型对搜索引擎的替代性分析:技术范式与市场重构 (1)技术原理的代际分野 传统搜索引擎遵循 "爬虫抓取 - 索引构建 - 关键词排序" 的三段式架构,其核心是基于 PageRank 算法的…...
Ajax-入门
Ajax: 全称Asynchronous JavaScript And XML,异步的JavaScript和XML。其作用有如下2点: 与服务器进行数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。 异步交互:可以在不重新加载整个页面的情况下&a…...
FPGA基础 -- Verilog 共享任务(task)和函数(function)
Verilog 中共享任务(task)和函数(function) 的详细专业培训,适合具有一定 RTL 编程经验的工程师深入掌握。 一、任务(task)与函数(function)的基本区别 特性taskfunctio…...
c++set和pair的使用
set是C中的一种关联容器,具有以下特点: 存储唯一元素(不允许重复) 元素自动排序(默认升序) 基于红黑树实现(平衡二叉搜索树) 插入、删除和查找的时间复杂度为O(log n) 前言 在C…...
数据库中间件ShardingSphere5
一、高性能架构模式 数据库集群,第一种方式“读写分离”,第二种方式“数据库分片”。 1.1 读写分离架构 读写分离原理:将数据库读写操作分散到不同的节点上。 读写分离的基本实现: 主库负责处理事务性的增删改操作,…...
window显示驱动开发—使用状态刷新回调函数
用户模式显示驱动程序可以使用 Direct3D 运行时版本 10 State-Refresh回调函数 来实现无状态驱动程序或构建命令缓冲区前导数据。 Direct3D 运行时在调用 CreateDevice (D3D10 ) 函数时,向D3D10DDIARG_CREATEDEVICE结构的 pUMCallbacks 成员指向的D3D10DDI_CORELAY…...
windows11右击恢复为windows10
文章目录 前言一、问题描述二、解决方案 前言 为了解决win11的右击更多选项的问题 一、问题描述 win11的右键更多选项过于繁琐 二、解决方案 在windows11的终端管理员中输入如下代码: reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c…...
基于物联网的智能衣柜系统设计
标题:基于物联网的智能衣柜系统设计 内容:1.摘要 随着物联网技术的飞速发展,智能家居领域迎来了新的变革机遇。本研究的目的在于设计一种基于物联网的智能衣柜系统,以提升用户的衣物管理和使用体验。方法上,通过搭建物联网硬件平台ÿ…...
GM DC Monitor v2.0 卸载教程
以下俩种方法任选一种均可 第一种方法:一键自动卸载 进入到软件安装目录 卸载app 进入到app目录,运行一键卸载脚本:sh uninstall.sh 卸载es 进入到es目录,运行一键卸载脚本:sh uninstall.sh 卸载db 进入到db目录&a…...
C#上位机实现报警语音播报
我们在开发C#上位机时,有时候会需要将报警信息通过语音进行播报,今天跟大家分享一下具体的实现过程。 一、组件安装 首先我们创建好一个Windows窗体项目,然后添加System.Speech库引用。 点击引用,右击添加引用,在程…...
python自助棋牌室管理系统
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中…...
榕壹云婚恋相亲系统:ThinkPHP+UniApp打造高效婚配平台
引言 在数字化浪潮下,婚恋相亲行业正加速向线上迁移。榕壹云公司基于市场需求与技术积累,开发一款功能完备、技术开源的婚恋相亲小程序系统,为单身人士提供高效、安全的婚恋平台。本文将围绕系统背景、客户定位、核心技术、功能模块及优势场景展开详细解析,助力开发者与技…...
每日leetcode
2890. 重塑数据:融合 - 力扣(LeetCode) 题目 DataFrame report --------------------- | Column Name | Type | --------------------- | product | object | | quarter_1 | int | | quarter_2 | int | | quarter_3 | i…...
深入理解XGBoost(何龙 著)学习笔记(五)
深入理解XGBoost(何龙 著)学习笔记(五) 本文接上一篇,内容为线性回归,介绍三部分,首先介绍了"模型评估”,然后分别提供了线性回归的模型代码:scikit-learn的Linear…...
SelectDB 在 AWS Graviton ARM 架构下相比 x86 实现 36% 性价比提升
在海量数据分析中,追求高性价比已成为各大企业的主流趋势。ARM 架构凭借其高能效和低成本的特点,逐渐在数据中心崛起,成为理想的高性价比选择。基于 ARM 架构的 AWS Graviton 系列处理器,正是这一趋势的典型代表。Graviton 处理器…...
机器学习流量识别(pytorch+NSL-KDD+多分类建模)
本文主要实现以下功能,会提供完整的可运行的代码以及解释为什么这么设计。文章不会收费,若被限制查看,请私信我。 使用 NSL-KDD 数据集的CSV文件进行流量攻击检测,使用机器学习算法实现流量攻击检测,使用pytorch框架…...
三种经典算法无人机三维路径规划对比(SMA、HHO、GWO三种算法),Matlab代码实现
代码功能 该MATLAB代码用于对比三种元启发式优化算法(SMA、HHO、GWO三种算法, SMA黏菌算法、HHO哈里斯鹰优化算法、GWO灰狼优化算法) 在特定优化问题上的性能,运行环境MATLABR2020b或更高 : 初始化问题模型ÿ…...
FTTR+软路由网络拓扑方案
文章目录 网络拓扑软路由配置FTTR光猫路由器TPLink路由器配置WAN设置LAN设置 参考 网络拓扑 软路由配置 配置静态IP地址:192.168.1.100设置网关指向主路由的IP 设置自定义DNS服务器 开启DHCP 这一步很关键,可以让连上wifi的所有设备自动趴强。 FTTR光猫…...
服务器获取外网IP,并发送到钉钉
服务器获取外网IP,并发送到钉钉 import time import hmac import hashlib import base64 import urllib.parse import requests# 请填入你的钉钉机器人配置 access_token XXXX secret XXXX# 获取公网 IP def get_public_ip():try:response requests.get("…...
解决uni-app发布微信小程序主包大小限制为<2M的问题
一 问题说明 我想用uniapp开发多端应用,引入了uview组件库来美化样式,可发布为微信小程序却提示我代码质量不过关,主包代码量太大了: 二 问题分析 2.1 原生微信小程序开发代码质量限制: 1.主包代码大小不得大于2M&…...
魅族“换血”出牌:手机基本盘站不稳,想靠AI和汽车“改命”
撰稿|何威 来源|贝多财经 被吉利收购后,魅族逐渐转向在AI领域躬身耕作。 自2024年2月以“All in AI”正式宣告转型、喊出不再推出传统智能手机的豪言开始,这家曾以设计见长的手机厂商,将下半场押注在AI终端、AR眼镜与智能座舱系统上&#…...