网站简介 title/东莞seo网络公司

网站简介 title,东莞seo网络公司,域名停靠网站 2015,网站帮助中心设计一、排序算法 排序算法是计算机科学中最基础的算法之一,用于将一组数据按照特定顺序排列。 1.1 冒泡排序(Bubble Sort) 通过重复遍历列表,比较相邻元素并交换位置,直到列表有序。时间复杂度:O(n)。 pub…

一、排序算法

排序算法是计算机科学中最基础的算法之一,用于将一组数据按照特定顺序排列。

1.1 冒泡排序(Bubble Sort)
  • 通过重复遍历列表,比较相邻元素并交换位置,直到列表有序。
  • 时间复杂度:O(n²)。
public void bubbleSort(int[] arr) {int n = arr.length;for (int i = 0; i < n-1; i++) {for (int j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}
}
1.2 选择排序(Selection Sort)
  • 每次从未排序部分选择最小元素,放到已排序部分的末尾。
  • 时间复杂度:O(n²)。
public void selectionSort(int[] arr) {int n = arr.length;for (int i = 0; i < n-1; i++) {int minIndex = i;for (int j = i+1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}
}
1.3 插入排序(Insertion Sort)
  • 将未排序部分的元素逐个插入到已排序部分的适当位置。
  • 时间复杂度:O(n²)。
public void insertionSort(int[] arr) {int n = arr.length;for (int i = 1; i < n; i++) {int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key) {arr[j+1] = arr[j];j = j - 1;}arr[j+1] = key;}
}
1.4 快速排序(Quick Sort)
  • 采用分治法,选择一个基准元素,将数组分为两部分,递归排序。
  • 时间复杂度:平均 O(n log n),最坏 O(n²)。
public void quickSort(int[] arr, int low, int high) {if (low < high) {int pi = partition(arr, low, high);quickSort(arr, low, pi-1);quickSort(arr, pi+1, high);}
}private int partition(int[] arr, int low, int high) {int pivot = arr[high];int i = (low - 1);for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}int temp = arr[i+1];arr[i+1] = arr[high];arr[high] = temp;return i+1;
}
1.5 归并排序(Merge Sort)
  • 采用分治法,将数组分为两半,分别排序后合并。
  • 时间复杂度:O(n log n)。
public void mergeSort(int[] arr, int l, int r) {if (l < r) {int m = (l + r) / 2;mergeSort(arr, l, m);mergeSort(arr, m+1, r);merge(arr, l, m, r);}
}private void merge(int[] arr, int l, int m, int r) {int n1 = m - l + 1;int n2 = r - m;int[] L = new int[n1];int[] R = new int[n2];for (int i = 0; i < n1; i++) {L[i] = arr[l + i];}for (int j = 0; j < n2; j++) {R[j] = arr[m + 1 + j];}int i = 0, j = 0;int k = l;while (i < n1 && j < n2) {if (L[i] <= R[j]) {arr[k] = L[i];i++;} else {arr[k] = R[j];j++;}k++;}while (i < n1) {arr[k] = L[i];i++;k++;}while (j < n2) {arr[k] = R[j];j++;k++;}
}

二、查找算法

查找算法用于在数据结构中查找特定元素。常见的查找算法包括:

2.1 线性查找(Linear Search)
  • 逐个检查每个元素,直到找到目标元素。
  • 时间复杂度:O(n)。
public int linearSearch(int[] arr, int target) {for (int i = 0; i < arr.length; i++) {if (arr[i] == target) {return i;}}return -1;
}
2.2 二分查找(Binary Search)
  • 适用于已排序的数组,通过重复将搜索范围减半来查找目标元素。
  • 时间复杂度:O(log n)。
public int binarySearch(int[] arr, int target) {int left = 0, 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;
}

三、图算法

图算法用于处理图结构数据。常见的图算法包括:

3.1 深度优先搜索(DFS)
  • 从起始节点开始,沿着一条路径尽可能深入,直到无法继续为止,然后回溯。
public void dfs(int[][] graph, int start, boolean[] visited) {visited[start] = true;System.out.print(start + " ");for (int i = 0; i < graph[start].length; i++) {int next = graph[start][i];if (!visited[next]) {dfs(graph, next, visited);}}
}
3.2 广度优先搜索(BFS)
  • 从起始节点开始,逐层遍历所有相邻节点。
public void bfs(int[][] graph, int start) {boolean[] visited = new boolean[graph.length];Queue<Integer> queue = new LinkedList<>();visited[start] = true;queue.add(start);while (!queue.isEmpty()) {int node = queue.poll();System.out.print(node + " ");for (int i = 0; i < graph[node].length; i++) {int next = graph[node][i];if (!visited[next]) {visited[next] = true;queue.add(next);}}}
}
3.3 Dijkstra 算法
  • 用于计算单源最短路径,适用于加权图。
public void dijkstra(int[][] graph, int start) {int n = graph.length;int[] dist = new int[n];boolean[] visited = new boolean[n];Arrays.fill(dist, Integer.MAX_VALUE);dist[start] = 0;for (int i = 0; i < n-1; i++) {int u = minDistance(dist, visited);visited[u] = true;for (int v = 0; v < n; v++) {if (!visited[v] && graph[u][v] != 0 && dist[u] != Integer.MAX_VALUE && dist[u] + graph[u][v] < dist[v]) {dist[v] = dist[u] + graph[u][v];}}}printSolution(dist);
}private int minDistance(int[] dist, boolean[] visited) {int min = Integer.MAX_VALUE, minIndex = -1;for (int i = 0; i < dist.length; i++) {if (!visited[i] && dist[i] <= min) {min = dist[i];minIndex = i;}}return minIndex;
}private void printSolution(int[] dist) {System.out.println("Vertex \t Distance from Source");for (int i = 0; i < dist.length; i++) {System.out.println(i + " \t\t " + dist[i]);}
}

四、动态规划

动态规划用于解决具有重叠子问题和最优子结构性质的问题。常见的动态规划问题包括:

4.1 斐波那契数列
  • 使用动态规划计算斐波那契数列的第 n 项。
public int fibonacci(int n) {if (n <= 1) {return n;}int[] dp = new int[n+1];dp[0] = 0;dp[1] = 1;for (int i = 2; i <= n; i++) {dp[i] = dp[i-1] + dp[i-2];}return dp[n];
}
4.2 背包问题
  • 解决 0-1 背包问题,即在给定容量下选择物品使总价值最大。
public int knapsack(int[] weights, int[] values, int capacity) {int n = weights.length;int[][] dp = new int[n+1][capacity+1];for (int i = 1; i <= n; i++) {for (int j = 0; j <= capacity; j++) {if (weights[i-1] <= j) {dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-weights[i-1]] + values[i-1]);} else {dp[i][j] = dp[i-1][j];}}}return dp[n][capacity];
}

五、贪心算法

贪心算法在每一步选择中都采取当前状态下最优的选择,希望导致全局最优解。常见的贪心算法问题包括:

5.1 活动选择问题
  • 选择最大数量的互不重叠的活动。
public int activitySelection(int[] start, int[] end) {Arrays.sort(end);int count = 1;int lastEnd = end[0];for (int i = 1; i < end.length; i++) {if (start[i] >= lastEnd) {count++;lastEnd = end[i];}}return count;
}

六、回溯算法

回溯算法通过尝试所有可能的解来解决问题,通常用于组合、排列等问题。常见的回溯算法问题包括:

6.1 N 皇后问题
  • 在 N×N 棋盘上放置 N 个皇后,使其互不攻击。
public void solveNQueens(int n) {int[] queens = new int[n];Arrays.fill(queens, -1);backtrack(queens, 0, n);
}private void backtrack(int[] queens, int row, int n) {if (row == n) {printQueens(queens);return;}for (int col = 0; col < n; col++) {if (isSafe(queens, row, col)) {queens[row] = col;backtrack(queens, row+1, n);queens[row] = -1;}}
}private boolean isSafe(int[] queens, int row, int col) {for (int i = 0; i < row; i++) {if (queens[i] == col || Math.abs(queens[i] - col) == Math.abs(i - row)) {return false;}}return true;
}private void printQueens(int[] queens) {for (int i = 0; i < queens.length; i++) {for (int j = 0; j < queens.length; j++) {if (queens[i] == j) {System.out.print("Q ");} else {System.out.print(". ");}}System.out.println();}System.out.println();
}

七、字符串匹配算法

字符串匹配算法用于在文本中查找特定模式的子串。常见的字符串匹配算法包括:

7.1 KMP 算法
  • 通过预处理模式串,避免不必要的比较。
public int kmpSearch(String text, String pattern) {int[] lps = computeLPSArray(pattern);int i = 0, j = 0;while (i < text.length()) {if (pattern.charAt(j) == text.charAt(i)) {i++;j++;}if (j == pattern.length()) {return i - j;} else if (i < text.length() && pattern.charAt(j) != text.charAt(i)) {if (j != 0) {j = lps[j-1];} else {i++;}}}return -1;
}private int[] computeLPSArray(String pattern) {int[] lps = new int[pattern.length()];int len = 0, i = 1;while (i < pattern.length()) {if (pattern.charAt(i) == pattern.charAt(len)) {len++;lps[i] = len;i++;} else {if (len != 0) {len = lps[len-1];} else {lps[i] = len;i++;}}}return lps;
}

八、数论算法

数论算法用于解决与整数相关的数学问题。常见的数论算法包括:

8.1 欧几里得算法
  • 用于计算两个整数的最大公约数(GCD)。
public int gcd(int a, int b) {if (b == 0) {return a;}return gcd(b, a % b);
}
8.2 素数检测
  • 判断一个数是否为素数。
public boolean isPrime(int n) {if (n <= 1) {return false;}for (int i = 2; i * i <= n; i++) {if (n % i == 0) {return false;}}return true;
}

九、位运算算法

位运算算法利用位操作来高效解决问题。常见的位运算算法包括:

9.1 计算二进制中 1 的个数
  • 使用位运算计算一个整数的二进制表示中 1 的个数。
public int countSetBits(int n) {int count = 0;while (n > 0) {count += n & 1;n >>= 1;}return count;
}
9.2 判断一个数是否是 2 的幂
  • 使用位运算判断一个数是否是 2 的幂。
public boolean isPowerOfTwo(int n) {return n > 0 && (n & (n - 1)) == 0;
}

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

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

相关文章

ubuntu 24 安装 python3.x 教程

目录 注意事项 一、安装不同 Python 版本 1. 安装依赖 2. 下载 Python 源码 3. 解压并编译安装 二、管理多个 Python 版本 1. 查看已安装的 Python 版本 2. 配置环境变量 3. 使用 update-alternatives​ 管理 Python 版本 三、使用虚拟环境为项目指定特定 Python 版本…

怎样使用Modbus转Profinet网关连接USB转485模拟从站配置案例

怎样使用Modbus转Profinet网关连接USB转485模拟从站配置案例 Modbus转profinet网关可以将Modbus协议转化为profinet协议&#xff0c;以实现设备之间的数据交互。在实际使用过程中&#xff0c;我们需要使用Modbus协议进行设备通讯&#xff0c;而profinet协议则是用于工业自动化…

一文解读python高阶功能:匿名函数到魔法方法(__call__)

文章目录 一、python中匿名方法的使用使用示例注意事项总结 二、匿名函数和魔法方法的结合示例&#xff1a;结合 lambda 和 __call__解释更复杂的示例 总结 一、python中匿名方法的使用 在 Python 中&#xff0c;匿名方法是通过 lambda 关键字定义的&#xff0c;通常称为 lamb…

云服务器新手配置内网穿透服务(frp)

首先你得有一个公网服务器&#xff0c;有了它你就可以借助它&#xff0c;将自己电脑进行配置内网穿透&#xff0c;让自己内网电脑也可以异地轻松访问。网上教程较多&#xff0c;特此记录我自己的配置&#xff0c;避免迷路&#xff0c;我这里只记录我自己云服务小白&#xff0c;…

基于STM32的火灾报警设备(阿里云平台)

目录 前言&#xff1a; 一、项目介绍和演示视频 二、硬件需求准备 三、硬件框图 1. 原理图 2. PCB 四、CubeMX配置 五、代码框架 前言&#xff1a; 源代码下载链接&#xff1a; https://download.csdn.net/download/m0_74712453/90474701 需要实物的可以私信博主或者…

学习笔记之车票搜索为什么用Redis而不是ES?

在文章正式开始前&#xff0c;大家打开 12306.cn 搜索一趟列车&#xff0c;根据搜索条件判断&#xff0c;数据搜索技术使用 ElasticSearch 或者其它搜索技术是否合适&#xff1f; 这里我先把答案说下&#xff0c;12306 车票搜索用的是 Redis &#xff0c;而不是大家常用的 Ela…

揭秘AI:机器学习与深度学习的奥秘

文章目录 机器学习与深度学习1. 什么是人工智能&#xff1f;2. 机器学习、深度学习和人工智能又是什么关系&#xff1f;3. 人工智能解决了什么问题&#xff1f;为什么需要人工智能&#xff1f;4. 机器学习、深度学习常用术语1&#xff09;模型2&#xff09;数据集3&#xff09;…

NetLink内核套接字案例分析

一、基础知识 Netlink 是 Linux 系统中一种内核与用户空间通信的高效机制&#xff0c;而 Netlink 消息是这种通信的核心载体。它允许用户态程序&#xff08;如网络配置工具、监控工具&#xff09;与内核子系统&#xff08;如网络协议栈、设备驱动&#xff09;交换数据&#xff…

批量压缩与优化 Excel 文档,减少 Excel 文档大小

当我们在 Excel 文档中插入图片资源的时候&#xff0c;如果我们插入的是原图&#xff0c;可能会导致 Excel 变得非常的大。这非常不利于我们传输或者共享。那么当我们的 Excel 文件非常大的时候&#xff0c;我们就需要对文档做一些压缩或者优化的处理。那有没有什么方法可以实现…

基于深度学习的多模态人脸情绪识别研究与实现(视频+图像+语音)

这是一个结合图像和音频的情绪识别系统&#xff0c;从架构、数据准备、模型实现、训练等。包括数据收集、预处理、模型训练、融合方法、部署优化等全流程。确定完整系统的组成部分&#xff1a;数据收集与处理、模型设计与训练、多模态融合、系统集成、部署优化、用户界面等。详…

保姆级离线TiDB V8+解释

以前学习的时候还是3版本&#xff0c;如今已经是8版本了 https://cn.pingcap.com/product-community/?_gl1ujh2l9_gcl_auMTI3MTI3NTM3NC4xNzM5MjU3ODE2_gaMTYwNzE2NTI4OC4xNzMzOTA1MjUz_ga_3JVXJ41175MTc0MTk1NTc1OC4xMS4xLjE3NDE5NTU3NjIuNTYuMC41NDk4MTMxNTM._ga_CPG2VW1Y4…

spark实验2

一.实验题目 实验所需要求&#xff1a; centos7虚拟机 pyspark spark python3 hadoop分布式 统计历届春晚的节目数目 统计各个类型节目的数量&#xff0c;显示前10名 统计相声类节目历年的数目。 查询每个演员在春晚上表演节目的数量。 统计每年各类节目的数量&#xff0…

Manus:成为AI Agent领域的标杆

一、引言 官网&#xff1a;Manus 随着人工智能技术的飞速发展&#xff0c;AI Agent&#xff08;智能体&#xff09;作为人工智能领域的重要分支&#xff0c;正逐渐从概念走向现实&#xff0c;并在各行各业展现出巨大的应用潜力。在众多AI Agent产品中&#xff0c;Manus以其独…

算法每日一练 (11)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 算法每日一练 (11)全排列题目描述解题思路解题代码c/c…

《Spring日志整合与注入技术:从入门到精通》

1.Spring与日志框架的整合 1.Spring与日志框架进行整合&#xff0c;日志框架就可以在控制台中&#xff0c;输出Spring框架运行过程中的一些重要的信息。 好处&#xff1a;方便了解Spring框架的运行过程&#xff0c;利于程序的调试。 Spring如何整合日志框架 Spring5.x整合log4j…

《SQL性能优化指南:新手如何写出高效的数据库查询

新手程序员如何用三个月成为SQL高手&#xff1f;万字自学指南带你弯道超车 在数据为王的时代&#xff0c;掌握SQL已成为职场新人的必修课。你可能不知道&#xff0c;仅用三个月系统学习&#xff0c;一个零基础的小白就能完成从数据库萌新到SQL达人的蜕变。去年刚毕业的小王就是…

【Unity】在项目中使用VisualScripting

1. 在packagemanager添加插件 2. 在设置中进行初始化。 Edit > Project Settings > Visual Scripting Initialize Visual Scripting You must select Initialize Visual Scripting the first time you use Visual Scripting in a project. Initialize Visual Scripting …

JConsole 在 Linux 上的使用

JConsole 在 Linux 上的使用指南 1. 启动 JConsole 远程监控 Linux 服务器上的 JVM 进程 1.1 修改 JMX 配置&#xff0c;允许远程访问 在 Linux 服务器 启动 Java 应用时&#xff0c;需要加上 -Djava.rmi.server.hostname<服务器IP>&#xff0c;完整的启动参数如下&am…

个人记录,Unity资源解压和管理插件

就是经典的两个AssetStudio 和 Ripper 没有什么干货&#xff0c;就是记录一下&#xff0c;内容没有很详细 AssetStudio 说错了&#xff0c;AssetStudio比较出名&#xff08;曾经&#xff09;&#xff0c;但好像堕落了 是&#xff0c;AssetBundlExtractor 这个工具有个好处就…

DeepSeek-Open WebUI部署

1.DeepSeek部署-Win版本 2.DeepSeek部署-Linux版本 3.DeepSeek部署-一键部署(Linux版本) 4.DeepSeek部署-进阶版本(LinuxGPU) 5.DeepSeek部署-基于vLLM部署 前面部署了vLLM版本以后&#xff0c;访问它比较麻烦。如何才能更好的实现访问呢&#xff0c;这个就是我们今天要讲的…