基础算法(一):枚举算法

article/2025/8/23 14:40:11

前言

        从这篇文章开始,小荔枝就开始学习算法和数据结构啦!!!我们先来看看入门的一些基础算法,在这篇文章中,主要介绍的是枚举算法。我们重点需要了解枚举算法使用时需要确定的条件,荔枝会用一道题目来凸显这些条件的重要性。


文章目录

前言

1. 基础概念及条件

基础概念

使用条件

2. 实例剖析——LeeCode 829

题目来源

题目描述

题解思路

核心代码

总结


1. 基础概念及条件

基础概念

        枚举算法在实际应用中很多,几乎大部分的题目都可以使用枚举算法来解决。枚举算法的本质其实就是暴力枚举出所有的可能,再使用条件语句选择正确的答案。枚举算法比较简单粗暴,算法的实现最为简单,在解题的时候我们最先考虑的就是枚举算法。相较于其它的算法,枚举算法的思维量比较小,实现的难度比较低;但是但问题实例的规模比较大的时候,枚举算法的运行速度会比较慢,因此容易出现超时的情况。但是当我们可以在某些局部的地方使用枚举算法可能会得到一种比较好的效果。

使用条件

我们在使用任何算法之前都需要考虑是否符合算法的使用条件,使用枚举算法的条件有两个:、

  • 枚举的可能性是有限的并可被预估;
  • 枚举必须要有一个解的限制的范围,候选答案的范围在求解前有一个确定的集合

2. 实例剖析——LeeCode 829

题目来源

        LeeCode 829.连续整数求和

题目描述

给定一个正整数 n,返回 连续正整数满足所有数字之和为 n 的组数 。 

示例1:

输入:n = 5

输出:2

解释:5 = 2 + 3,共有两组连续整数([5],[2,3])求和后为 5。

示例2:

输入:n = 9

输出:3

解释:9 =  4 + 5 = 2 +3 + 4

题解思路

        在开始枚举之前,我们需要获得枚举的对象可能解集,并根据判断条件获得真解。我们首先来看看题目,题目告诉我们给定一个正整数,需要获得一个或多个连续的整数组合,且该组合中所有数的求和就是我们的给定数值,问我们有多少种组合。换一种说法就是:对于公差为1的等差数列组合,它的每一个的等差数列求和后的值就是我们给定的n,要得到该组合中等差数列的个数。因此我们可以利用等差数列的公式作为题目的突破口:我们设等差数列求和为n,一共有i个项,公差为1,首项是a1,我们给出等差数列求和公式:

n=\frac{({a_{1}}+{a_{n}})*i}{2}

下面对该公式进行推导:

2n=(2{a_{1}}+i-1)*i\rightarrow \frac{2n}{i}=2{a_{1}}+i-1         

\frac{2n}{i}-i+1=2{a_{1}}\geq 2\rightarrow \frac{2n}{i}\geq i+1\rightarrow \frac{2n}{i}> i

得到项数的上限条件:

i<\sqrt{2n}

这时候我们也可以得到2n/i-i+1是2的倍数、2n是项数i的倍数。

        通过上面的推导我们得出枚举项数i的上限截止条件:i*i<2n,同时根据等差数列的计算公式我们知晓2n与i存在倍数关系,根据公式推导出来的结论我们得出另一个判断条件2*n/i-i+1是2的倍数,根据这两个关系得出枚举的真解。其实我们看一下这道题的难点就是推导出枚举的解的限制范围,即项数i的枚举范围,这是很重要的!因此枚举的对象选择和枚举范围的确定在枚举算法中是很重要的。

核心代码

这里给出的是用C++求解的核心代码 ,我们可以看到其实算法实现起来比较简单。

class Solution {
public:int consecutiveNumbersSum(int n) {int num=0;//根据组合项数i的上限确定枚举条件for(int i=1;i*i<2*n;i++){//根据条件:2n可以整除项数;2*n/i-i+1是2的倍数if((2*n)%i==0 && (2*n/i-i+1)%2==0){num++;}}return num;}
};

总结

        在这篇文章中,荔枝主要介绍了枚举算法的基本概念,并用一个例子来直观地感受枚举算法的操作简便性。由于枚举较为简单,这里就不再过多着墨了哈哈哈,接下来荔枝会整理排序算法的内容嘻嘻嘻。

今朝已然成为过去,明日依然向往未来!我是小荔枝,在技术成长的路上与你相伴,码文不易,麻烦举起小爪爪点个赞吧哈哈哈~~~ 比心心♥~~~


http://chatgpt.dhexx.cn/article/gXuH2MoD.shtml

相关文章

常用算法——枚举算法

在进行归纳推理时&#xff0c;如果逐个考察了某类事件的所有可能情况&#xff0c;因而得出一般结论&#xff0c;那么这结论是可靠的&#xff0c;这种归纳方法叫做枚举算法 一、基本概念和算法 枚举算法简称枚举法&#xff0c;也称为列举法、穷举法&#xff0c;是暴力策略的具体…

枚举算法

一、枚举法的基本思想 枚举法又称穷举法。 基本思想是根据提出的问题枚举所有可能状态&#xff0c;并用问题给定的约束条件检验哪些状态是需要的&#xff0c;哪些状态是不需要的。 能使命题成立的状态&#xff0c;即为其解。 枚举结构&#xff1a;循环判断语句。 二、枚举…

传统人工势场法---经典算法

网上代码很多&#xff0c;这个可以直接使用。 Xo[0 0];%起点位置 k50;%计算引力需要的增益系数 K0;%初始化 m15;%计算斥力的增益系数&#xff0c;都是自己设定的。 Po0.5;%障碍影响距离&#xff0c;当障碍和车的距离大于这个距离时&#xff0c;斥力为0&#xff0c;即不受该障碍…

人工势场法(APF) —— Path Planning

版权声明&#xff1a;本文为博主原创博文&#xff0c;未经允许不得转载&#xff0c;若要转载&#xff0c;请说明出处并给出博文链接 维基百科说&#xff1a;“人工势场法&#xff08;Artificial Potential Field&#xff0c; APF&#xff09;是一种将机器人的外形视为势场中的一…

基于人工势场法的移动机器人路径规划研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 路径规划是移动机器人领域的热点研究方向&#xff0c;人工势场法已在工业机器人路径规划中得到广泛应用&#xff0c;近年来正逐…

11(0)-AirSim+四旋翼仿真-人工势场法避障

1.基本原理 人工势场法的基本原理为&#xff0c;根据地图内障碍物、目标点等的分布&#xff0c;构造一个人工势场&#xff0c;无人机由势能较高的位置向势能较低的位置移动。就好比是一个电场&#xff0c;电场内不同位置的电势能不同&#xff0c;对带电物体产生的力也不同&…

局部路径规划中的人工势场法

人工势场法是局部路径规划的一种比较常用的方法。这种方法假设机器人在一种虚拟力场下运动。 一、简介 如图所示&#xff0c;机器人在一个二维环境下运动&#xff0c;图中指出了机器人&#xff0c;障碍和目标之间的相对位置。 这个图比较清晰的说明了人工势场法的作用&#…

matlab箭头梯度方向场,局部路径规划算法——人工势场法

人工势场法是由Khatib于1986年提出,其方法是将移动机器人所处的环境用势场来定义,通过位置信息来控制机器人的避障行驶,基本思想是构造目标位姿引力场和障碍物周围斥力场共同作用的人工势场,搜索势函数的下降方向来寻找无碰撞路径。人工势场法避障技术使得机器人的移动能很…

基于人工势场法的车辆编队轨迹规划matlab仿真验证

给出了完整的MATLAB代码仿真&#xff1b;基于人工势场法编队的基本原理&#xff1a;通过构建车辆相对目标点的引力势场和斥力势场构建车辆所处地图下的整体势场&#xff0c;设置如图所示的势场图&#xff0c; 图中圆心为我们参考的目标点&#xff0c;其可以提供引力方向&#x…

基于人工势场法的二维平面内无人机的路径规划的matlab仿真,并通过对势场法改进避免了无人机陷入极值的问题

目录 1.算法描述 2.matlab算法仿真效果 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 人工势场法原理是&#xff1a;首先构建一个人工虚拟势场&#xff0c;该势场由两部分组成&#xff0c;一部分是目标点对移动机器人产生的引力场&#xff0c;方向由机器人指向目标点&#xf…

matlab人工势场法三维演示图,运动规划入门 | 5. 白话人工势场法,从原理到Matlab实现...

如何利用人工势场进行运动规划? 1.1 引力势场(Attractive Potential Field) 人工势场这个特殊的势场并不是一个单一的场,其实它是由两个场叠加组合而成的,一个是引力场,一个是斥力场。 顾名思义引力势场是具有吸引的性质,会将机器人从起点处朝着终点处吸引,所以引力场的存…

路径规划算法3 改进的人工势场法(Matlab)

目录 传统人工势场 引力势场 斥力势场 合力势场 传统人工势场法存在的问题 改进的人工势场函数 Matlab代码实现 参考链接&#xff1a; [1]朱伟达. 基于改进型人工势场法的车辆避障路径规划研究[D]. 江苏大学, 2017. 1986年Khatib首先提出人工势场法&#xff0c;并将其应用在…

【控制】人工势场法及人工势场函数

目录 人工势场法-维基百科路径规划-人工势场法&#xff08;Artifical Potential Field&#xff09;引力场 (attractive/gravitation field)斥力场 (repulsive field)总场 【机器人路径规划】人工势场法PaperMatlab 代码自己编写的 Matlab1. 仅考虑引力的情况 人工势场法-维基百…

移动机器人路径规划:人工势场法

人工势场法是一种原理比较简单的移动机器人路径规划算法&#xff0c;它将目标点位置视做势能最低点&#xff0c;将地图中的障碍物视为势能高点&#xff0c;计算整个已知地图的势场图&#xff0c;然后理想情况下&#xff0c;机器人就像一个滚落的小球&#xff0c;自动避开各个障…

人工势场法matlab讲解_【机器人路径规划】人工势场法

阅读本文需要的基础知识为: 理解机器人的构型空间。建议阅读:机器人运动规划中的C space怎样理解?为什么不直接在笛卡尔坐标系下运算呢? 本文的实现程序与使用说明见我的学习工具箱:小明工坊:【个人开源】机器人运动规划学习工具箱使用说明 基本原理 1.概述 我们打两个比…

学习笔记:人工势场法

一、算法简介 1986年Khatib首先提出人工势场法&#xff0c;并将其应用在机器人避障领域&#xff0c;而现代汽车可以看作是一个高速行驶的机器人&#xff0c;所以该方法也可应用于汽车的避障路径规划领域。 二、算法思想 1、人工势场法的基本思想是在障碍物周围构建障碍物斥力…

人工势场法matlab讲解,传统人工势场法(matlab)

【实例简介】 人工势场法路径规划是由Khatib提出的一种虚拟力法(Oussama Khatib,Real-Time obstacle Avoidance for Manipulators and Mobile Robots. Proc of The 1994 IEEE.)。它的基本思想是将机器人在周围环境中的运动,设计成一种抽象的人造引力场中的运动,目标点对移动…

路径规划-人工势场法(Artifical Potential Field)

人工势场法是局部路径规划的一种比较常用的方法。这种方法假设机器人在一种虚拟力场下运动。 一、简介 如图所示&#xff0c;机器人在一个二维环境下运动&#xff0c;图中指出了机器人&#xff0c;障碍和目标之间的相对位置。 这个图比较清晰的说明了人工势场法的作用&#…

人工势场法

文章目录 前言一、人工势场法二、简要理解 1.示例2.代码总结 前言 路径规划是移动机器人领域的一个重要组成部分&#xff0c;传统的路径规划代表算法包括 A*算法、Dijkstra 算法、人工势场法以及仿生学的蚁群算法。人工势场法是机器人路径规划算法中一种简单有效的方法。人工势…

路径规划-人工势场法(Artificial Potential Field)

人工势场法是局部路径规划的一种比较常用的方法。这种方法假设机器人在一种虚拟力场下运动。 1. 简介 如图所示&#xff0c;机器人在一个二维环境下运动&#xff0c;图中指出了机器人&#xff0c;障碍和目标之间的相对位置。 这个图比较清晰的说明了人工势场法的作用&#xf…