组合总和(剪枝算法)

article/2025/9/28 23:39:31

组合总和(剪枝算法)

题目

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取

示例

示例 1:输入: candidates = [2,3,6,7], target = 7,
所求解集为:
[[7],[2,2,3]
]示例2:输入: candidates = [2,3,5], target = 8,
所求解集为:
[[2,2,2,2],[2,3,3],[3,5]
]

解题

思路

所谓剪枝算法,先考虑根节点为我们的目标值,也就是7
那么第二层,我们能减去的值为2,3,6,7,第二层的值就剩下5,4,1,0
我们见到了0,就假定这个枝叶已经开花了,纳入结果集,然后开始为第三层剪枝(5,4,1),减去的还是2,3,6,7
我们发现剪完之后很多叶子已经变成了负数,那么我们就把这个枝插给舍去
以此类推,所有为0的收入结果集,所有小于1的枝叶全部剪掉
最后即结果集。

图片引用自leetcode

代码

class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {Arrays.sort(candidates);LinkedList<Integer> track = new LinkedList<>();combinationSum(candidates, 0, target, track);return result;}private List<List<Integer>> result = new ArrayList<>();private void combinationSum(int[] candidates, int start, int target, LinkedList<Integer> track) {if (target < 0) {return;} else if (target == 0) {result.add(new LinkedList<>(track));return;}for (int i = start; i < candidates.length; i++) {if (target < candidates[i]) {break;}track.add(candidates[i]);combinationSum(candidates, i, target - candidates[i], track);track.removeLast();}}
}

ps:代码看着简单,实则要考虑的点不少:

  1. 为什么获取结果集要用result.add(new LinkedList<>(track));而不是直接add(track);
    所有递归保存结果的均未track如果result里面所有的引用都指向它,最后的结果集里面的数据都是一样的,所以要重新创建集合。
  2. 为什么每次递归回来要track.removeLast();
    因为在剪枝的时候所有的节点都放到了track里面,当track判断完毕后不行被剪枝,还保留不行的叶子的话,结果集会多出很多垃圾的节点
  3. 参数start是做什么用的
    以3为二层节点的树是不能用2节点的,因为2节点一定已经把这种情况给包含了,所以不引如start结果集会重复

回溯算法的公式

1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,无法再做选择的条件。result = []
def backtrack(路径, 选择列表):if 满足结束条件:result.add(路径)returnfor 选择 in 选择列表:做选择backtrack(路径, 选择列表)撤销选择

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

相关文章

Alpha-Beta剪枝算法原理

1. 前言 前文&#xff1a;极小化极大&#xff08;Minimax&#xff09;算法原理 极小化极大算法在完全信息零和博弈中&#xff0c;基于己方努力使得在N步后优势最大化&#xff08;即评估函数输出值最大化&#xff09;和对方努力使得N步后己方优势最小化这两个出发点&#xff0c…

GRNN广义回归神经网络

广义回归神经网络 GRNN &#xff08;General Regression Neural Network&#xff09; 广义回归神经网络是基于径向基函数神经网络的一种改进。 结构分析&#xff1a; 可以看出&#xff0c;这个结构与之前我们所讲过的径向基神经网络非常相似&#xff0c;区别就在于多了一层加和…

m分别使用BP神经网络和GRNN网络进行时间序列预测matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 广义回归神经网络是径向基神经网络的一种&#xff0c;GRNN具有很强的非线性映射能力和学习速度&#xff0c;比RBF具有更强的优势&#xff0c;网络最后普收敛于样本量集聚较多的优化回归&#xff…

广义回归神经网络(GRNN)

广义回归神经网络&#xff08;GRNN&#xff09; 一、GRNN神经网络概述 二、GRNN神经网络理论基础&#xff08;如果对理论不感兴趣可直接看GRNN网络结构&#xff0c;网络结构理解更直观&#xff09; 三、GRNN的网络结构 注意&#xff1a;一定要理解第三个求和层的概念&#xff0…

【GRNN情绪识别】基于GRNN神经网络的情绪识别算法matlab仿真

1.软件版本 matlab2021a 2.本算法理论知识 GRNN&#xff0c;即General Regression Neural Network&#xff0c;中文全称为广义回归神经网络&#xff0c;是由The Lockheed Palo Alto研究实验室在1991年提出的。GRNN是一种新型的基于非线性回归理论的神经网络模型[43,44]。GRN…

m基于C3D-hog-GRNN广义回归神经网络模型的人员异常行为识别算法的matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 实时的人群异常行为识别是一项极具挑战的工作&#xff0c;具有较高的现实意义和社会需求&#xff0c;快速准确地判断出异常行为并及时预警&#xff0c;一直是我们探索的方向。传统的机器学习算法…

基于BP神经网络/GRNN神经网络的电力预测matlab仿真

目录 一、理论基础 二、案例背景 三、MATLAB程序 四、仿真结论分析 一、理论基础 BP神经网络&#xff0c;即Back Propagation神经网络&#xff0c;其本质是一种基于误差反馈传播的神经网络算法。从结构上讲&#xff0c;BP神经网络是由一个信息的正向传播网络和一个误差的反…

RNN CNN GCN

RNN CNN GCN 属于深度学习领域——图像识别 主要用于识别提取图像的特征 CNN:对象是图片&#xff0c;一个二维结构&#xff0c;其主要核心是有一个kernel小窗口&#xff0c;用于图片的平移&#xff0c;然后再利用卷积来提取图片的特征。 RNN:针对一维结构&#xff0c;主要利用…

基于麻雀搜索算法优化的广义回归神经网络(GRNN)预测 -附代码

基于麻雀搜索算法优化的广义回归神经网络(GRNN)预测 文章目录 基于麻雀搜索算法优化的广义回归神经网络(GRNN)预测1.GRNN 神经网络概述2.GRNN 的网络结构3.GRNN的理论基础4.运输系统货运量预测相关背景5.模型建立6.麻雀搜索算法优化GRNN7.实验结果8.参考文献9.Matlab代码 摘要&…

广义回归神经网络(GRNN)的数据预测

广义回归神经网络是径向基神经网络的一种&#xff0c;GRNN具有很强的非线性映射能力和学习速度&#xff0c;比RBF具有更强的优势&#xff0c;网络最后普收敛于样本量集聚较多的优化回归&#xff0c;样本数据少时&#xff0c;预测效果很好&#xff0c; 网络还可以处理不稳定数…

神经网络(一):GRNN广义回归神经网络理论概念笔记

GRNN广义回归神经网络以及相关概念 https://blog.csdn.net/zengxiantao1994/article/details/72787849 https://blog.csdn.net/guoyunlei/article/details/76101899参考博客 小小白入坑系列&#xff0c;欢迎大佬的指教! 算法网上铺天盖地的&#xff0c;我只是把自己对算法的理…

【GRNN回归预测】基于matlab有限增量进化广义回归神经网络LIEV-GRNN数据回归预测【含Matlab源码 2132期】

⛄一、GRNN模型 GRNN是一种非线性回归的前馈式神经网络。通常是由输入层、模式层、求和层和输出层构成。GRNN算法在运算速度与学习能力上比径向基函数神经网络(radial basis function, RBF)、反向传播神经网络(back propagation, BP)更强&#xff0c;广泛应用于系统辨识、预测…

神经网络学习笔记(二)GRNN广义回归神经网络

广义回归神经网络&#xff08;GRNN&#xff09; 广义回归神经网络是径向基神经网络的一种&#xff0c;GRNN具有很强的非线性映射能力和学习速度&#xff0c;比RBF具有更强的优势&#xff0c;网络最后普收敛于样本量集聚较多的优化回归&#xff0c;样本数据少时&#xff0c;预测…

GRNN神经网络概述

GRNN&#xff0c;General Regression Neural Network&#xff0c;即广义回归神经网络&#xff0c;最早是由美国的Donald F.Specht教授于1991年提出的基于非线性的回归理论的人工神经网络模型[47,48]。GRNN广义回归神经网络具有较好的网络适应能力&#xff0c;从而使得神经网络能…

广义回归神经网络GRNN回归预测-MATLAB代码实现

一、GRNN简介 广义回归神经网络&#xff08;General Regression Neural Network, GRNN&#xff09;是1991年提出的基于径向基函数&#xff08;Radial Basis Fuction&#xff0c;RBF&#xff09;网络的一种改进形式&#xff0c;与径向基函数网络相比&#xff0c;其训练更为方便…

广义回归神经网络(GRNN)的实现(Python,附源码及数据集)

文章目录 一、理论基础1、广义回归神经网络结构2、输入层3、模式层4、求和层5、输出层6、优化思路 二、广义回归神经网络的实现1、实现过程&#xff08;GRNN.py&#xff09;2、预测结果3、参考源码及实验数据集 一、理论基础 广义回归神经网络&#xff08;Generalized Regress…

【机器学习】广义回归神经网络(GRNN)的python实现

【机器学习】广义回归神经网络(GRNN)的python实现 一、广义回归神经网络原理1.1、GRNN与PNN的关系2.2、GRNN的网络结构二、广义回归神经网络的优点与不足2.1、优点2.2、不足三、GRNN的python实现参考资料一、广义回归神经网络原理 1.1、GRNN与PNN的关系 广义回归神经网络(…

C++ Unique函数 详细

unique函数是STL中比较实用的函数之一 包含该函数的函数头文件为 #include <algorithm>2 unique函数可以删除有序数组中的重复元素。 注意&#xff1a; a 这里的删除不是真的delete&#xff0c;而是将重复的元素放到容器末尾 b unique函数的返回值是去重之后的尾地址 c…

c++的unique函数

unique是 c标准模板库STL中十分实用的函数之一&#xff0c;使用此函数需要 #include <algorithm> 该函数的作用是“去除”容器或者数组中相邻元素的重复出现的元素&#xff0c;注意 (1) 这里的去除并非真正意义的erase&#xff0c;而是将重复的元素放到容器的末尾&…

SQL查询JSON格式的字段值 JSON_UNQUOTE与JSON_EXTRACT 去除SQL中双引号

一、最常用的就是 JSON_EXTRACT()函数&#xff0c;用于提取字段值 selectJSON_EXTRACT(a.info,"$.Score")fromjsontest awhereJSON_EXTRACT(a.info,"$.name") "Bob" 二、JSON_UNQUOTE 去除 SQL 中 " " ? MySQL自5.7之后开始支持js…