算法详解:二分查找、排序、优先队列、递归与非递归、图遍历、背包问题
二分查找法
二分查找法是一种在有序数组中查找特定元素的算法。它通过将目标值与数组的中间元素进行比较,然后根据比较结果将查找范围缩小一半,直到找到目标值或者确定目标值不存在为止。
sort函数的功能和举例
sort函数是一种用于对数组或容器进行排序的函数。它可以按照升序或降序对元素进行排序,并且可以根据自定义的比较函数进行排序。
例如,对一个整型数组进行升序排序可以使用以下代码:
int arr[] = {5, 2, 8, 1, 9};
int n = sizeof(arr) / sizeof(arr[0]);
sort(arr, arr + n);
p-queue函数的功能和举例
p-queue函数是一种优先队列数据结构的实现。它可以将元素按照优先级进行排序,并且可以很高效地插入和删除元素。
例如,可以使用p-queue函数来实现一个按照元素大小进行排序的优先队列:
#include <queue>
using namespace std;
priority_queue<int> pq;
pq.push(5);
pq.push(2);
pq.push(8);
pq.push(1);
pq.push(9);
递归和非递归方法分别写阶乘
递归方法:
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
非递归方法:
int factorial(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
小岛(图)的深搜和宽搜
深搜(DFS) 是一种图遍历算法,通过从一个顶点出发,递归地访问其相邻顶点,直到所有可达的顶点都被访问过为止。
宽搜(BFS) 是一种图遍历算法,通过从一个顶点出发,依次访问其所有邻接顶点,然后再依次访问邻接顶点的邻接顶点,直到所有可达的顶点都被访问过为止。
01背包问题(草药)
01背包问题是一个经典的动态规划问题,其目标是在给定的一系列物品中选择一些物品放入容量为W的背包中,使得物品的总价值最大。每个物品只能选择放入背包一次(0-1选择)。
例如,有5个草药,每个草药的重量和价值分别为:
- 草药1:重量3,价值4
- 草药2:重量4,价值5
- 草药3:重量2,价值3
- 草药4:重量5,价值6
- 草药5:重量1,价值2
背包容量为10。可以使用01背包问题来确定应该选择哪些草药放入背包中,使得草药的总价值最大。
原文地址: https://www.cveoy.top/t/topic/qsen 著作权归作者所有。请勿转载和采集!