青少年编程与数学 02-018 C++数据结构与算法 10课题、搜索[查找]

青少年编程与数学 02-018 C++数据结构与算法 10课题、搜索[查找]

  • 一、线性搜索(Linear Search)
        • 原理
        • 实现步骤
        • 代码示例(C++)
        • 复杂度分析
        • 优缺点
  • 二、二分搜索(Binary Search)
        • 原理
        • 代码示例(C++)
        • 复杂度分析
        • 优缺点
  • 三、深度优先搜索(Depth-First Search, DFS)
        • 原理
        • 代码示例(C++)
        • 复杂度分析
        • 优缺点
  • 四、广度优先搜索(Breadth-First Search, BFS)
        • 原理
        • 代码示例(C++)
        • 复杂度分析
        • 优缺点
  • 五、A* 搜索算法
        • 原理
        • 代码示例(C++)
        • 复杂度分析
        • 优缺点
  • 六、跳跃搜索(Jump Search)
        • 原理
        • 代码示例(C++)
        • 复杂度分析
        • 优缺点
  • 七、插值搜索(Interpolation Search)
        • 原理
        • 代码示例(C++)
        • 复杂度分析
        • 优缺点
  • 八、斐波那契搜索(Fibonacci Search)
        • 原理
        • 代码示例(C++)
        • 复杂度分析
        • 优缺点
  • 九、搜索算法的总结
  • 十、搜索算法的用途
      • (一)数据处理和分析
      • (二)搜索引擎
      • (三)人工智能和机器学习
      • (四)网络通信
      • (五)游戏开发
      • (六)电子商务
      • (七)文件系统
      • (八)图像和音频处理
      • (九)金融领域
      • (十)物流和供应链管理
      • (十一)社交网络
      • (十二)生物信息学
      • (十三)软件开发
      • (十四)硬件设计
      • (十五)教育和研究
      • 总结

课题摘要:
搜索(查找)算法是计算机科学中用于在数据结构中查找特定元素的一类算法。这些算法在各种应用场景中都非常重要,例如在数据库中查找记录、在文件系统中查找文件、在网页中查找关键词等。搜索算法可以根据数据结构的不同和查找效率的需求分为多种类型。


一、线性搜索(Linear Search)

线性搜索是最简单的搜索算法,它通过逐个检查数组中的每个元素来查找目标值。

原理

从数组的第一个元素开始,逐个与目标值进行比较,直到找到目标值或遍历完整个数组。

实现步骤
  1. 从数组的第一个元素开始。
  2. 将当前元素与目标值进行比较。
  3. 如果当前元素等于目标值,返回当前索引。
  4. 如果当前元素不等于目标值,移动到下一个元素。
  5. 如果遍历完整个数组仍未找到目标值,返回 -1 表示未找到。
代码示例(C++)
#include <iostream>
#include <vector>
using namespace std;int linear_search(const vector<int>& arr, int target) {for (size_t i = 0; i < arr.size(); ++i) {if (arr[i] == target) {return i;  // 返回目标值的索引}}return -1;  // 如果未找到,返回 -1
}// 示例
int main() {vector<int> arr = {10, 20, 30, 40, 50};int target = 30;cout << "Index of target: " << linear_search(arr, target) << endl;return 0;
}
复杂度分析
  1. 时间复杂度:(O(n)),其中 (n) 是数组的长度。
  2. 空间复杂度:(O(1)),不需要额外的存储空间。
优缺点
  1. 优点:实现简单,适用于小规模数据。
  2. 缺点:效率较低,对于大规模数据,查找速度较慢。

二、二分搜索(Binary Search)

二分搜索是一种高效的搜索算法,它要求数组必须是有序的。通过不断将搜索范围缩小一半来查找目标值。

原理
  1. 初始化两个指针,left 指向数组的起始位置,right 指向数组的末尾。
  2. 计算中间位置 mid
  3. 如果 arr[mid] 等于目标值,返回 mid
  4. 如果 arr[mid] 小于目标值,将 left 移动到 mid + 1
  5. 如果 arr[mid] 大于目标值,将 right 移动到 mid - 1
  6. 重复上述步骤,直到 left 大于 right,表示未找到目标值。
代码示例(C++)
#include <iostream>
#include <vector>
using namespace std;int binary_search(const vector<int>& arr, int target) {int left = 0, right = arr.size() - 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
}// 示例
int main() {vector<int> arr = {10, 20, 30, 40, 50};int target = 30;cout << "Index of target: " << binary_search(arr, target) << endl;return 0;
}
复杂度分析
  1. 时间复杂度:(O(\log n)),其中 (n) 是数组的长度。
  2. 空间复杂度:(O(1)),不需要额外的存储空间。
优缺点
  1. 优点:效率高,适用于大规模有序数据。
  2. 缺点:要求数组必须是有序的,对于无序数据需要先排序。

三、深度优先搜索(Depth-First Search, DFS)

深度优先搜索是一种用于遍历或搜索树或图的算法。它从根节点开始,沿着当前分支尽可能深地搜索,直到达到叶子节点或目标节点,然后回溯。

原理
  1. 从根节点开始。
  2. 选择一个子节点,沿着该子节点继续搜索。
  3. 如果当前节点是目标节点,返回成功。
  4. 如果当前节点没有子节点或所有子节点都已访问过,回溯到上一个节点。
  5. 重复上述步骤,直到找到目标节点或所有节点都已访问过。
代码示例(C++)
#include <iostream>
#include <unordered_set>
#include <vector>
using namespace std;bool dfs(const unordered_map<char, vector<char>>& graph, char start, char target, unordered_set<char>& visited) {visited.insert(start);if (start == target) {return true;}for (char neighbor : graph.at(start)) {if (visited.find(neighbor) == visited.end()) {if (dfs(graph, neighbor, target, visited)) {return true;}}}return false;
}// 示例
int main() {unordered_map<char, vector<char>> graph = {{'A', {'B', 'C'}},{'B', {'D', 'E'}},{'C', {'F'}},{'D', {}},{'E', {'F'}},{'F', {}}};char start = 'A';char target = 'F';unordered_set<char> visited;cout << "Target found: " << (dfs(graph, start, target, visited) ? "true" : "false") << endl;return 0;
}
复杂度分析
  1. 时间复杂度:(O(V + E)),其中 (V) 是节点数,(E) 是边数。
  2. 空间复杂度:(O(V)),用于存储访问过的节点。
优缺点
  1. 优点:实现简单,适用于查找路径或连通性问题。
  2. 缺点:可能会陷入无限循环,对于有环图需要额外处理。

四、广度优先搜索(Breadth-First Search, BFS)

广度优先搜索是一种用于遍历或搜索树或图的算法。它从根节点开始,逐层访问所有节点,直到找到目标节点。

原理
  1. 从根节点开始,将其加入队列。
  2. 从队列中取出一个节点,访问该节点。
  3. 将该节点的所有未访问的子节点加入队列。
  4. 重复上述步骤,直到队列为空或找到目标节点。
代码示例(C++)
#include <iostream>
#include <queue>
#include <unordered_set>
#include <unordered_map>
using namespace std;bool bfs(const unordered_map<char, vector<char>>& graph, char start, char target) {unordered_set<char> visited;queue<char> q;q.push(start);while (!q.empty()) {char node = q.front();q.pop();if (node == target) {return true;}if (visited.find(node) == visited.end()) {visited.insert(node);for (char neighbor : graph.at(node)) {if (visited.find(neighbor) == visited.end()) {q.push(neighbor);}}}}return false;
}// 示例
int main() {unordered_map<char, vector<char>> graph = {{'A', {'B', 'C'}},{'B', {'D', 'E'}},{'C', {'F'}},{'D', {}},{'E', {'F'}},{'F', {}}};char start = 'A';char target = 'F';cout << "Target found: " << (bfs(graph, start, target) ? "true" : "false") << endl;return 0;
}
复杂度分析
  1. 时间复杂度:(O(V + E)),其中 (V) 是节点数,(E) 是边数。
  2. 空间复杂度:(O(V)),用于存储访问过的节点。
优缺点
  1. 优点:可以找到最短路径,适用于无权图的最短路径问题。
  2. 缺点:需要较多的存储空间来存储队列。

五、A* 搜索算法

A* 搜索算法是一种启发式搜索算法,它结合了 Dijkstra 算法和贪心最佳优先搜索算法的优点,用于在图中找到从起点到终点的最短路径。

原理
  1. 使用一个优先队列(通常是最小堆)来存储待访问的节点。
  2. 每个节点的优先级由两个部分组成:从起点到当前节点的实际代价 (g(n)) 和从当前节点到终点的启发式估计代价 (h(n))。
  3. 选择优先级最高的节点进行扩展,直到找到目标节点。
代码示例(C++)
#include <iostream>
#include <queue>
#include <unordered_map>
#include <vector>
using namespace std;struct Node {char node;int cost;bool operator<(const Node& other) const {return cost > other.cost;}
};vector<char> a_star(const unordered_map<char, unordered_map<char, int>>& graph, char start, char goal, const unordered_map<char, int>& heuristic) {priority_queue<Node> open_set;open_set.push({start, heuristic.at(start)});unordered_map<char, char> came_from;unordered_map<char, int> g_score;for (const auto& node : graph) {g_score[node.first] = INT_MAX;}g_score[start] = 0;unordered_map<char, int> f_score;for (const auto& node : graph) {f_score[node.first] = INT_MAX;}f_score[start] = heuristic.at(start);while (!open_set.empty()) {char current = open_set.top().node;open_set.pop();if (current == goal) {vector<char> path;while (came_from.find(current) != came_from.end()) {path.push_back(current);current = came_from[current];}path.push_back(start);reverse(path.begin(), path.end());return path;}for (const auto& neighbor : graph.at(current)) {int tentative_g_score = g_score[current] + neighbor.second;if (tentative_g_score < g_score[neighbor.first]) {came_from[neighbor.first] = current;g_score[neighbor.first] = tentative_g_score;f_score[neighbor.first] = tentative_g_score + heuristic.at(neighbor.first);open_set.push({neighbor.first, f_score[neighbor.first]});}}}return {};
}// 示例
int main() {unordered_map<char, unordered_map<char, int>> graph = {{'A', {{'B', 1}, {'C', 4}}},{'B', {{'A', 1}, {'C', 2}, {'D', 5}}},{'C', {{'A', 4}, {'B', 2}, {'D', 1}}},{'D', {{'B', 5}, {'C', 1}}}};unordered_map<char, int> heuristic = {{'A', 5}, {'B', 3}, {'C', 2}, {'D', 0}};char start = 'A';char goal = 'D';vector<char> path = a_star(graph, start, goal, heuristic);cout << "Path found: ";for (char node : path) {cout << node << " ";}cout << endl;return 0;
}
复杂度分析
  1. 时间复杂度:取决于启发式函数的质量,通常为 (O(b^d)),其中 (b) 是分支因子,(d) 是解的深度。
  2. 空间复杂度:(O(b^d)),用于存储优先队列和已访问的节点。
优缺点
  1. 优点:可以找到最优解,适用于路径规划和最短路径问题。
  2. 缺点:需要设计合适的启发式函数,否则可能退化为 Dijkstra 算法。

六、跳跃搜索(Jump Search)

跳跃搜索是一种用于有序数组的搜索算法,它通过跳跃式前进查找目标值,然后在目标值可能存在的范围内进行线性搜索。

原理
  1. 确定跳跃步长 (m),通常为 (\sqrt{n}),其中 (n) 是数组的长度。
  2. 从数组的起始位置开始,每次跳跃 (m) 步,直到找到一个大于或等于目标值的元素。
  3. 在目标值可能存在的范围内进行线性搜索。
代码示例(C++)
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;int jump_search(const vector<int>& arr, int target) {int n = arr.size();int step = static_cast<int>(sqrt(n));int prev = 0;while (prev < n && arr[min(step, n) - 1] < target) {prev = step;step += static_cast<int>(sqrt(n));if (prev >= n) {return -1;}}for (int i = prev; i < min(step, n); ++i) {if (arr[i] == target) {return i;}}return -1;
}// 示例
int main() {vector<int> arr = {10, 20, 30, 40, 50};int target = 30;cout << "Index of target: " << jump_search(arr, target) << endl;return 0;
}
复杂度分析
  1. 时间复杂度:(O(\sqrt{n})),其中 (n) 是数组的长度。
  2. 空间复杂度:(O(1)),不需要额外的存储空间。
优缺点
  1. 优点:效率高于线性搜索,适用于有序数组。
  2. 缺点:对于大规模数据,效率不如二分搜索。

七、插值搜索(Interpolation Search)

插值搜索是一种基于目标值可能出现的位置来查找目标值的搜索算法。它假设数据是均匀分布的,根据目标值与数组中最小值和最大值的关系来估计目标值的位置。

原理
  1. 计算目标值可能的位置 (pos):
    [
    pos = low + \left( \frac{(high - low)}{(arr[high] - arr[low])} \times (target - arr[low]) \right)
    ]
  2. 如果 (arr[pos]) 等于目标值,返回 (pos)。
  3. 如果 (arr[pos]) 小于目标值,调整 (low) 为 (pos + 1)。
  4. 如果 (arr[pos]) 大于目标值,调整 (high) 为 (pos - 1)。
  5. 重复上述步骤,直到找到目标值或 (low) 大于 (high)。
代码示例(C++)
#include <iostream>
#include <vector>
using namespace std;int interpolation_search(const vector<int>& arr, int target) {int low = 0, high = arr.size() - 1;while (low <= high && target >= arr[low] && target <= arr[high]) {if (low == high) {if (arr[low] == target) {return low;}return -1;}int pos = low + ((high - low) / (arr[high] - arr[low]) * (target - arr[low]));if (arr[pos] == target) {return pos;} else if (arr[pos] < target) {low = pos + 1;} else {high = pos - 1;}}return -1;
}// 示例
int main() {vector<int> arr = {10, 20, 30, 40, 50};int target = 30;cout << "Index of target: " << interpolation_search(arr, target) << endl;return 0;
}
复杂度分析
  1. 时间复杂度:在数据均匀分布的情况下为 (O(\log \log n)),在最坏情况下为 (O(n))。
  2. 空间复杂度:(O(1)),不需要额外的存储空间。
优缺点
  1. 优点:在数据均匀分布的情况下效率较高。
  2. 缺点:对于非均匀分布的数据,效率可能较低。

八、斐波那契搜索(Fibonacci Search)

斐波那契搜索是一种基于斐波那契数列的搜索算法,它通过斐波那契数列来划分数组,逐步缩小搜索范围。

原理
  1. 找到一个大于或等于数组长度的斐波那契数 (F(m))。
  2. 将数组分为两部分,长度分别为 (F(m-1)) 和 (F(m-2))。
  3. 比较目标值与中间元素,根据比较结果调整搜索范围。
  4. 重复上述步骤,直到找到目标值或搜索范围为空。
代码示例(C++)
#include <iostream>
#include <vector>
using namespace std;int fibonacci_search(const vector<int>& arr, int target) {int fibMMm2 = 0;  // (m-2)th Fibonacciint fibMMm1 = 1;  // (m-1)th Fibonacciint fibM = fibMMm2 + fibMMm1;  // m'th Fibonacciwhile (fibM < arr.size()) {fibMMm2 = fibMMm1;fibMMm1 = fibM;fibM = fibMMm2 + fibMMm1;}int offset = -1;while (fibM > 1) {int i = min(offset + fibMMm2, static_cast<int>(arr.size()) - 1);if (arr[i] < target) {fibM = fibMMm1;fibMMm1 = fibMMm2;fibMMm2 = fibM - fibMMm1;offset = i;} else if (arr[i] > target) {fibM = fibMMm2;fibMMm1 = fibMMm1 - fibMMm2;fibMMm2 = fibM - fibMMm1;} else {return i;}}if (fibMMm1 && arr[offset + 1] == target) {return offset + 1;}return -1;
}// 示例
int main() {vector<int> arr = {10, 20, 30, 40, 50};int target = 30;cout << "Index of target: " << fibonacci_search(arr, target) << endl;return 0;
}
复杂度分析
  1. 时间复杂度:(O(\log n)),其中 (n) 是数组的长度。
  2. 空间复杂度:(O(1)),不需要额外的存储空间。
优缺点
  1. 优点:效率与二分搜索相当,适用于有序数组。
  2. 缺点:实现相对复杂,对于大规模数据,效率不如二分搜索。

九、搜索算法的总结

搜索算法在计算机科学中有着广泛的应用,不同的搜索算法适用于不同的数据结构和应用场景。以下是对几种常见搜索算法的总结:

搜索算法数据结构时间复杂度空间复杂度优点缺点
线性搜索数组(O(n))(O(1))实现简单,适用于小规模数据效率较低,对于大规模数据查找速度慢
二分搜索有序数组(O(\log n))(O(1))效率高,适用于大规模有序数据要求数组必须是有序的
深度优先搜索图或树(O(V + E))(O(V))实现简单,适用于查找路径或连通性问题可能会陷入无限循环,对于有环图需要额外处理
广度优先搜索图或树(O(V + E))(O(V))可以找到最短路径,适用于无权图的最短路径问题需要较多的存储空间来存储队列
A* 搜索(O(b^d))(O(b^d))可以找到最优解,适用于路径规划和最短路径问题需要设计合适的启发式函数
跳跃搜索有序数组(O(\sqrt{n}))(O(1))效率高于线性搜索,适用于有序数组对于大规模数据,效率不如二分搜索
插值搜索有序数组(O(\log \log n))(O(1))在数据均匀分布的情况下效率较高对于非均匀分布的数据,效率可能较低
斐波那契搜索有序数组(O(\log n))(O(1))效率与二分搜索相当,适用于有序数组实现相对复杂

十、搜索算法的用途

搜索算法在计算机科学和实际应用中有着极其广泛的应用。它们是解决各种查找和优化问题的基础工具。以下是搜索算法的一些主要用途,按不同领域分类介绍:

(一)数据处理和分析

  1. 数据库查询
    • 数据库管理系统(DBMS)使用搜索算法来快速定位和检索数据。例如,B树和B+树索引结构利用二分搜索原理,快速查找特定的键值。
    • SQL 查询优化器使用搜索算法来选择最优的查询执行计划,提高查询效率。
  2. 数据清洗和预处理
    • 在数据预处理阶段,线性搜索和二分搜索可用于查找重复数据、缺失值或异常值。
    • 例如,在处理用户注册信息时,通过搜索算法可以快速发现重复的用户名或邮箱地址。
  3. 数据分析
    • 在数据分析中,搜索算法可用于快速定位特定的数据点,计算统计量(如中位数、四分位数等)。
    • 例如,通过排序和二分搜索可以快速计算数据的分位数。

(二)搜索引擎

  1. 网页索引和检索
    • 搜索引擎(如谷歌、百度)使用复杂的搜索算法来索引和检索网页。例如,PageRank 算法用于评估网页的重要性,从而对搜索结果进行排序。
    • 倒排索引(Inverted Index)是一种高效的数据结构,用于快速查找包含特定关键词的网页。
  2. 关键词匹配
    • 搜索引擎使用搜索算法来匹配用户输入的关键词和网页内容。例如,通过TF-IDF(Term Frequency-Inverse Document Frequency)算法评估关键词的相关性。

(三)人工智能和机器学习

  1. 路径规划
    • 在机器人导航和自动驾驶中,A* 搜索算法和Dijkstra算法用于找到从起点到终点的最优路径。
    • 例如,在地图应用中,A* 算法结合启发式函数可以快速找到最短路径。
  2. 模型评估
    • 在机器学习中,搜索算法用于评估模型的性能。例如,通过交叉验证和网格搜索(Grid Search)选择最优的超参数。
  3. 特征选择
    • 搜索算法可用于选择最重要的特征。例如,基于信息增益的搜索算法可用于选择决策树中的最优特征。

(四)网络通信

  1. 路由算法
    • 在网络通信中,Dijkstra算法和Bellman-Ford算法用于计算最短路径,优化数据包的传输路径。
    • 例如,OSPF(Open Shortest Path First)协议使用Dijkstra算法来计算网络中的最短路径。
  2. 流量控制
    • 搜索算法可用于管理网络流量,优化数据包的传输顺序。例如,通过优先队列管理高优先级数据包。

(五)游戏开发

  1. 路径查找
    • 在游戏开发中,A* 搜索算法用于计算角色的移动路径。例如,在策略游戏中,AI 使用A* 算法找到从起点到目标点的最优路径。
  2. 事件处理
    • 游戏中的事件系统使用搜索算法来处理和排序事件。例如,通过优先队列管理事件的处理顺序。

(六)电子商务

  1. 商品推荐
    • 电子商务平台使用搜索算法来推荐商品。例如,通过协同过滤算法和内容基推荐算法,为用户推荐最相关的商品。
  2. 商品排序
    • 在商品搜索结果中,使用搜索算法对商品进行排序。例如,根据销量、价格、好评率等对商品进行排序。

(七)文件系统

  1. 文件查找
    • 文件系统使用搜索算法来查找文件和目录。例如,通过哈希表和B树索引快速定位文件。
    • 在Windows和Linux操作系统中,findgrep 命令使用搜索算法来查找文件和内容。
  2. 目录管理
    • 文件系统使用搜索算法来管理目录结构。例如,通过树结构和广度优先搜索(BFS)管理目录层次。

(八)图像和音频处理

  1. 图像识别
    • 在图像处理中,搜索算法用于识别和定位图像中的特定对象。例如,通过滑动窗口和卷积神经网络(CNN)检测图像中的目标。
  2. 音频信号处理
    • 在音频处理中,搜索算法用于匹配音频信号中的特定模式。例如,通过动态时间弯曲(DTW)算法匹配音频信号。

(九)金融领域

  1. 交易匹配
    • 在金融市场中,搜索算法用于匹配买卖订单。例如,通过优先队列管理订单的优先级,快速匹配交易。
  2. 风险评估
    • 金融机构使用搜索算法来评估风险。例如,通过蒙特卡洛模拟和优化算法评估投资组合的风险。

(十)物流和供应链管理

  1. 路径优化
    • 在物流配送中,搜索算法用于优化配送路径。例如,通过遗传算法和模拟退火算法优化车辆路径问题(VRP)。
  2. 库存管理
    • 在库存管理中,搜索算法用于优化库存水平。例如,通过线性规划和动态规划算法管理库存。

(十一)社交网络

  1. 好友推荐
    • 社交网络平台使用搜索算法来推荐好友。例如,通过图算法和机器学习算法推荐可能认识的人。
  2. 信息传播
    • 在信息传播中,搜索算法用于跟踪和预测信息的传播路径。例如,通过PageRank算法评估用户在社交网络中的影响力。

(十二)生物信息学

  1. 基因序列比对
    • 在生物信息学中,搜索算法用于比对基因序列。例如,通过动态规划算法和启发式搜索算法比对DNA序列。
  2. 蛋白质结构预测
    • 搜索算法用于预测蛋白质的三维结构。例如,通过蒙特卡洛模拟和分子动力学模拟优化蛋白质结构。

(十三)软件开发

  1. 代码搜索
    • 在软件开发中,搜索算法用于查找代码中的特定模式。例如,通过正则表达式和文本搜索算法查找代码中的错误。
  2. 版本控制
    • 版本控制系统(如Git)使用搜索算法来管理代码的版本历史。例如,通过二分搜索算法快速定位特定的代码版本。

(十四)硬件设计

  1. 电路设计
    • 在硬件设计中,搜索算法用于优化电路布局。例如,通过遗传算法和模拟退火算法优化电路的布线。
  2. 故障诊断
    • 在硬件故障诊断中,搜索算法用于定位故障点。例如,通过二分搜索算法快速定位硬件故障。

(十五)教育和研究

  1. 教学工具
    • 在计算机科学教育中,搜索算法是教学的重要内容。例如,通过可视化工具展示搜索算法的执行过程。
  2. 科学研究
    • 在科学研究中,搜索算法用于优化实验设计和数据分析。例如,通过拉丁方设计和田口方法优化实验条件。

总结

搜索算法在各个领域都有着广泛的应用。它们不仅提高了数据处理和分析的效率,还在优化路径、推荐系统、风险评估等方面发挥了重要作用。随着技术的发展,搜索算法将继续在新的领域和应用场景中发挥关键作用。

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

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

相关文章

Linux操作系统从入门到实战(三)Linux基础指令(上)

Linux操作系统从入门到实战&#xff08;三&#xff09;Linux基础指令&#xff08;上&#xff09; 前言一、ls 指令二、pwd三、cd四、touch 指令五、mkdir六、rmdir 指令和 rm 指令七、man 指令八、cp九、mv 指令十、cat 指令十一、 more 指令十二、less 指令十四、head 指令十五…

Java对象转换的多种实现方式

Java对象转换的多种实现方式 在Java开发中&#xff0c;对象转换是一个常见的需求。特别是在不同层次间传递数据时&#xff0c;通常需要将一个对象转换为另一个对象。虽然JSON序列化/反序列化是一种常见的方法&#xff0c;但在某些场景下可能并不是最佳选择。本文将总结几种常见…

头歌实训之索引

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C语言的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给更…

Rundeck 介绍及安装:自动化调度与执行工具

Rundeck介绍 概述&#xff1a;Rundeck 是什么&#xff1f; Rundeck 是一款开源的自动化调度和任务执行工具&#xff0c;专为运维场景设计&#xff0c;帮助工程师通过统一的平台管理和执行跨系统、跨节点的任务。它由 PagerDuty 维护&#xff08;2016 年收购&#xff09;&#…

基于 Python 的自然语言处理系列(85):PPO 原理与实践

&#x1f4cc; 本文介绍如何在 RLHF&#xff08;Reinforcement Learning with Human Feedback&#xff09;中使用 PPO&#xff08;Proximal Policy Optimization&#xff09;算法对语言模型进行强化学习微调。 &#x1f517; 官方文档&#xff1a;trl PPOTrainer 一、引言&…

珍爱网:从降本增效到绿色低碳,数字化新基建价值凸显

2024年12月24日&#xff0c;法大大联合企业绿色发展研究院发布《2024签约减碳与低碳办公白皮书》&#xff0c;深入剖析电子签在推动企业绿色低碳转型中的关键作用&#xff0c;为企业实现环境、社会和治理&#xff08;ESG&#xff09;目标提供新思路。近期&#xff0c;法大大将陆…

Java实现HTML转PDF(deepSeekAi->html->pdf)

Java实现HTML转PDF,主要为了解决将ai返回的html文本数据转为PDF文件方便用户下载查看。 一、deepSeek-AI提问词 基于以上个人数据。总结个人身体信息&#xff0c;分析个人身体指标信息。再按一个月为维度&#xff0c;详细列举一个月内训练计划&#xff0c;维度详细至每周每天…

Estimands与Intercurrent Events:临床试验与统计学核心框架

1. Estimands(估计目标)概述 1.1 定义与作用 1.1.1 定义 Estimand是临床试验中需明确提出的科学问题,即研究者希望通过数据估计的“目标量”,定义“治疗效应”具体含义,确保分析结果与临床问题一致。 例如,在研究某种新药对高血压患者降压效果时,Estimand可定义为“在…

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示&#xff0c;实现前后端交互 前言一、JDBC 核心接口和类&#xff1a;数据库连接的“工具箱”1. 常用的 2 个“关键类”2. 必须掌握的 5 个“核心接口” 二、创建 JDBC 程序的步骤1. 第一步&#xf…

深入理解HotSpot JVM 基本原理

关于JAVA Java编程语言是一种通用的、并发的、面向对象的语言。它的语法类似于C和C++,但它省略了许多使C和C++复杂、混乱和不安全的特性。 Java 是几乎所有类型的网络应用程序的基础,也是开发和提供嵌入式和移动应用程序、游戏、基于 Web 的内容和企业软件的全球标准。. 从…

【HTTP/3:互联网通信的量子飞跃】

HTTP/3&#xff1a;互联网通信的量子飞跃 如果说HTTP/1.1是乡村公路&#xff0c;HTTP/2是现代高速公路系统&#xff0c;那么HTTP/3就像是一种革命性的"传送门"技术&#xff0c;它彻底重写了数据传输的底层规则&#xff0c;让信息几乎可以瞬间抵达目的地&#xff0c;…

Apipost免费版、企业版和私有化部署详解

Apipost是企业级的 API 研发协作一体化平台&#xff0c;为企业提供 API研发测试管理全链路解决方案&#xff0c;不止于API研发场景&#xff0c;增强企业API资产管理。 Apipost 基于同一份数据源&#xff0c;同时提供给后端开发、前端开发、测试人员使用的接口调试、Mock、自动化…

使用若依二次开发商城系统-1:搭建若依运行环境

前言 若依框架有很多版本&#xff0c;这里使用的是springboot3vue3这样的一个前后端分离的版本。 一.操作步骤 1 下载springboot3版本的后端代码 后端springboot3的代码路径&#xff0c;https://gitee.com/y_project/RuoYi-Vue 需要注意我们要的是springboot3分支。 先用g…

速成GO访问sql,个人笔记

更多个人笔记&#xff1a;&#xff08;仅供参考&#xff0c;非盈利&#xff09; gitee&#xff1a; https://gitee.com/harryhack/it_note github&#xff1a; https://github.com/ZHLOVEYY/IT_note 本文是基于原生的库 database/sql进行初步学习 基于ORM等更多操作可以关注我…

【C++指南】告别C字符串陷阱:如何实现封装string?

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f4ac; 注意&#xff1a;本章节只详讲string中常用接口及实现&#xff0c;有其他需求查阅文档介绍。 &#x1f680; 今天通过了…

系统架构师2025年论文《论软件架构评估2》

论软件系统架构评估 v2.0 摘要: 某市医院预约挂号系统建设推广应用项目是我市卫生健康委员会 2019 年发起的一项医疗卫生行业便民惠民信息化项目,目的是实现辖区内患者在辖区各公立医疗机构就诊时,可以通过多种线上渠道进行预约挂号,提升就医体验。我作为系统架构师参与此…

BEVDet4D: Exploit Temporal Cues in Multi-camera 3D Object Detection

背景 对于现有的BEVDet方法,它对于速度的预测误差要高于基于点云的方法,对于像速度这种与时间有关的属性,仅靠单帧数据很难预测好。因此本文提出了BEVDet4D,旨在获取时间维度上的丰富信息。它是在BEVDet的基础上进行拓展,保留了之前帧的BEV特征,并将其进行空间对齐后与当…

el-upload 上传逻辑和ui解耦,上传七牛

解耦的作用在于如果后面要我改成从阿里云oss上传文件&#xff0c;我只需要实现上传逻辑从七牛改成阿里云即可&#xff0c;其他不用动。实现方式有2部分组成&#xff0c;一部分是上传逻辑&#xff0c;一部分是ui。 上传逻辑 大概逻辑就是先去服务端拿上传token和地址&#xff0…

酒水类目电商代运营公司-品融电商:全域策略驱动品牌长效增长

酒水类目电商代运营公司-品融电商&#xff1a;全域策略驱动品牌长效增长 在竞争日益激烈的酒水市场中&#xff0c;品牌如何快速突围并实现长效增长&#xff1f;品融电商凭借「效品合一 全域增长」方法论与全链路运营能力&#xff0c;成为酒水类目代运营的领跑者。从品牌定位、视…

机器学习特征工程中的数值分箱技术:原理、方法与实例解析

标题&#xff1a;机器学习特征工程中的数值分箱技术&#xff1a;原理、方法与实例解析 摘要&#xff1a; 分箱技术作为机器学习特征工程中的关键环节&#xff0c;通过将数值数据划分为离散区间&#xff0c;能够有效提升模型对非线性关系的捕捉能力&#xff0c;同时增强模型对异…