关于深搜优化的一点想法

深度优先搜索(DFS)算法 深度优先搜索算法(DFS)是一种用于遍历图形结构的算法,它从一个起始顶点开始,沿着一条路径尽可能深入地访问图中的所有顶点,直到不能继续为止,然后返回并探索其他路径。DFS算法使用栈数据结构来实现,在访问完一个顶点后,将其未被访问的邻居压入栈中,并标记为已访问,然后从栈中取出下一个未被访问的顶点,继续进行同样的操作,直到栈为空为止。DFS算法可以用于解决图中的许多问题,例如找出两个顶点之间的最短路径、判断图是否为连通图等。DFS算法的时间复杂度为O(V+E),其中V为顶点数,E为边数。DFS算法相比BFS算法 阅读详情

概述图
如上图。在遍历一个图时采用搜到底再回头的想法,遍历顺序为 A − > B − > D − > E − > G − > C − > F A->B->D->E->G->C->F A−>B−>D−>E−>G−>C−>F。时间复杂度为 O ( 2 n ) O(2^n) O(2n)。

在竞赛中,一般程序运行时间为 1 s 1s 1s 或 2 s 2s 2s,那么我们按 2 s 2s 2s 来计算,计算机每秒可以运算约 1 0 9 10^9 109 次,那么在规定时间内就可以运算 log ⁡ 2 2 × 1 0 9 ≈ 30 \log_2{2 \times 10^9} \thickapprox 30 log2​2×109≈30 次。也就是说,当对象大于等于 30 30 30 个时,程序会超时。

当题目中的对象太大时,就不能直接暴力搜索了,需要在搜索的过程中进行取舍,也就是 剪枝。
剪枝有以下几个方法:

1.记忆化搜索

其实记忆化搜索就是所谓的 DFS,就是将已经搜索过的、不需要再搜索的打上标记,下一次搜索的时候直接跳过这种情况,可以大大优化程序效率。

例:全排列问题

给你 n n n 个数,生成这 n n n 个数的全排列。

样例:

输入:
3
1 2 3
输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

标程:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <float.h>
#include <ctype.h>
#include <map>
#include <stdbool.h>
using namespace std;

int n;
int a[1005], b[1005];

void dfs(int t) {
	if(t == n+1) {
		for(int i = 1; i <= n; i++)
			printf("%5d", a[i]);
		printf("\n");
		return ;
	}
	for(int i = 1; i <= n; i++) {
		if(b[i]) continue;
		a[t] = i, b[i] = 1;	// 这就是记忆化(也叫搜索与回溯)
		dfs(t+1);
		a[t] = 0,b[i] = 0;
	}
}

int main() {
	scanf("%d", &n);
	dfs(1);
	return 0;
}
浅谈深搜剪枝优化 文章目录一、引入二、深搜的剪枝三、迭代加深四、双向搜索五、例题1.数的划分2.小木棍 一、引入 在《深搜与栈浅谈》中,我曾提到过深搜一般效率很低,因此需要优化。这里我给大家简单介绍一下深搜的常见剪枝方法、迭代加深思想以及双向搜索的思路。最后以几道比较经典的例题讲解一下实际题目中的优化。 二、深搜的剪枝 在深搜每次扩展中,我们到达一个新的决策点B,在访问完B及其所有子决策点后,便回到其父决策点A。当决策点没有重复时,所有的父子关系A->B便构成了一棵树。有重复时,我们也一样把它看成一棵树。在遍历中,. 阅读详情

相关推荐

感性理解深搜和剪枝

感性理解深搜和剪枝 上网看了一些博客,感觉写的不太清楚,这里我清晰的来总结一下。 目录(摆脱书籍,轻松理解) 感性理解深搜和剪枝 首先剪枝:           1.什么是“剪枝”           2.剪枝的三大原则                      (1).正确性                      (2).准确性                      (...

TJ 713

【算法系列】时间复杂度、深搜(连通性、剪枝)、宽搜、Flood Fill、图论

深搜、宽搜、图论模板及相关题目

愿不负所爱 2665

DFS深搜及其总结啊

用心写的一个代码 希望朋友们能够好好看看 这个代码比较好用

深度优先搜索算法总结

文章目录深度优先搜索能够处理的问题代码注意事项时间复杂度分析题目汇总 深度优先搜索能够处理的问题 宽度优先搜索的对象一般是二叉树、图,使用深度优先搜索的情况有以下三种: 寻找所有路径的问题。 寻找所有排列的问题。 寻找所有组合的问题。 代码注意事项 宽度优先搜索需要用到数据结构stack(栈),代码要点如下: 深度优先搜索一般是用递归来实现的,需要明确递归的三要素。 递归的定义、拆解和出口。 根据题意判断对原序列是否需要提前排序。 对于需要去除重复的题,判断是否可以在原序列中先去重。

SeeDoubleU的专栏 3390

用LTspice仿真Buck电路输出电容:从参数计算到波形优化的全流程演示

本文详细介绍了使用LTspice仿真Buck电路输出电容的全流程,从理论计算到波形优化。通过解析关键参数如纹波电压、瞬态响应和ESR,结合工程计算方法和LTspice仿真技巧,帮助工程师优化Buck电路设计,解决输出纹波过大和瞬态响应不佳的问题。

night的博客 851

「大模型学习」(14)Long Context之线性插值、NTK-aware、Yarn、LongRoPE

大语言模型长上下文扩展中的位置插值技术 摘要:为解决大语言模型(LLMs)在推理阶段扩展上下文窗口时的位置编码限制,研究人员开发了一系列位置插值技术。这些方法主要针对旋转位置编码(RoPE)机制,通过不同策略调整位置索引以适应超出训练长度的上下文。典型方法包括:基础位置插值(PI)均匀缩放位置索引;NTK-aware插值对不同频率维度差异化处理;NTK-by-parts插值根据波长分段调整;Yarn插值结合温度调节;以及LongRoPE采用非均匀插值策略。这些技术在不修改模型结构的前提下,通过调整位置编码的

qq_43044037的博客 1643

js用递归遍历多维数组_深度优先搜索算法(递归、栈实现、复杂度分析)

预计阅读15min《小巷》小巷又弯又长没有门没有窗我拿把旧钥匙敲着厚厚的墙----------------------顾城深度优先搜索(Depth-First Search, DFS)是一种图遍历的方法。因发明「深度优先搜索算法」,约翰 · 霍普克洛夫特与罗伯特 · 塔扬在1986年共同获得计算机领域的最高奖:图灵奖。来看看深度优先搜索干了一件什么事吧。图简介 给定一幅由节点和...

weixin_39878688的博客 1034

深入解析SGLang框架:从架构设计到核心组件实现

本文深入解析了SGLang框架的架构设计与核心组件实现。SGLang是一个专为大语言模型推理设计的高效框架,其核心优势在于清晰的分层架构、高效的调度策略以及精细的内存管理。文章详细剖析了其客户端接入、服务器端调度、模型执行引擎及Tokenizer/Detokenizer管理器等关键组件,揭示了其实现高性能推理的内部机制。

coffee的博客 576

DFS(深度优先搜索)

DFS

2201_75956916的博客 1122

基于STM32开发板的USB MIDI键盘实现

在本文中,我们介绍了如何使用STM32开发板和相应的软件工具来实现USB MIDI键盘。通过配置STM32CubeMX和编写相应的源代码,我们能够将STM32开发板转换为一个功能齐全的USB MIDI设备。我们将使用STM32开发板和相应的软件工具来实现这一功能,并提供相应的源代码供参考。此时,您应该可以使用STM32开发板作为USB MIDI键盘,并在按键按下时听到相应的音符。在STM32CubeMX中,选择适当的STM32型号,并启动一个新的项目。然后,将生成的可执行文件烧录到STM32开发板中。

2301_79326616的博客 1588

高通平台开发系列讲解(USB篇)MBIM协议详解

📢本文主要介绍高通平台USB网卡MBIM协议。

内核笔记 5438

深搜和广搜的原理及优缺点

深搜原理 深搜,顾名思义,是深入其中、直取结果的一种搜索方法。   如果深搜是一个人,那么他的性格一定倔得像头牛!他从一点出发去旅游,只朝着一个方向走,除非路断了,他绝不改变方向!除非四个方向全都不通或遇到终点,他绝不后退一步!因此,他的姐姐广搜总是嘲笑他,说他是个一根筋、不撞南墙不回头的家伙。   深搜很讨厌他姐姐的嘲笑,但又不想跟自己的亲姐姐闹矛盾,于是他决定给姐姐讲述自己旅途中的经历,来改善...

dark_cy的博客 1万+

SAP_SD模块 物料科目分配/成本简介

路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义并分配科目代码—定义科目代码。路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义访问顺序和科目确定类型。路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义并分配科目确定过程。文本主要说明销售模块中的科目分配和成本的一个对应关系。SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—检查科目分配的相关主数据。

我小时候很黑的博客 2617

【递归、搜索与回溯算法】穷举、暴搜、深搜、回溯、剪枝

本篇文章列举了两个经典的LeetCode算法题目,包括全排列和子集。我会在每道题中提到每道题的解题思路,并提供解决本题的C++代码。

是阿建吖! 1195

(四)美赛画图篇:画图模板+画图工具

美赛画图篇:画图模板+画图工具(一)画图模板(二)画图工具 因为散点图、折线图等多与数据有关,且需相关软件生成,故此处多是通用模板。直接替换文字内容即可。 (一)画图模板 1、Visio圆圈图 适合于:指标体系(E题常用) 点击下载:1 C币 如果不想花费且时间充足,悄咪咪地说,在visio-模板搜索可以找到很多。(稍微会耗一点时间) 2、简单指标体系图PPT 适合于指标体系 点击下载:0 C币...

weixin_43689393的博客 1万+

板蓝根挥发油微胶囊化技术及其在抗菌织物整理中的应用研究

微胶囊技术是一种通过成膜材料将具有反应活性或挥发性的液体或固体包封成微小颗粒的技术。该技术因其优异的缓释保护和物态改变性能,已在医药、食品、化妆品等多个领域得到广泛应用。本研究采用复凝聚法制备板蓝根挥发油的微胶囊,利用明胶和阿拉伯胶作为壁材,旨在提升其稳定性和抗菌性能。

qq_62634009的博客 584

深搜优化

深搜优化【updating…】 1.深搜是什么? 2.深搜优化? 深搜是很消耗资源和时间的一种方法,这里给出深搜方法的两种不同写法,并比较其中的效率: DFS1 void DFS1(int s){ if(child[s].size()==0) return;//如果没有相邻节点了,则直接返回 vis[s]=true;//标记为已经访问了 for(int i=0;i&lt;child[...

说文科技,做有态度的研究。 1092

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

课程讲解---深搜

DFS适合需要深入探索的问题,如路径查找和环检测。BFS适合需要找到最短路径的问题,如迷宫求解和社交网络分析。选择哪种算法取决于具体问题的需求和图的特性。

你猜我是谁? 2239

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

深搜 排列数字

一道简单的OJ题目,引出的深搜三问

MythCoffee的博客 407

深搜专题

深搜专题

Umbrella__的博客 484

算法日记 43-44 day 图论(深搜,广搜)

深搜和广搜

weixin_70808146的博客 1266

算法笔记#4:深搜(DFS)

算法笔记

captainfly_的博客 914

深搜和广搜的差别

前言 搜索算法有许多种,但用的最多的还是深搜和宽搜,不管是值找最短路径,还是找最优解,都能看到这两个的身影。下面就来详细看看这两个的不同于适用情况。 深搜 深搜,看名字就知道到是优先往深处找,不撞南墙终不悔。深搜,像是一个人走迷宫,遇见岔路不知道怎么走,就瞎选一个(程序中一搬从头遍历),走到底,不对,回到岔路口,选另一条路,接着走。 深搜的实现一般用栈或递归,不断深入。 深搜一般是为了找多个解,或...

weixin_46021869的博客 1194

代码随想录 刷题记录-24 图论 (1)理论基础 、深搜与广搜

在二叉树遍历的单层逻辑中,处理的是所有孩子结点。这就对应了图的深搜算法中“处理当前遍历到的节点的所有邻接点”

Renas_TJOvO的博客 1661

从程序到算法——深搜

今年的NOIP2017普及组T3简直了,T1T2那么水,T3突然要算法了,去年好像还没这么BT……目测是搜索走遍天下。{然而暴力寸步难行……}那就说说搜索吧。

ywr_ywr的博客 885

【如何掌握CSP-J 信奥赛中的深搜算法】

【如何掌握CSP-J 信奥赛中的深搜算法】

王老师青少年编程 1590
上一篇: 实现next_permutation
下一篇: c++俄罗斯方块
return_dr
博客等级 码龄5年 216粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值