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

用生活案例学算法:动态规划就像理财,贪心算法像点外卖?

用生活案例学算法动态规划就像理财贪心算法像点外卖当你第一次听到动态规划和贪心算法这些术语时是不是觉得它们离日常生活很遥远其实这些看似高深的算法概念在我们的日常生活中随处可见。就像理财需要长远规划点外卖追求即时满足一样算法不过是把生活中的决策模式抽象成了计算机可执行的步骤。1. 动态规划像理财一样思考未来想象你正在规划一笔投资理财每个月都有固定收入可以存入但不同理财产品的收益率和锁定期各不相同。如何安排资金才能在一年后获得最大收益这就是典型的动态规划问题。动态规划的核心思想是记住已经求过的解避免重复计算。就像理财时我们会记录每笔投资的到期时间和预期收益而不是每次都从头计算。1.1 理财案例中的动态规划假设你有以下理财产品可选产品投资期限(月)年化收益率最低投资额A34%5000B65%10000C126%20000用动态规划解决这个问题的Python代码框架def max_investment(products, months, current_money): # 基础情况如果时间为0返回当前资金 if months 0: return current_money max_money current_money for product in products: if product[duration] months and current_money product[min_amount]: # 计算投资该产品后的收益 return_money current_money * (1 product[rate] * product[duration] / 12) remaining_months months - product[duration] # 递归计算剩余时间的最大收益 total max_investment(products, remaining_months, return_money) if total max_money: max_money total return max_money提示动态规划问题通常可以用递归记忆化的方式解决但要注意避免重复计算相同子问题。1.2 动态规划的三大特征最优子结构问题的最优解包含子问题的最优解。就像理财时12个月的最优方案必然包含前6个月的最优方案。重叠子问题在递归求解过程中会反复计算相同的子问题。比如计算6个月和9个月方案时都会用到3个月的数据。无后效性当前状态一旦确定后续决策不受之前决策影响。就像理财收益只与当前资金和时间有关与之前怎么赚到这笔钱无关。2. 贪心算法像点外卖一样追求即时最优当你打开外卖APP时面对满屏的餐厅和优惠通常会怎么做大多数人会先筛选距离近、评分高、优惠力度大的选项这就是贪心算法的思维方式——每一步都选择当前看起来最优的选项。2.1 外卖优惠中的贪心选择假设某外卖平台有以下优惠活动满30减5满50减10首单立减15新用户免配送费你的目标是花最少的钱吃到最满意的餐贪心算法的解决思路是def greedy_delivery(restaurants, budget, is_new_user): selected [] remaining budget # 优先使用最大优惠 if is_new_user: # 免配送费相当于节省5-8元 remaining 6 # 取平均值 is_new_user False # 按评分从高到低排序 restaurants.sort(keylambda x: -x[rating]) for rest in restaurants: # 能享受的最大优惠 discount 0 if rest[price] 50 and remaining 50: discount 10 elif rest[price] 30 and remaining 30: discount 5 if rest[price] - discount remaining: selected.append(rest) remaining - (rest[price] - discount) return selected2.2 贪心算法的适用场景贪心算法在以下情况下特别有效贪心选择性质局部最优选择能导致全局最优解。比如外卖优惠中单次最大优惠的组合通常就是总最优解。最优子结构与动态规划类似问题可以分解为子问题。高效性需求当问题规模很大需要快速近似解时。注意贪心算法并不总能得到最优解。比如在0-1背包问题中贪心选择可能不如动态规划的结果好。3. 动态规划 vs 贪心算法如何选择理解两种算法的区别就像理解理财规划与即时消费的区别比较维度动态规划贪心算法决策视角全局最优局部最优时间复杂度通常较高(O(n²)或更高)通常较低(O(nlogn)等)空间复杂度需要存储子问题解通常只需常数空间适用问题有重叠子问题的最优化问题具有贪心选择性质的问题解的质量保证最优解可能只是近似解生活类比长期理财规划即时优惠选择3.1 经典问题对比背包问题0-1背包问题适合动态规划物品不可分割要么全拿要么不拿需要全局规划考虑物品组合分数背包问题适合贪心算法物品可分割可以拿一部分按单位价值排序后贪心选择即可# 0-1背包动态规划解法 def knapsack_01(weights, values, capacity): n len(weights) dp [[0]*(capacity1) for _ in range(n1)] for i in range(1, n1): for w in range(1, capacity1): if weights[i-1] w: dp[i][w] max(dp[i-1][w], values[i-1] dp[i-1][w-weights[i-1]]) else: dp[i][w] dp[i-1][w] return dp[n][capacity] # 分数背包贪心解法 def fractional_knapsack(weights, values, capacity): items sorted(zip(weights, values), keylambda x: x[1]/x[0], reverseTrue) total_value 0.0 for w, v in items: if capacity w: total_value v capacity - w else: total_value v * (capacity / w) break return total_value4. 从生活到代码算法思维训练理解了这些算法的生活类比后我们可以通过以下步骤将实际问题转化为算法解决方案问题识别判断问题是否具有最优子结构和重叠子问题动态规划或者贪心选择性质。状态定义对于动态规划明确状态是什么如理财问题中的剩余时间和当前资金。转移方程确定如何从一个状态转移到另一个状态并计算最优解。边界条件确定递归或迭代的终止条件。实现选择根据问题特点选择自顶向下记忆化递归或自底向上迭代填表的实现方式。4.1 算法选择决策树当遇到一个新问题时可以按照以下流程选择算法是否可以将问题分解为子问题 ├─ 是 → 子问题是否相互独立 │ ├─ 是 → 考虑分治法 │ └─ 否 → 问题是否具有最优子结构 │ ├─ 是 → 局部最优选择能否保证全局最优 │ │ ├─ 是 → 使用贪心算法 │ │ └─ 否 → 使用动态规划 │ └─ 否 → 可能需要回溯或其他方法 └─ 否 → 考虑其他算法范式4.2 常见误区与调试技巧贪心算法得不到最优解检查问题是否真的具有贪心选择性质。比如在0-1背包问题中贪心按价值密度选择可能不如动态规划的结果。动态规划时间复杂度过高检查是否有不必要的状态存储考虑状态压缩技巧如滚动数组评估是否可以用贪心算法近似递归深度过大将自顶向下的记忆化递归改为自底向上的迭代填表。边界条件处理不当特别注意初始状态的设置和终止条件的判断。算法不是遥不可及的数学理论而是解决实际问题的思维工具。当你下次做理财规划或者点外卖时不妨想想背后的算法思想这种联系能帮助你更直观地理解计算机科学的精髓。

相关文章:

用生活案例学算法:动态规划就像理财,贪心算法像点外卖?

用生活案例学算法:动态规划就像理财,贪心算法像点外卖? 当你第一次听到"动态规划"和"贪心算法"这些术语时,是不是觉得它们离日常生活很遥远?其实,这些看似高深的算法概念,在…...

Qwen3-14b_int4_awq行业方案:为律所定制合同关键条款提取+风险提示生成服务

Qwen3-14b_int4_awq行业方案:为律所定制合同关键条款提取风险提示生成服务 1. 方案背景与价值 在法律服务行业,合同审查是一项高频且耗时的工作。传统人工审查方式面临以下挑战: 合同条款识别效率低:律师需要逐条阅读冗长合同风…...

突破限制:WeChatPad实现微信全设备适配的完整方案

突破限制:WeChatPad实现微信全设备适配的完整方案 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad 多设备登录困境与解决方案 当你尝试在手机和电脑同时登录微信时,是否遇到过"该…...

Win11系统优化:Nanbeige 4.1-3B部署性能调优

Win11系统优化:Nanbeige 4.1-3B部署性能调优 1. 开篇:为什么要在Win11上部署Nanbeige模型 最近很多朋友在Windows 11上跑AI模型时遇到了性能问题,特别是部署Nanbeige 4.1-3B这样的中等规模模型时,总觉得速度不够理想。其实Win11…...

Janus-Pro-7B解决C语言文件读写难题:示例代码生成与错误处理

Janus-Pro-7B解决C语言文件读写难题:示例代码生成与错误处理 1. 引言 如果你写过C语言,肯定对文件操作又爱又恨。爱的是它给了你直接操作系统的能力,恨的是那些看似简单的fopen、fread、fclose背后,藏着无数个让你程序崩溃的陷阱…...

Alibaba DASD-4B Thinking 快速开始:Node.js环境下的API调用与流式响应处理

Alibaba DASD-4B Thinking 快速开始:Node.js环境下的API调用与流式响应处理 最近在折腾一些AI应用的后端集成,发现不少开发者对如何在自己的Node.js服务里快速接入大模型API,特别是处理流式响应,感觉有点无从下手。正好&#xff…...

如何安装配置Goland并使用固定公网地址SSH远程连接本地服务器

文章目录 1. 安装配置GoLand2. 服务器开启SSH服务3. GoLand本地服务器远程连接测试4. 安装cpolar内网穿透远程访问服务器端 4.1 服务器端安装cpolar4.2 创建远程连接公网地址 5. 使用固定TCP地址远程开发 本文主要介绍使用GoLand通过SSH远程连接服务器,并结合cpol…...

网页编辑器如何处理KindEditor的Excel数据源格式保留?

🚀 老北京PHP程序员的逆袭:给KindEditor插上Word的翅膀! 各位爷们儿姐们儿,您瞅瞅,咱一个北京土著PHP程序员,最近接了个CMS企业官网的活儿,客户爸爸提出了个"变态"需求:要…...

零基础上手骨骼动画转换:Mixamo到UE4的开源工具全攻略

零基础上手骨骼动画转换:Mixamo到UE4的开源工具全攻略 【免费下载链接】mixamo_converter Blender addon for converting mixamo animations to Unreal 4 rootmotion 项目地址: https://gitcode.com/gh_mirrors/mi/mixamo_converter 在游戏开发中&#xff0c…...

西门子200 SMART PLC MODBUS TCP协议多从站轮询实战程序案例解析与应用示例

西门子200SMART MODBUS TCP协议多从站轮询实战程序案例刚接手车间设备联网改造那会儿,碰到个头疼的问题——六台200SMART PLC要通过MODBUS TCP把数据汇总到上位机。官方例程都是单从站配置,真遇到多设备轮询才发现坑多得能养鱼。折腾了俩礼拜&#xff0c…...

C++——类模板的概念和意义

1.一些类主要用于存储和组织数据元素,类中数据组织的方式和数据元素的具体类型无关,只关注需要实现的功能,如数组类、链表类、Stack类、Queue类2.类模板的应用(1)只能显示指定具体类型,无法自动推导&#x…...

CV实战:Harris角点检测在图像拼接中的应用(Python+OpenCV实现)

1. 图像拼接为什么需要角点检测 第一次尝试用Python做图像拼接时,我直接把两张照片叠在一起,结果发现接缝处总是错位。后来才明白,计算机不像人眼能直观匹配图像,它需要明确的"路标"来对齐画面。这就是角点检测的价值所…...

Docker 27低代码容器化真香现场:Java/Spring Boot项目3分钟生成可验证镜像,含SBOM+SCA+签名三重合规凭证(附GPG密钥生成脚本)

第一章:Docker 27低代码容器化的革命性演进Docker 27并非官方发布的版本号,而是社区对Docker平台与低代码能力深度融合趋势的前瞻性代称——它标志着容器技术正从纯命令行驱动的运维范式,跃迁为可视化编排、策略即配置、应用即模板的新型开发…...

每日打卡15

128&#xff1a;#include <bits/stdc.h>using namespace std;int m, cnt;// 移动n块&#xff0c;从a->c&#xff0c;借助b void hanoi(int n, char a, char b, char c) {if (n 1) {// 如果当前步骤就是第m步&#xff0c;直接输出 if (cnt m) cout << a <&l…...

实时手机检测-通用高性能部署:共享内存IPC优化多进程并发检测吞吐

实时手机检测-通用高性能部署&#xff1a;共享内存IPC优化多进程并发检测吞吐 1. 引言 你有没有遇到过这样的场景&#xff1f;在一个大型活动现场&#xff0c;需要实时监控成千上万的手机设备&#xff1b;或者在电商仓库里&#xff0c;要对流水线上的手机进行快速分拣和质检。…...

Fish Speech 1.5保姆级教程:开箱即用的声音克隆与多语言TTS实操指南

Fish Speech 1.5保姆级教程&#xff1a;开箱即用的声音克隆与多语言TTS实操指南 1. 引言&#xff1a;为什么选择Fish Speech 1.5&#xff1f; 你是不是曾经遇到过这样的困扰&#xff1a;想要给视频配音&#xff0c;但自己的声音不够好听&#xff1b;需要制作多语言内容&#…...

Lychee-Rerank企业面试系统应用:Java八股文智能匹配

Lychee-Rerank企业面试系统应用&#xff1a;Java八股文智能匹配 最近跟几个做技术招聘的朋友聊天&#xff0c;发现他们有个共同的烦恼&#xff1a;每天要筛几十份简历&#xff0c;面试的时候还得现场判断候选人回答的Java八股文到底靠不靠谱。光靠面试官自己记和判断&#xff…...

清音刻墨Qwen3效果展示:儿童教育动画语音逐帧对齐字幕生成实录

清音刻墨Qwen3效果展示&#xff1a;儿童教育动画语音逐帧对齐字幕生成实录 1. 引言&#xff1a;当“司辰官”遇见动画片 想象一下这个场景&#xff1a;你是一位儿童教育内容创作者&#xff0c;刚刚完成了一集生动有趣的动画配音。你手上有完整的配音音频和对应的台词文稿&…...

(即插即用模块-特征处理新篇) 空间自适应特征调制(SAFM):轻量化超分中的Transformer高效替代方案

1. 空间自适应特征调制&#xff08;SAFM&#xff09;是什么&#xff1f; 第一次看到SAFM这个名词时&#xff0c;我也是一头雾水。这玩意儿到底是干啥的&#xff1f;简单来说&#xff0c;它就像是一个智能滤镜&#xff0c;能够自动识别图像中不同区域的特征&#xff0c;然后有针…...

离线骑行与虚拟训练:突破网络限制的三种解决方案

离线骑行与虚拟训练&#xff1a;突破网络限制的三种解决方案 【免费下载链接】zwift-offline Use Zwift offline 项目地址: https://gitcode.com/gh_mirrors/zw/zwift-offline 当你在山区训练遇到网络中断时&#xff0c;当你在旅行途中想保持训练节奏时&#xff0c;当你…...

解锁NI VeriStand隐藏技能:用LabVIEW FPGA打造25ns级高精度硬件在环测试系统

解锁NI VeriStand隐藏技能&#xff1a;用LabVIEW FPGA打造25ns级高精度硬件在环测试系统 在汽车电子和航空航天领域&#xff0c;硬件在环&#xff08;HIL&#xff09;测试系统的性能直接决定了产品验证的可靠性和效率。传统基于实时处理器的方案虽然成熟&#xff0c;但在面对需…...

Tiktokenizer:精准掌控AI令牌计算的高效开发工具

Tiktokenizer&#xff1a;精准掌控AI令牌计算的高效开发工具 【免费下载链接】tiktokenizer Online playground for OpenAPI tokenizers 项目地址: https://gitcode.com/gh_mirrors/ti/tiktokenizer 在AI应用开发中&#xff0c;你是否曾因提示文本令牌超限导致API调用失…...

Mac Mouse Fix:重新定义Mac鼠标效率的生产力工具

Mac Mouse Fix&#xff1a;重新定义Mac鼠标效率的生产力工具 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 价值定位&#xff1a;让每一只鼠标释放专业潜力…...

一键部署AgentCPM:开箱即用的本地研究报告生成解决方案

一键部署AgentCPM&#xff1a;开箱即用的本地研究报告生成解决方案 1. 为什么选择本地研报生成工具 在当今研究工作中&#xff0c;数据安全和隐私保护已成为不可忽视的核心需求。传统在线AI写作工具存在三大痛点&#xff1a; 数据泄露风险&#xff1a;上传敏感研究课题到第三…...

FLUX.1-dev-fp8-dit进阶:Python多进程加速批量图像生成

FLUX.1-dev-fp8-dit进阶&#xff1a;Python多进程加速批量图像生成 1. 为什么需要多进程加速 当你开始用FLUX.1模型批量生成图片时&#xff0c;可能会遇到一个常见问题&#xff1a;生成100张图片要等好几个小时。这不是模型本身的问题&#xff0c;而是因为Python默认情况下一…...

3.15打卡

111.统计候选人的票数问题描述设有3个候选人zhang、li、wang&#xff08;候选人姓名不区分大小写&#xff09;&#xff0c;10个选民&#xff0c;选民每次输入一个得票的候选人的名字&#xff0c;若选民输错候选人姓名&#xff0c;则按废票处理。选民投票结束后&#xff0c;程序…...

鹅UE大世界射击游戏客户端开发面经

基本情况&#xff1a;boss上技术直接发的面试&#xff0c;应该是缺人被我撞上了。只问了UE(0.7)和C(0.3)的问题&#xff0c;UE的问题有一半围绕项目问的&#xff0c;C的问题纯八股&#xff08;eg&#xff1a;多态和虚函数&#xff09;。UE太不熟啦&#xff0c;挂了。[ㆆ⩊ㆆ]倒…...

2026最新基金估值实时工具|支持分批加仓策略与盈亏汇总(Win版稳定运行)

温馨提示&#xff1a;文末有联系方式工具名称与更新动态 2026最新基金估值实时工具&#xff5c;支持分批加仓策略与盈亏汇总&#xff08;Win版稳定运行&#xff09; 2026年2月2日完成版本迭代&#xff0c;全面适配Windows操作系统&#xff0c;运行流畅无兼容问。工具数据来源与…...

TCP自传:我凭三次握手,成为计网考研必考顶流(附wireshark抓包验证)

大家好&#xff01;我是TCP。欢迎来探索我哈哈哈。一、我的自述&#xff1a;为什么要讲清我的“三次握手”我是TCP&#xff0c;传输层里最操心、最可靠的协议。从计算机网络课本&#xff0c;到考研真题&#xff0c;再到后端开发面试&#xff0c;我永远是高频考点。很多同学背我…...

Phi-3-Mini-128K调用API全指南:Python与Java客户端开发示例

Phi-3-Mini-128K调用API全指南&#xff1a;Python与Java客户端开发示例 你是不是已经部署好了Phi-3-Mini-128K模型&#xff0c;看着那个API地址&#xff0c;却不知道下一步该怎么把它用起来&#xff1f;或者你正在开发一个应用&#xff0c;想集成AI对话能力&#xff0c;但面对…...