3.28(迭代搜索算法 + java学习总结)

2024-03-28 22:28

本文主要是介绍3.28(迭代搜索算法 + java学习总结),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  迭代加深搜索

        迭代加深算法是一在DFS的基础上添加搜索深度限制的搜索方法;

        其核心思想是从深度为0的地方开始搜索,然后逐步加深搜索深度,重新搜索一遍;这对于那些已知答案在浅层,但整个树或图存在极多分支的情况,我们可以使用迭代加深搜索进而迅速找到目标节点或者遍历整张图(限制深度下);

        除了图搜索问题外,迭代加深搜索还可用于求解以下问题

        组合优化问题:在给定的搜索空间中找到满足特定条件的最优解;

        规划和调度问题:在给定的资源约束下找到最优的计划或调度方案;

        参数优化问题:在给定的参数空间中找到最优的参数设置,以最大化或最小化特定的目标函数。

总的来说,迭代优先搜索一般适用于解决那些带限制要求,且无法确定查找深度的问题


板子

int deepth;//搜索深度bool dfs(int deep(, .....))
{if(deep > deepth) return ; //当前深度超过则返回.........
}while(!dfs()) deepth++;

        一般来说,使用该算法还需视题目具体情况进行剪枝


 L - DNA sequence

 


 题目分析

        1.每次搜索时有四个方向(操作),即四种DNA序列;

        2.组合优化问题;

        3.可以使用数组记录当前生成的字符串与所给字符串字母匹配的数目进而确定当前的最大查找深度;

        4.在搜索时,如果当前深度+最大未匹配长度 > 最大深度,剪枝;

        5.多组输入,注意数据初始化


Code 

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
const int N = 15;
//....
int deepth;
int ans;
int k;
char dna[5] = {'A','C','T','G'};
char str[N][N];bool dfs(int deep, int len[])
{if(ans) return 1;if(deep > deepth) return 0;int maxx = 0; //预计还要匹配的最大深度for(int i = 1; i <= k; i++){int temp = strlen(str[i]) - len[i];maxx = max(temp, maxx);}if(deep + maxx > deepth) return 0; //若当前深度+最大未匹配长度 > 最大深度,直接放弃if(maxx == 0) //全部匹配成功{ans = deep;return 1;}for(int i = 0; i < 4; i++){int flag = 0;int pos[N];for(int j = 1; j <= k; j++){if(str[j][len[j]] == dna[i]){flag = 1; //标明该分支暂时正确,可以继续往下搜索pos[j] = len[j] + 1; //新建数组,避免该大分支下的其他分支调用错误数据(回溯)}else pos[j] = len[j];}if(flag) dfs(deep + 1, pos);}return 0;
}int main()
{ios::sync_with_stdio(0), cin.tie(0),cout.tie(0);int t; cin >> t;while(t--){cin >> k;ans = 0;memset(str, 0, sizeof str);int maxn = 0;for(int i = 1; i <= k; i++){cin >> str[i];int temp = strlen(str[i]);maxn = max(maxn, temp);}deepth = maxn; //更新最大深度:最长的DNA序列的长度int pos[N] = {0};while(!dfs(0, pos)) deepth++;cout << ans << '\n';}return 0;
}

多态

        Java 引用变量有两个类型: 一个是编译时类型, 一个是运行时类型。 编译时类型由声明该变量时使 用的类型决定,运行时类型由实际赋给该变量的对象决定。 如果编译时类型和运行时类型不一致,就可 能出现所谓的多态 (Polymorphism).

优势

  • 允许不同类的对象共享相同的接口,
  • 更为轻松地添加新的类和对象,而不需要修改现有的代码。

这篇关于3.28(迭代搜索算法 + java学习总结)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/856853

相关文章

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再