java-搜索算法

搜索算法:

线性搜索(Linear Search)
二分搜索(Binary Search)
深度优先搜索(Depth-First Search, DFS)
广度优先搜索(Breadth-First Search, BFS)

1. 线性搜索(Linear Search)

意义
线性搜索是一种简单的搜索算法,它从头到尾遍历数组,检查每个元素是否为目标值。如果找到目标值,则返回其索引;如果遍历完整个数组都没有找到,则返回一个表示未找到的值(通常是-1)。

Java案例

public class LinearSearch {public static int linearSearch(int[] arr, int target) {for (int i = 0; i < arr.length; i++) {if (arr[i] == target) {return i; // 找到目标,返回索引}}return -1; // 未找到目标,返回-1}public static void main(String[] args) {int[] arr = {3, 5, 2, 4, 9};int target = 4;int index = linearSearch(arr, target);if (index != -1) {System.out.println("Element found at index: " + index);} else {System.out.println("Element not found.");}}
}

2. 二分搜索(Binary Search)

意义
二分搜索是一种在已排序数组中查找特定元素的搜索算法。它通过比较数组中间的元素与目标值来工作,如果中间元素与目标值相等,则搜索成功;如果目标值小于中间元素,则在数组的左半部分继续搜索;如果目标值大于中间元素,则在数组的右半部分继续搜索。这个过程重复进行,直到找到目标值或搜索范围为空。

Java案例

public class BinarySearch {public static int binarySearch(int[] arr, int target) {int left = 0;int right = arr.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (arr[mid] == target) {return mid; // 找到目标,返回索引} else if (arr[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return -1; // 未找到目标,返回-1}public static void main(String[] args) {int[] arr = {2, 3, 4, 10, 40};int target = 10;int index = binarySearch(arr, target);if (index != -1) {System.out.println("Element found at index: " + index);} else {System.out.println("Element not found.");}}
}

3. 深度优先搜索(Depth-First Search, DFS)

意义
深度优先搜索是一种用于遍历或搜索树或图的算法。它从一个节点开始,尽可能深地搜索树的分支。在图的遍历中,DFS会访问一个节点,然后沿着一条边走到下一个节点,然后继续深入,直到到达没有未访问邻居的节点,然后回溯。

Java案例(使用递归实现图的DFS遍历):

public class DFS {private boolean[] visited;private int[] graph;public DFS(int[][] graph) {this.graph = new int[graph.length];for (int[] row : graph) {for (int item : row) {this.graph[item] = item;}}visited = new boolean[graph.length];}public void dfs(int vertex) {visited[vertex] = true;System.out.print(vertex + " ");for (int i = 0; i < graph.length; i++) {if (graph[vertex] == i && !visited[i]) {dfs(i);}}}public static void main(String[] args) {int[][] graph = {{1, 2}, {0, 3}, {0, 4}, {1, 5}, {1, 2}};DFS dfs = new DFS(graph);dfs.dfs(0); // 从节点0开始遍历}
}

4. 广度优先搜索(Breadth-First Search, BFS)

意义
广度优先搜索也是一种用于遍历或搜索树或图的算法。与DFS不同,BFS从一个节点开始,首先访问所有相邻的节点,然后再逐层向外扩展。

Java案例(使用队列实现图的BFS遍历):

import java.util.LinkedList;
import java.util.Queue;public class BFS {private boolean[] visited;private int[][] graph;public BFS(int[][] graph) {this.graph = graph;visited = new boolean[graph.length];}public void bfs(int startNode) {Queue<Integer> queue = new LinkedList<>();visited[startNode] = true;queue.add(startNode);while (!queue.isEmpty()) {int currentNode = queue.poll();System.out.print(currentNode + " ");for (int neighbor : graph[currentNode]) {if (!visited[neighbor]) {visited[neighbor] = true;queue.add(neighbor);}}}}public static void main(String[] args) {int[][] graph = {{1, 2}, {0, 3}, {0, 4}, {1, 5}, {1, 2}};BFS bfs = new BFS(graph);bfs.bfs(0); // 从节点0开始遍历}
}

这些案例展示了不同搜索算法的基本实现和应用场景。线性搜索和二分搜索主要用于数组的搜索,而深度优先搜索和广度优先搜索则用于图或树的遍历。每种算法都有其特定的应用场景和优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/475535.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3、Vite5、Primevue、Oxlint、Husky9 简单快速搭建最新的Web项目模板

Vue3、Vite5、Oxlint、Husky9 简单搭建最新的Web项目模板 特色进入正题创建基础模板配置API自动化导入配置组件自动化导入配置UnoCss接入Primevue接入VueRouter4配置项目全局环境变量 封装Axios接入Pinia状态管理接入Prerttier OXLint ESLint接入 husky lint-staged&#xf…

智能购物时代:AI在电商平台的革命性应用

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术已成为推动电商行业发展的关键力量。AI技术的应用不仅改变了电商的运营模式&#xff0c;还极大地丰富了消费者的购物体验。随着技术的不断进步&#xff0c;AI在电商领域的应用越来越广泛&#xff0c;从个性…

uniapp vue3小程序报错Cannot read property ‘__route__‘ of undefined

在App.vue里有监听应用的生命周期 <script>// 只能在App.vue里监听应用的生命周期export default {onError: function(err) {console.log(AppOnError:, err); // 当 uni-app 报错时触发}} </script>在控制台打印里无意发现 Cannot read property ‘__route__‘ of …

昇思MindSpore第四课---GPT实现情感分类

1. GPT的概念 GPT 系列是 OpenAI 的一系列预训练模型&#xff0c;GPT 的全称是 Generative Pre-Trained Transformer&#xff0c;顾名思义&#xff0c;GPT 的目标是通过Transformer&#xff0c;使用预训练技术得到通用的语言模型。和BERT类似&#xff0c;GPT-1同样采取pre-trai…

解读缓存问题的技术旅程

目录 前言1. 问题的突发与初步猜测2. 缓存的“隐身术”3. 缓存策略的深层优化4. 反思与感悟结语 前言 那是一个普通的工作日&#xff0c;团队例行的早会刚刚结束&#xff0c;我正准备继续优化手头的模块时&#xff0c;突然收到了用户反馈。反馈的内容是部分数据显示异常&#…

WPS 加载项开发说明wpsjs

wpsjs几个常用的CMD命令&#xff1a; 1.打开cmd输入命令测试版本号 npm -v 2.首次安装nodejs&#xff0c;npm默认国外镜像&#xff0c;包下载较慢时&#xff0c;可切换到国内镜像 //下载速度较慢时可切换国内镜像 npm config set registry https://registry.npmmirror.com …

【深度学习】循环神经网络及文本生成模型构建

循环神经网络 词嵌入层 ​ 词嵌入层的作用就是将文本转换为向量。 ​ 词嵌入层首先会根据输入的词的数量构建一个词向量矩阵&#xff0c;例如: 我们有 100 个词&#xff0c;每个词希望转换成 128 维度的向量&#xff0c;那么构建的矩阵形状即为: 100*128&#xff0c;输入的每…

论文阅读:Uni-ISP Unifying the Learning of ISPs from Multiple Cameras

这是 ECCV 2024 的一篇文章&#xff0c;文章作者想建立一个统一的 ISP 模型&#xff0c;以实现在不同手机之间的自由切换。文章作者是香港中文大学的 xue tianfan 和 Gu jinwei 老师。 Abstract 现代端到端图像信号处理器&#xff08;ISPs&#xff09;能够学习从 RAW/XYZ 数据…

ROS2指令总结(跟随古月居教程学习)

​ 博主跟随古月居博客进行ROS2学习&#xff0c;对ROS2相关指令进行了总结&#xff0c;方便学习和回顾。 古月居ROS2博文链接&#xff1a;https://book.guyuehome.com/ 本文会持续进行更新&#xff0c;觉得有帮助的朋友可以点赞收藏。 1. ROS2安装命令 $ sudo apt update &am…

Qt不同类之间参数的传递

一、信号槽方式 1: 在需要发送信号的子类增加一个信号函数 void set_send(double lonx, double laty);sub.h sub.cpp emit set_send(lonx,laty);2: 在需要接收信号的类增加一个槽函数 main.h void set_rece(double lonx, double laty);main.cpp 1&#xff09;引入子类头文…

labview记录系统所用月数和天数

在做项目时会遇到采集系统的记录&#xff0c;比如一个项目测试要跑很久这个时候就需要在软件系统上显示项目运行了多少天&#xff0c;从开始测试开始一共用了多少年多少月。 年的话还好计算只需要把年份减掉就可以了&#xff0c;相比之下月份和天数就比较难确定&#xff0c;一…

机器翻译基础与模型 之一: 基于RNN的模型

一、机器翻译发展历程 基于规则的-->基于实例的-->基于统计方法的-->基于神经网络的 传统统计机器翻译把词序列看作离散空间里的由多个特征函数描述的点&#xff0c;类似 于 n-gram 语言模型&#xff0c;这类模型对数据稀疏问题非常敏感。神经机器翻译把文字序列表示…

WPF Prism框架

一、关于Prism框架 Prism.Core:【Prism.dll】实现MVVM的核心功能&#xff0c;属于一个与平台无关的项目 Prism.Wpf&#xff1a;【Prism.Wpf】包含了DialogService,Region,Module,Navigation,其他的一些WPF的功能 Prism.Unity:【Prism.Unity.Wpf】,IOC容器 Prism.Unity>Pr…

STM32F103系统时钟配置

时钟是单片机运行的基础&#xff0c;时钟信号推动单片机内各个部分执行相应的指令。时钟系统就是CPU的脉搏&#xff0c;决定CPU速率&#xff0c;像人的心跳一样 只有有了心跳&#xff0c;人才能做其他的事情&#xff0c;而单片机有了时钟&#xff0c;才能够运行执行指令&#x…

2024年 Web3开发学习路线全指南

Web3是一个包含了很多领域的概念&#xff0c;不讨论币圈和链圈的划分&#xff0c;Web3包括有Defi、NFT、Game等基于区块链的Dapp应用的开发&#xff1b;也有VR、AR等追求视觉沉浸感的XR相关领域的开发&#xff1b;还有基于区块链底层架构或者协议的开发。 这篇文章给出的学习路…

CTF--php伪协议结合Base64绕过

Base64绕过 在ctf中&#xff0c;base64是比较常见的编码方式&#xff0c;在做题的时候发现自己对于base64的编码和解码规则不是很了解&#xff0c;并且恰好碰到了类似的题目&#xff0c;在翻阅了大佬的文章后记录一下&#xff0c;对于base64编码的学习和一个工具 base64编码是…

Linux 命令之 tar

文章目录 1 tar 命令介绍2 压缩与解压缩2.1 压缩2.2 解压 4 高级用法4.1 排除目录4.2 显示进度4.2.1 脚本解压缩4.2.2 命令解压缩4.2.3 压缩进度 1 tar 命令介绍 常见的压缩包有 .tar.gz、.tar.xz、.tar.bz2&#xff0c;以及 .rar、.zip、.7z 等压缩包。 常见的 tar 选项&#…

Jenkins修改LOGO

重启看的LOGO和登录页面左上角的LOGO 进入LOGO存在的目录 [roottest-server01 svgs]# pwd /opt/jenkins_data/war/images/svgs [roottest-server01 svgs]# ll logo.svg -rw-r--r-- 1 jenkins jenkins 29819 Oct 21 10:58 logo.svg #jenkins_data目录是我挂载到了/opt目录&…

【大模型】LLaMA: Open and Efficient Foundation Language Models

链接&#xff1a;https://arxiv.org/pdf/2302.13971 论文&#xff1a;LLaMA: Open and Efficient Foundation Language Models Introduction 规模和效果 7B to 65B&#xff0c;LLaMA-13B 超过 GPT-3 (175B)Motivation 如何最好地缩放特定训练计算预算的数据集和模型大小&…

vue添加LCD字体(液晶字体)数字美化,前端如何引用LCD字体液晶字体,如何转换?@font-face 如何使用?

文章目录 一、效果二、下载字体格式【[https://www.dafont.com/theme.php?cat302&text0123456789](https://www.dafont.com/theme.php?cat302&text0123456789)】三、下载后&#xff0c;解压后都是.ttf文件&#xff0c;在【[https://www.fontsquirrel.com/tools/webfo…