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

算法学习笔记(7.3)-贪心算法(最大切分乘问题)

目录

##问题描述

 ##问题思考

##贪心策略确定

##代码实现

##时间复杂度

 ##正确性验证


##问题描述

给定一个正整数 𝑛 ,将其切分为至少两个正整数的和,求切分后所有整数的乘积最大是多少

 ##问题思考

假设我们将 𝑛 切分为 𝑚 个整数因子,其中第 𝑖 个因子记为 𝑛𝑖 ,即

本题的目标是求得所有整数因子的最大乘积,即

我们需要思考的是:切分数量 𝑚 应该多大,每个 𝑛𝑖 应该是多少?

##贪心策略确定

我们假设从n中分出一个最小的因子2,则它们的乘积为2 * (n - 2),我们将该乘积与n进行比较得到一个重要结论:

当n≥4的时候,切分出来一个2后乘积会变大,这就说明大于等于4的整数都应该被切分出来。

##贪心策略1

如果切分方案中包含≥4因子,那么它就应该被继续切分。最终的切分方案只应出现1,2,3者三种因子。

这是我们就要思考选择什么因子会使结果达到最优解,1可以直接舍弃考虑。

当n = 6时,3*3>2*2*2,说明因子3比因子2更优。

##贪心策略2

在切分方案中,最多出现两个2.因为3个2总可以替换成2个3,获得最优的更大乘积。

综上所述,可推理出以下贪心策略。

  1. 输入整数 𝑛 ,从其不断地切分出因子 3 ,直至余数为 0、1、2 。
  2. 当余数为 0 时,代表 𝑛 是 3 的倍数,因此不做任何处理。
  3. 当余数为 2 时,不继续划分,保留。
  4. 当余数为 1 时,由于 2×2>1×3 ,因此应将最后一个 3 替换为 2 。

##代码实现

#python代码示例
import math
def max_product_cutting(n) :if n <= 3 :return 1 * (n - 1) a = n // 3b = n % 3if b == 1 :return int(math.pow(3,a-1)) * 2 * 2if b == 2 :return int(math.pow(3,a)) * 2return int(math.pow(3,a))
//c++代码示例
int maxProductCutting(int n)
{if (n <= 3){return 1 * (n - 1) ;	}	int a = n / 3 ;int b = n % 3 ;if (b == 1){return (int)pow(3,a-1) * 2 * 2 ;}if (b == 2){return (int)pow(3,a) * 2 ;}return (int)pow(3,a) ;
} 

##时间复杂度

时间复杂度取决于编程语言的幂运算的实现方法。以 Python 为例,常用的幂计算函数有三种。

  • 运算符 ** 和函数 pow() 的时间复杂度均为 𝑂(log⁡⁡𝑎) 。
  • 函数 math.pow() 内部调用 C 语言库的 pow() 函数,其执行浮点取幂,时间复杂度为 𝑂(1) 。

变量 𝑎 和 𝑏 使用常数大小的额外空间,因此空间复杂度为 𝑂(1) 。

 ##正确性验证

使用反证法,只分析 𝑛≥3 的情况。

  1. 所有因子 ≤3 :假设最优切分方案中存在 ≥4 的因子 𝑥 ,那么一定可以将其继续划分为 2(𝑥−2) ,从而获得更大的乘积。这与假设矛盾。
  2. 切分方案不包含 1 :假设最优切分方案中存在一个因子 1 ,那么它一定可以合并入另外一个因子中,以获得更大的乘积。这与假设矛盾。
  3. 切分方案最多包含两个 2 :假设最优切分方案中包含三个 2 ,那么一定可以替换为两个 3 ,乘积更大。这与假设矛盾。

相关文章:

算法学习笔记(7.3)-贪心算法(最大切分乘问题)

目录 ##问题描述 ##问题思考 ##贪心策略确定 ##代码实现 ##时间复杂度 ##正确性验证 ##问题描述 给定一个正整数 &#x1d45b; &#xff0c;将其切分为至少两个正整数的和&#xff0c;求切分后所有整数的乘积最大是多少 ##问题思考 假设我们将 &#x1d45b; 切分为 &…...

大型企业用什么文件加密软件,五款适合企业的文件加密软件

大型企业在选择文件加密软件时&#xff0c;通常会倾向于那些能够提供全面数据保护、具有高度可定制性、易于管理且能适应复杂组织结构的解决方案。以下是一些适合大型企业使用的文件加密软件&#xff1a; 1.域智盾软件&#xff1a; 作为一款企业级文件加密软件&#xff0c;支持…...

【数据结构】二叉树运用及相关例题

文章目录 前言查第K层的节点个数判断该二叉树是否为完全二叉树例题一 - Leetcode - 226反转二叉树例题一 - Leetcode - 110平衡二叉树 前言 在笔者的前几篇篇博客中介绍了二叉树的基本概念及基本实现方法&#xff0c;有兴趣的朋友自己移步看看。 这篇文章主要介绍一下二叉树的…...

Java基础知识点(反射、注解、JDBC、TCP/UDP/URL)

文章目录 反射反射的定义class对象反射的操作 注解注解的定义注解的应用注解的分类基准注解元注解 自定义注解自定义规则自定义demo JDBCTCP/UDP/URLTCPUDPURL 反射 反射的定义 Java Reflection是Java被视为动态语言的基础啊&#xff0c; 反射机制允许程序在执行期间接入Refl…...

postgressql——Tuple学习(2)

Tuple含义 作用 PG并没有像Oracle那样的undo来存放旧数据&#xff0c;而且PG没有真正意义上的delete&#xff0c;而是将旧版本直接存放于relation文件中&#xff0c;也就是成为了dead tuple。我们可以理解成“过期的数据”含义 tuple就相当于一个存储数据的小容器&#xff0c;…...

Linux日志管理

文章目录 一、日志管理概述1.1、日志管理介绍1.2、日志管理的重要性1.3、日志管理的组件1.4、日志管理的流程1.5、日志管理的挑战 二、日志分类介绍2.1、windows日志类别2.1.1、Application Log2.1.2、Security Log2.1.3、System Log2.1.4、Setup Log2.1.5、ForwardedEvents Lo…...

【社区投稿】给 NdArray 装上 CUDA 的轮子

Ndarry是Rust编程语言中的一个高性能多维、多类型数组库。它提供了类似 numpy 的多种多维数组的算子。与 Python 相比 Rust 生态缺乏类似 CuPy, Jax 这样利用CUDA 进行加速的开源项目。虽然 Hugging Face 开源的 candle 可以使用 CUDA backend 但是 candle 项瞄准的是大模型的相…...

Linux|Linux常用命令合集(一)

想记录一下个人会用到的一些linux命令&#xff0c;持续更新中… chmod\chown 之前如果文件权限不足&#xff0c;直接就是 chmod 777 filename/dirname &#xff0c;这并不是一个好习惯。 r&#xff08;读权限&#xff09;&#xff1a;值为4w&#xff08;写权限&#xff09;&a…...

RTPS协议之Behavior Module

目录 交互要求基本要求RTPS Writer 行为RTPS Reader行为 RTPS协议的实现与Reader匹配的Writer的行为涉及到的类型RTPS Writer实现RTPS WriterRTPS StatelessWriterRTPS ReaderLocatorRTPS StatefulWriterRTPS ReaderProxyRTPS ChangeForReader RTPS StatelessWriter BehaviorBe…...

Socket网络通讯入门(一)

提示&#xff1a;能力有限&#xff0c;不足以及错误之处还请指出&#xff01; 文章目录 前言一、 计算机网络 OSI、TCP/IP、五层协议 体系结构1.OSI七层模型每层的作用2.TCP/IP协议分成3.五层协议体系结构 二、Socket服务端和客户端 简单通信1.服务端代码2.客户端 总结 前言 简…...

第十五课,海龟画图:抬笔与落笔函数、画曲线函数

一&#xff0c;turtle.penup()和turtle.pendown()&#xff1a;抬起与落下画笔函数 当使用上节课学习的这个turtle.forward()&#xff1a;画笔前进函数时&#xff0c;画笔会朝着当前方向在画布上留下一条指定&#xff08;像素&#xff09;长度的直线&#xff0c;但你可能发现&a…...

【机器学习】让大模型变得更聪明

文章目录 前言1. 理解大模型的局限性1.1 理解力的挑战1.2 泛化能力的挑战1.3 适应性的挑战 2. 算法创新&#xff1a;提高模型学习和推理能力2.1 自监督学习2.2 强化学习2.3 联邦学习 3. 数据质量与多样性&#xff1a;增强模型的泛化能力3.1 高质量数据的获取3.2 数据多样性的重…...

5.26机器人基础-DH参数 正解

1.建立DH坐标系 1.确定Zi轴&#xff08;关节轴&#xff09; 2.确定基础坐标系 3.确定Xi方向&#xff08;垂直于zi和zi1的平面&#xff09; 4.完全确定各个坐标系 例子&#xff1a; 坐标系的布局是由个人决定的&#xff0c;可以有不同的选择 标准坐标系布局&#xff1a; …...

Vue3项目练习详细步骤(第五部分:用户模块的功能)

顶部导航栏个人信息显示 接口文档 接口请求与绑定 导航栏下拉菜单功能 路由实现 退出登录和路由跳转实现 基本资料修改 页面结构 接口文档 接口请求与绑定 修改头像 页面结构 头像回显 头像上传 接口文档 重置密码 页面结构 接口文档 接口请求与绑定 顶部导航…...

测试onlyoffice在线预览文件功能

HTML示例代码 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><title>测试onlyoffice在线预览文件功能</title><script type"text/javascript" src"http://onlyoffice服务器ip:端口/…...

Day57 每日温度 + 下一个更大元素Ⅰ

739 每日温度 题目链接&#xff1a;739.每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;…...

nuxt3 api如何透传(不引第3方库)

背景: nuxt做为一个vue的服务端渲染框架,本身就具备服务端的功能,理论上可以完整做一个系统功能,包括对数据库等等操作,但更合理的做法是nuxt应该定位只做服务端渲染的事情,更偏向ui层面,而非数据curd,业务逻辑,权限等等偏向服务端的逻辑。本身基于vue的服务端渲染已…...

list常用接口模拟实现

文章目录 一、模拟list类的框架二、函数接口实现1、迭代器接口2、常用删除、插入接口3、常用其他的一些函数接口4、默认成员函数 一、模拟list类的框架 1、使用带哨兵的双向链表实现。 2、链表结点&#xff1a; // List的结点类 template<class T> struct ListNode {Li…...

前端工程化工具系列(三) —— Stylelint(v16.6.1):CSS/SCSS 代码质量工具

Stylelint 是 CSS/SCSS 代码的静态分析工具&#xff0c;用于检查代码中的错误和样式违规。 1. 环境要求 v16 以上的 Stylelint&#xff0c;支持 Node.js 的版本为 v18.12.0。 在命令行中输入以下内容来查看当前系统中 node 的版本。 node -vNode.js 推荐使用 v18.20.3 或者 …...

crossover mac好用吗 CrossOver Mac怎么下载 Mac用crossover损害电脑吗

CrossOver 是一款可以让Mac用户能够自由运行和游戏windows游戏软件的虚拟机类应用&#xff0c;虽然能够虚拟windows但是却并不是一款虚拟机&#xff0c;也不需要重启系统或者启动虚拟机&#xff0c;类似于一种能够让mac系统直接运行windows软件的插件。它以其出色的跨平台兼容性…...

Notepad2终极指南:轻量级文本编辑器的完整使用教程

Notepad2终极指南&#xff1a;轻量级文本编辑器的完整使用教程 【免费下载链接】notepad2 Notepad2-zufuliu is a light-weight Scintilla based text editor for Windows with syntax highlighting, code folding, auto-completion and API list for many programming languag…...

TripoSR:0.5秒单图像3D重建技术指南与实战应用

TripoSR&#xff1a;0.5秒单图像3D重建技术指南与实战应用 【免费下载链接】TripoSR 项目地址: https://gitcode.com/GitHub_Trending/tr/TripoSR 在3D内容创作领域&#xff0c;传统建模流程耗时耗力&#xff0c;而TripoSR作为开源3D重建模型&#xff0c;通过单张2D图像…...

告别裸机UI!用LVGL 8.3给你的STM32项目做个漂亮界面(基于HAL库和SPI屏)

从零打造STM32智能界面&#xff1a;LVGL 8.3实战指南 在嵌入式开发领域&#xff0c;用户界面往往是最容易被忽视却最能直接影响用户体验的环节。想象一下&#xff0c;当你精心设计的智能家居控制面板或工业仪表&#xff0c;因为简陋的字符界面而显得廉价时&#xff0c;那种挫败…...

Phi-3-mini-128k-instruct与智能车仿真:生成自然语言控制逻辑与调试报告

Phi-3-mini-128k-instruct与智能车仿真&#xff1a;生成自然语言控制逻辑与调试报告 最近在折腾一个智能车仿真项目&#xff0c;发现一个挺有意思的事儿&#xff1a;让AI来帮忙写控制逻辑和看报告&#xff0c;效率提升了不少。以前我们得手动把“绕过前面那个障碍物&#xff0…...

AI净界-RMBG-1.4入门指南:理解Alpha通道、PNG透明度与导出规范

AI净界-RMBG-1.4入门指南&#xff1a;理解Alpha通道、PNG透明度与导出规范 你是不是也遇到过这样的烦恼&#xff1f;拍了一张不错的照片&#xff0c;想换个背景发朋友圈&#xff0c;或者做电商需要把商品图抠出来&#xff0c;结果发现边缘抠得跟狗啃的一样&#xff0c;头发丝和…...

CosyVoice-300M Lite实战案例:在线教育语音课件生成系统

CosyVoice-300M Lite实战案例&#xff1a;在线教育语音课件生成系统 1. 为什么在线教育需要专属语音合成系统&#xff1f; 你有没有遇到过这样的场景&#xff1a;一位初中物理老师想为“浮力原理”这节课制作配套音频讲解&#xff0c;但反复试了三款主流TTS工具——要么普通话…...

雪女-斗罗大陆-造相Z-Turbo集成开发:在IntelliJ IDEA中配置模型调试环境

雪女-斗罗大陆-造相Z-Turbo集成开发&#xff1a;在IntelliJ IDEA中配置模型调试环境 你是不是也遇到过这种情况&#xff1f;拿到一个功能强大的AI模型&#xff0c;比如这个“雪女-斗罗大陆-造相Z-Turbo”&#xff0c;知道它能生成惊艳的斗罗大陆风格图像&#xff0c;但一说到要…...

Qwen3-0.6B-FP8实战案例:为嵌入式系统开发提供代码生成与调试建议

Qwen3-0.6B-FP8实战案例&#xff1a;为嵌入式系统开发提供代码生成与调试建议 最近在折腾一个STM32的小项目&#xff0c;想用PWM调个呼吸灯&#xff0c;结果对着手册和寄存器配置了半天&#xff0c;不是时钟没配对就是占空比算错&#xff0c;一编译还报了一堆警告。相信不少搞…...

拯救你的RStudio Server:除了点‘Terminate R’,你还可以试试这几招(附原理)

拯救你的RStudio Server&#xff1a;除了点‘Terminate R’&#xff0c;你还可以试试这几招&#xff08;附原理&#xff09; 当你盯着RStudio Server界面上那个转个不停的加载图标&#xff0c;看着"R is taking longer to start than usual"的提示&#xff0c;内心可…...

AI的正规方程法与梯度下降法的比较研究

...