首页 > 其他分享 >搜索

搜索

时间:2023-03-27 18:58:12浏览次数:46  
标签:sz int dfs down step 搜索

搜索 update on 2023/1/15 $(%25/%100)$

Tips:一定一定不要小瞧搜索,搜索也是可以出黑题的

零、前言

想必大家都会搜索吧(默认大家都会),既然会那我就不讲了吧
今天肯定不讲$dfs,bfs$那些及其简单的搜索,我们讲点其他的。

一、迭代加深搜索

在爆搜的时候,搜索规模是随着搜索深度指数增加的。

为了更快地搜索到最优解,可以想到要让搜索的深度尽可能小,就会用$bfs$减少时间复杂度,但是往往$bfs$不适用于爆搜,或者需要过多的空间。

这是就要请出我们的主角迭代加深搜索了,迭代加深搜索即限定搜索深度$D$进行$dfs$,搜索完深度$D$以内的所有节点后再增大$D$重新搜索直到找到答案。

是不是有点懵,啊对,我一开始也有一点懵,举个栗子就不懵了:
P1763 埃及分数
在主函数从小到大一次枚举最少分数个数,即上文$D$,在$dfs$里判断是否合法若合法输出最小的$D$,否则继续枚举。

int x , y , sz = 1;//sz为最少分数个数,即上文D
int p[] , ans[];
bool flag;//合法为1,不合法为0
int gcd(int x , int y){}
void dfs(int step , int pre){
//step表示当前选到了第几个分数,pre表示前一个分数的分母
	if(step > sz){
		__________;//更新ans数组
		flag = 1;
		return;
	}
	int up = (sz - step + 1) * y * 1. / x;
	int down = ceil(y * 1. / x);
	//此处up,down的取值下文再解释
	for(int i = max(down , pre + 1); i <= up; i++){
		p[step] = i;
		__________;//修改x,y值
		dfs(step + 1 , i);
		x = tx , y = ty;//回溯
	}
}
int main(){
	cin >> x >> y;
	int tx = x , ty = y;
	while(!flag){
		__________;//初始化代码不给了
		dfs(1 , 0);
		sz++;
	}
	for(int i = 1; i < sz; i++) cout << ans[i] << " ";
	return 0;
}

$tips$:此代码为伪代码,需要稍加更改才可$AC$

下面所说的非常非常关键

$up = (sz - step + 1) * y * 1. / x\quad①$
$down = ceil(y * 1. / x)\quad②$
为了方便理解上述代码中的$up$和$down$,首先我们来化一个式子:

$\frac{x}{y}\ge\frac{1}{a}$

$\frac{y}{x}\le a$

在$①$式中$sz-step+1$表示还有几个数未选完,$y * 1. / x$表示上述的$a$,乘起来就是$a$的最大值
在$②$式中$y * 1. / x$也是上述$a$,向上取整一下就为$a$的最小值了

所以这道题结束了,是不是很简单?其实我也觉得他不是很难,应该评不上紫题难度,最多也只有蓝题那种难度,不能再高了。

待更新——启发式搜索(A* 算法)

标签:sz,int,dfs,down,step,搜索
From: https://www.cnblogs.com/liruixiong0101AKIOI/p/17262509.html

相关文章

  • 算法总结--搜索
    声明(叠甲):鄙人水平有限,本文为作者的学习总结,仅供参考。1.搜索介绍搜索算法包括深度优先搜索(DFS)和广度优先搜索(BFS)这两种,从起点开始,逐渐扩大寻找范围,直到找到需要的......
  • 人肉搜索的Ark
    经过紧密的内部测试和420万美元的融资,Ark的人肉搜索引擎在未来的三天内完全对外开放注册。通过筛选Facebook、Google、Twitter和其他信息服务的内容,Ark可以帮助你找到当年......
  • AcWing1024 -- 记忆化搜索 & 天梯赛
    1.题目描述2022年天梯赛正赛\(DIV2\)2.思路首先认真读题,题目说的是每次送完外卖之后不必返回起点。另外,需要送外卖的点是逐个添加,每添加一次都要算一次最短路......
  • 可搜索加密(Searchable Encryption)机制概述
    引言[1]:可搜索加密(searchableencryption,SE)是近年来发展的一种支持用户在密文上进行关键字查找的密码学原语,能够为用户节省大量的网络和计算开销,并充分利用云端服务......
  • 搜索面板和过滤数据(SearchPanel)
    搜索面板和过滤数据(SearchPanel)行政2023年3月2日约3分钟DBGridEh可以显示一个特殊的面板来搜索和过滤网格中的数据。在搜索模式下,网格在所有网格单元格中以......
  • 【LeetCode动态规划#04】不同的二叉搜索树(找规律,有点像智力题)
    不同的二叉搜索树力扣题目链接(opensnewwindow)给定一个整数n,求以1...n为节点组成的二叉搜索树有多少种?示例:思路题意分析先找一下关系当n=1时,如果元素就......
  • 二叉搜索树中两个节点之和
    题目描述给定一个二叉搜索树的根节点root和一个整数k,请判断该二叉搜索树中是否存在两个节点它们的值之和等于k。假设二叉搜索树中节点的值均唯一。参考leetcode......
  • Winform/Csharp中使用StackExchange.Redis连接Redis存取数据并序列化对象/反序列化(支
    场景在winform程序中,需要连接Redis并根据Key进行模糊搜索,对value值进行反序列化为对象之后进行数据处理和显示。ServiceStack.redis这里不使用servicestack.redis,因为......
  • el-select的remote远程搜索时,重新打开时,下拉选项为上一次查询的结果
    问题描述 第一次搜索结果,没有选择。关闭后再次打开  下拉框选项还是上一次的搜索结果。这个现象能理解,但是也能被挑刺,遂修改——再次点击的时候,展示全部解决思......
  • 微服务 初始 分布式搜索引擎 Elastic Search
    文章目录⛄引言一、什么是ElasticSearch?二、ElasticSearch倒排索引⛅正向索引⚡倒排索引⛄正向和倒排三、ES的一些概念⛅文档和字段⚡索引和映射四、MySQL与Elasticsea......