數據結構 學習 圖 2025年6月14日 12點57分

搜索算法

深度優先搜索

一種用于遍歷或搜索樹或圖的算法。它沿著樹的深度遍歷樹的節點,盡可能深的搜索樹的分支。

DFS核心思想

  • 深度優先:盡可能深地搜索樹的分支

  • 回溯思想:當節點v的所在邊都已被探尋過,搜索將回溯到發現節點v的那條邊的起始節點

  • 遞歸實現:通常用遞歸方式自然地實現DFS

  • void dfs(Node* node, vector<bool>& visited) {// 標記當前節點為已訪問visited[node->val] = true;cout << node->val << " ";// 訪問所有相鄰節點for (Node* neighbor : node->neighbors) {if (!visited[neighbor->val]) {dfs(neighbor, visited);}}
    }遞歸實現

    經典運用

  • //圖的連通分量
    int countComponents(int n, vector<vector<int>>& edges) {vector<vector<int>> graph(n);vector<bool> visited(n, false);int components = 0;// 構建鄰接表for (auto& edge : edges) {graph[edge[0]].push_back(edge[1]);graph[edge[1]].push_back(edge[0]);}for (int i = 0; i < n; ++i) {if (!visited[i]) {components++;dfs(i, graph, visited);}}return components;
    }void dfs(int node, vector<vector<int>>& graph, vector<bool>& visited) {visited[node] = true;for (int neighbor : graph[node]) {if (!visited[neighbor]) {dfs(neighbor, graph, visited);}}
    }

    DFS是解決許多算法問題的強大工具,掌握其核心思想和各種優化技巧對算法能力提升至關重要。

廣度優先搜索

一種用于遍歷或搜索樹或圖的算法。它從根節點開始,先訪問所有相鄰節點,然后再依次訪問這些節點的相鄰節點,以此類推。

BFS核心思想

  • 層級遍歷:按照距離起始節點的層級依次訪問

  • 隊列結構:使用隊列來存儲待訪問節點

  • 最短路徑:在無權圖中能找到最短路徑

#include <queue>
#include <vector>using namespace std;//標準實現 使用隊列
void bfs(Node* start) {if (!start) return;queue<Node*> q;vector<bool> visited(NODES_SIZE, false);q.push(start);visited[start->val] = true;while (!q.empty()) {Node* current = q.front();q.pop();cout << current->val << " "; // 處理當前節點// 訪問所有相鄰節點for (Node* neighbor : current->neighbors) {if (!visited[neighbor->val]) {visited[neighbor->val] = true;q.push(neighbor);}}}
}

最短路徑(無權圖)

int shortestPath(Node* start, Node* end) {if (!start || !end) return -1;if (start == end) return 0;queue<Node*> q;unordered_map<Node*, int> distance;q.push(start);distance[start] = 0;while (!q.empty()) {Node* current = q.front();q.pop();for (Node* neighbor : current->neighbors) {if (!distance.count(neighbor)) {distance[neighbor] = distance[current] + 1;if (neighbor == end) {return distance[neighbor];}q.push(neighbor);}}}return -1; // 不可達
}

?

注意事項

  1. 訪問標記:必須在入隊時標記,而非出隊時

  2. 隊列大小:處理層級時需要先保存當前隊列大小

  3. 邊界檢查:網格類問題注意邊界條件

  4. 狀態表示:復雜狀態需要設計良好的哈希函數

BFS是解決最短路徑問題和層級遍歷問題的利器,掌握其核心思想和各種變種對算法能力提升至關重要。

圖的概念

有向圖 (強連通分量)

強連通分量是有向圖中的一個重要概念,指有向圖中任意兩個頂點都互相可達的最大子圖。理解強連通分量對于分析有向圖的結構至關重要。

基本概念

1. 強連通分量定義

  • 強連通:在有向圖中,如果從頂點u到v有一條路徑,且從v到u也有一條路徑,則稱u和v強連通

  • 強連通分量:有向圖的極大強連通子圖

2. 相關性質

  • 每個頂點屬于且僅屬于一個強連通分量

  • 將每個強連通分量縮為一個頂點,得到的有向圖是一個有向無環圖(DAG)

  • 應用場景:編譯器優化、社交網絡分析、電路設計等

// Kosaraju算法(兩次DFS) 實現
#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>using namespace std;class Graph {int V;vector<vector<int>> adj;vector<vector<int>> revAdj;void fillOrder(int v, vector<bool>& visited, stack<int>& st) {visited[v] = true;for (int u : adj[v]) {if (!visited[u]) {fillOrder(u, visited, st);}}st.push(v);}void DFSUtil(int v, vector<bool>& visited, vector<int>& component) {visited[v] = true;component.push_back(v);for (int u : revAdj[v]) {if (!visited[u]) {DFSUtil(u, visited, component);}}}public:Graph(int V) : V(V), adj(V), revAdj(V) {}void addEdge(int v, int w) {adj[v].push_back(w);revAdj[w].push_back(v);}vector<vector<int>> findSCCs() {stack<int> st;vector<bool> visited(V, false);// 第一次DFS,填充棧for (int i = 0; i < V; i++) {if (!visited[i]) {fillOrder(i, visited, st);}}// 重置visited數組fill(visited.begin(), visited.end(), false);vector<vector<int>> sccs;// 第二次DFS,按照棧的順序處理逆圖while (!st.empty()) {int v = st.top();st.pop();if (!visited[v]) {vector<int> component;DFSUtil(v, visited, component);sccs.push_back(component);}}return sccs;}
};
// Tarjan算法(一次DFS)
#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>using namespace std;class Graph {int V;vector<vector<int>> adj;void tarjanSCCUtil(int u, vector<int>& disc, vector<int>& low, stack<int>& st, vector<bool>& inStack, vector<vector<int>>& sccs, int& time) {disc[u] = low[u] = ++time;st.push(u);inStack[u] = true;for (int v : adj[u]) {if (disc[v] == -1) { // v未被訪問tarjanSCCUtil(v, disc, low, st, inStack, sccs, time);low[u] = min(low[u], low[v]);} else if (inStack[v]) { // v在棧中low[u] = min(low[u], disc[v]);}}// 發現強連通分量if (low[u] == disc[u]) {vector<int> component;while (st.top() != u) {int v = st.top();component.push_back(v);inStack[v] = false;st.pop();}component.push_back(u);inStack[u] = false;st.pop();sccs.push_back(component);}}public:Graph(int V) : V(V), adj(V) {}void addEdge(int v, int w) {adj[v].push_back(w);}vector<vector<int>> tarjanSCC() {vector<int> disc(V, -1), low(V, -1);vector<bool> inStack(V, false);stack<int> st;vector<vector<int>> sccs;int time = 0;for (int i = 0; i < V; i++) {if (disc[i] == -1) {tarjanSCCUtil(i, disc, low, st, inStack, sccs, time);}}return sccs;}
};

實際應用:?有向圖的縮點(將SCC縮為單個頂點)

Graph buildCondensedGraph(Graph& g, vector<vector<int>>& sccs) {// 創建頂點映射:原始頂點 -> 縮點后的頂點編號vector<int> vertexToComponent(g.V);for (int i = 0; i < sccs.size(); i++) {for (int v : sccs[i]) {vertexToComponent[v] = i;}}// 構建縮點后的圖Graph condensed(sccs.size());unordered_set<string> edges; // 避免重復邊for (int u = 0; u < g.V; u++) {for (int v : g.adj[u]) {int compU = vertexToComponent[u];int compV = vertexToComponent[v];if (compU != compV) {string edge = to_string(compU) + "-" + to_string(compV);if (!edges.count(edge)) {condensed.addEdge(compU, compV);edges.insert(edge);}}}}return condensed;
}

強連通分量分析是圖算法中的重要工具,掌握Kosaraju和Tarjan這兩種經典算法,能夠有效解決許多有向圖相關問題。

無向圖 (雙連通分量)

雙連通分量是無向圖中的一個重要概念,指沒有"關節點"(割點)的最大連通子圖。理解雙連通分量對于分析網絡可靠性、電路設計等問題至關重要。

基本概念

1. 雙連通分量定義

  • 關節點(割點):刪除該頂點會增加圖的連通分量數量

  • 橋(割邊):刪除該邊會增加圖的連通分量數量

  • 雙連通分量:不含關節點的極大連通子圖

2. 相關性質

  • 任意兩個頂點之間至少存在兩條不相交的路徑

  • 雙連通分量之間通過關節點連接

  • 應用場景:網絡容錯分析、交通網絡規劃、電路板設計

// Tarjan算法求雙連通分量
#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>using namespace std;class Graph {int V;vector<vector<int>> adj;void BCCUtil(int u, vector<int>& disc, vector<int>& low, stack<pair<int, int>>& st, vector<bool>& isAP,vector<vector<pair<int, int>>>& bccs, int& time, int parent = -1) {int children = 0;disc[u] = low[u] = ++time;for (int v : adj[u]) {if (disc[v] == -1) { // v未被訪問children++;st.push({u, v});BCCUtil(v, disc, low, st, isAP, bccs, time, u);low[u] = min(low[u], low[v]);// u是關節點(兩種情況)if ((parent == -1 && children > 1) || (parent != -1 && low[v] >= disc[u])) {isAP[u] = true;// 輸出雙連通分量vector<pair<int, int>> component;while (st.top() != make_pair(u, v)) {component.push_back(st.top());st.pop();}component.push_back(st.top());st.pop();bccs.push_back(component);}} else if (v != parent && disc[v] < disc[u]) { // 處理回邊low[u] = min(low[u], disc[v]);st.push({u, v});}}}public:Graph(int V) : V(V), adj(V) {}void addEdge(int v, int w) {adj[v].push_back(w);adj[w].push_back(v);}pair<vector<bool>, vector<vector<pair<int, int>>>> findBCCs() {vector<int> disc(V, -1), low(V, -1);vector<bool> isAP(V, false);stack<pair<int, int>> st;vector<vector<pair<int, int>>> bccs;int time = 0;for (int i = 0; i < V; i++) {if (disc[i] == -1) {BCCUtil(i, disc, low, st, isAP, bccs, time);// 處理剩余邊vector<pair<int, int>> component;bool hasEdge = false;while (!st.empty()) {hasEdge = true;component.push_back(st.top());st.pop();}if (hasEdge) {bccs.push_back(component);}}}return {isAP, bccs};}
};//查找橋(割邊)算法
vector<pair<int, int>> findBridges(Graph& g) {vector<int> disc(g.V, -1), low(g.V, -1);vector<pair<int, int>> bridges;int time = 0;for (int i = 0; i < g.V; i++) {if (disc[i] == -1) {bridgeUtil(i, -1, disc, low, bridges, time, g);}}return bridges;
}void bridgeUtil(int u, int parent, vector<int>& disc, vector<int>& low,vector<pair<int, int>>& bridges, int& time, Graph& g) {disc[u] = low[u] = ++time;for (int v : g.adj[u]) {if (disc[v] == -1) { // v未被訪問bridgeUtil(v, u, disc, low, bridges, time, g);low[u] = min(low[u], low[v]);// 發現橋if (low[v] > disc[u]) {bridges.push_back({u, v});}} else if (v != parent) { // 處理回邊low[u] = min(low[u], disc[v]);}}
}

?無向圖的雙連通分量分析是圖論中的重要工具,掌握Tarjan算法及其變種能夠有效解決網絡可靠性、關鍵節點識別等問題。理解算法的核心思想和實現細節對解決實際問題至關重要

? ? ? ? 回路

歐拉回路

歐拉回路和歐拉路徑是圖論中的重要概念,分別指圖中經過每條邊恰好一次并回到起點的回路,和經過每條邊恰好一次的路徑。

基本概念

1. 定義

  • 歐拉回路:圖中經過每條邊恰好一次并回到起點的閉合路徑

  • 歐拉路徑:圖中經過每條邊恰好一次的路徑(不一定閉合)

  • 歐拉圖:存在歐拉回路的圖

  • 半歐拉圖:存在歐拉路徑但不存在歐拉回路的圖

2. 判定條件

對于無向圖:
類型連通性頂點度數條件
歐拉回路連通所有頂點度數為偶數
歐拉路徑連通恰好兩個頂點度數為奇數(起點和終點)
對于有向圖:
類型連通性頂點度數條件
歐拉回路強連通每個頂點入度等于出度
歐拉路徑單向連通一個頂點出度=入度+1(起點),一個頂點入度=出度+1(終點),其余入度=出度

算法實現

//Hierholzer算法(尋找歐拉回路/路徑)
#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>using namespace std;class Graph {int V;vector<vector<int>> adj;public:Graph(int V) : V(V), adj(V) {}void addEdge(int u, int v) {adj[u].push_back(v);}void removeEdge(int u, int v) {auto it = find(adj[u].begin(), adj[u].end(), v);if (it != adj[u].end()) {adj[u].erase(it);}}vector<int> findEulerianCircuit() {vector<int> circuit;stack<int> currPath;int currVertex = 0; // 可以選擇任意頂點作為起點currPath.push(currVertex);while (!currPath.empty()) {if (!adj[currVertex].empty()) {currPath.push(currVertex);int nextVertex = adj[currVertex].back();adj[currVertex].pop_back();currVertex = nextVertex;} else {circuit.push_back(currVertex);currVertex = currPath.top();currPath.pop();}}reverse(circuit.begin(), circuit.end());return circuit;}
};

歐拉回路和路徑在DNA測序、網絡路由、物流配送等領域有廣泛應用。掌握Hierholzer算法及其實現細節,能夠有效解決許多實際問題。理解歐拉圖的性質和判定條件是應用這些算法的基礎。?

哈米爾頓回路?

哈密爾頓回路是圖論中的一個重要概念,指經過圖中每個頂點恰好一次并最終回到起點的閉合路徑。與歐拉回路(經過每條邊一次)不同,哈密爾頓回路關注的是頂點的遍歷。

基本概念

1. 定義

  • 哈密爾頓路徑:經過圖中每個頂點恰好一次的路徑

  • 哈密爾頓回路:閉合的哈密爾頓路徑(起點=終點)

  • 哈密爾頓圖:包含哈密爾頓回路的圖

2. 判定條件

哈密爾頓回路的判定是NP完全問題,沒有已知的多項式時間算法。但有一些充分條件和必要條件:

充分條件:
  • Dirac定理:對于n≥3的簡單圖,若每個頂點度數≥n/2,則是哈密爾頓圖

  • Ore定理:對于n≥3的簡單圖,若任意兩個不相鄰頂點u,v滿足deg(u)+deg(v)≥n,則是哈密爾頓圖

必要條件:
  • 圖必須是連通的

  • 沒有度數為1的頂點

  • 刪除任意k個頂點后,剩余子圖的連通分量不超過k個

算法實現

//回溯法(基礎實現)
#include <iostream>
#include <vector>using namespace std;class Graph {int V;vector<vector<int>> adj;bool hamCycleUtil(vector<int>& path, int pos) {if (pos == V) {// 檢查最后一個頂點是否與第一個頂點相連return adj[path[pos-1]][path[0]] == 1;}for (int v = 1; v < V; v++) {if (isSafe(v, path, pos)) {path[pos] = v;if (hamCycleUtil(path, pos+1))return true;path[pos] = -1; // 回溯}}return false;}bool isSafe(int v, vector<int>& path, int pos) {// 檢查當前頂點是否與上一個頂點相連if (adj[path[pos-1]][v] == 0)return false;// 檢查是否已經包含在路徑中for (int i = 0; i < pos; i++)if (path[i] == v)return false;return true;}public:Graph(int V) : V(V), adj(V, vector<int>(V, 0)) {}void addEdge(int u, int v) {adj[u][v] = 1;adj[v][u] = 1;}bool hamCycle() {vector<int> path(V, -1);path[0] = 0; // 從頂點0開始if (!hamCycleUtil(path, 1)) {cout << "不存在哈密爾頓回路" << endl;return false;}printSolution(path);return true;}void printSolution(vector<int>& path) {cout << "哈密爾頓回路: ";for (int i = 0; i < V; i++)cout << path[i] << " ";cout << path[0] << endl;}
};

哈密爾頓回路問題在運籌學、電路設計、生物信息學等領域有重要應用。雖然它是NP難問題,但通過合理的算法選擇和優化技巧,可以有效地解決中小規模的實際問題。

并查集

并查集是一種樹型的數據結構,用于處理一些不相交集合的合并及查詢問題。它支持兩種基本操作:

  • 查找(Find):確定元素屬于哪個子集

  • 合并(Union):將兩個子集合并成一個集合

基本概念

1. 核心操作

操作功能描述
makeSet(x)創建僅包含x的新集合
find(x)返回x所在集合的代表元素
union(x, y)合并x和y所在的集合

2. 關鍵思想

  • 代表元:每個集合選擇一個元素作為代表

  • 樹形結構:用樹表示集合,根節點為代表元

  • 路徑壓縮:優化查找操作

  • 按秩合并:優化合并操作

//基礎實現(帶路徑壓縮和按秩合并)
class DSU {
private:vector<int> parent;vector<int> rank; // 秩(樹高度的上界)public:DSU(int n) {parent.resize(n);rank.resize(n, 0);// 初始化每個元素為自己的父節點for (int i = 0; i < n; i++) {parent[i] = i;}}// 查找根節點(帶路徑壓縮)int find(int x) {if (parent[x] != x) {parent[x] = find(parent[x]); // 路徑壓縮}return parent[x];}// 合并兩個集合(按秩合并)void unionSets(int x, int y) {int rootX = find(x);int rootY = find(y);if (rootX == rootY) return; // 已在同一集合// 按秩合并if (rank[rootX] < rank[rootY]) {parent[rootX] = rootY;} else if (rank[rootX] > rank[rootY]) {parent[rootY] = rootX;} else {parent[rootY] = rootX;rank[rootX]++;}}
};

?并查集是解決動態連通性問題的利器,在社交網絡分析、圖像處理、網絡連接等領域有廣泛應用。掌握其核心思想和優化技巧,能夠高效解決許多實際問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85207.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85207.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85207.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

H3C路由器使用PBR 實現兩條互聯網專線互為備份

實驗拓撲 圖 1-1 注&#xff1a;如無特別說明&#xff0c;描述中的 R1 或 SW1 對應拓撲中設備名稱末尾數字為 1 的設備&#xff0c;R2 或 SW2 對應拓撲中設備名稱末尾數字為 2 的設備&#xff0c;以此類推&#xff1b;另外&#xff0c;同一網段中&#xff0c;IP 地址的主機位為…

深化信創生態布局!聚銘網絡與海量數據完成產品兼容性互認證

近日&#xff0c;聚銘網絡成功與海量數據完成了一系列產品的兼容性互認證&#xff0c;并獲得了由海量數據頒發的產品兼容互認證書。這一成就標志著雙方在技術整合方面邁出了重要一步。 經過全面嚴格的測試&#xff0c;聚銘網絡自主研發的安全系列產品&#xff0c;包括聚銘下一…

Unity AR+ 百度AI 實現 物體識別與對應英文翻譯

一、前言 我目前實現了拍照保存到手機的功能 我想進一步優化&#xff0c;實現通過手機攝像頭實時識別眼前的物體&#xff0c;顯示對應的英文的功能。 1.項目技術棧&#xff1a;Unity 2022.3.53 Vuforia 11 百度物體識別API 百度翻譯API 2.功能目標&#xff1a;使用手機攝像…

Vue.js第二節

計算屬性、事件綁定、條件判斷、遍歷循環 計算屬性&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

從開源代碼入場無人機學術研究到商業化市場的全路徑指南-優雅草卓伊凡

從開源代碼入場無人機學術研究到商業化市場的全路徑指南-優雅草卓伊凡 引言&#xff1a;開源代碼在無人機研究中的重要性 優雅草卓伊凡在這里告訴大家&#xff0c;如果真的要開始進入無人機領域&#xff0c;我們需要一步步開始研究。目前先去看看開源無人機代碼是尤為重要的&…

window11中開啟ubuntu22.04子系統

一、啟用Windows子系統 打開控制面板 選擇程序然后點擊“啟用或關閉Windows功能” 勾選如下2項&#xff0c;點擊確定 二、安裝內核升級包 打開鏈接https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi下載內核升級包&#xff0c;打開后安裝、重啟電腦…

80Qt窗口_對話框

目錄 5. 對話框 5.1 對話框介紹 用例1&#xff1a; 用例2&#xff1a; 用例3&#xff1a; 用例4&#xff1a; 5.2 對話框的分類 5.2.1 模態對話框 5.2.2 ?模態對話框 5. 對話框 5.1 對話框介紹 對話框是 GUI 程序中不可或缺的組成部分。?些不適合在主窗?實現的功…

Pyenv 跟 Conda 還有 Poetry 有什么區別?各有什么不同?

pyenv、Conda 和 Poetry 是 Python 生態中常用的工具&#xff0c;但它們的核心功能和用途不同&#xff0c;通常可以結合使用。以下是它們的區別和特點&#xff1a; 1. pyenv 用途&#xff1a;管理多個 Python 解釋器版本。 核心功能&#xff1a; 安裝不同版本的 Python&#x…

數學符號和標識中英文列表(含義與示例)

數學符號和標識的參考&#xff0c;涵蓋了數學的各個主要分支&#xff0c;并提供清晰的定義和示例&#xff0c;方便快速查找和學習收藏。 目錄 基礎數學符號幾何符號代數符號線性代數符號概率與統計符號集合論符號邏輯符號微積分與分析符號數字與字母符號 特點 中英對照&…

「Java流程控制」switch結構

知識點解析 1.switch結構的核心概念 switch語句是一種多分支選擇結構,它根據表達式的值來選擇執行不同的代碼塊。與if-else結構相比,switch更適合處理離散的、有限個值的比較。 2.switch結構的基本語法 switch (表達式) {case 值1:// 代碼塊1[break;]case 值2:// 代碼塊…

從0開始學習R語言--Day27--空間自相關

有的時候&#xff0c;我們在數據進行分組時&#xff0c;會發現用正常的聚類分析的方法和思維&#xff0c;分組的情況不是很理想。其實這是因為我們常常會忽略一個問題&#xff1a;假設我們正在分析的數據是真實的&#xff0c;那么它也肯定在一定程度上符合客觀規律。而如果我們…

Excel將表格文件由寬數據轉為長數據的方法

本文介紹基于Excel軟件的Power Query模塊&#xff0c;實現表格數據由寬數據轉為長數據的具體方法。 長數據和寬數據是數據分析中的2種基本數據組織形式&#xff0c;二者在結構、用途、適用場景等方面各有特點。其中&#xff0c;寬數據 &#xff08;Wide Format&#xff09;以“…

SpringAI + DeepSeek大模型應用開發 - 入門篇

三、SpringAI Spring AILangChain4jChat支持支持Function支持支持RAG支持支持對話模型1515向量模型1015向量數據庫1520多模態模型51JDK178 1. 對話機器人 1.1 快速入門 步驟①&#xff1a;引入依賴&#xff08;先去掉openai的starter依賴&#xff0c;因為要配置API_KEY&#…

ROS docker使用顯卡驅動rviz gazebo,以及接入外設和雷達

ROS docker使用顯卡驅動rviz gazebo&#xff0c;以及接入外設和雷達 由于我的電腦裝ubuntu22.04系統&#xff0c;想使用ros noetic開發&#xff0c;使用魚香ros一鍵安裝docker安裝。但是啟動dockek中rviz無法使用顯卡驅動&#xff0c;usb相機端口不顯示&#xff0c;網口雷達無…

ruoyi后端框架的mapper層復雜字段數據獲取問題

背景。如下是復雜字段。需要在mapper.java類注解中聲明autoResultMap true才會進行處理。前提是&#xff0c;創建后端程序代碼沒有添加mapp.xml文件。故用注解簡化代替。

產品推薦|一款具有單光子級探測能力的科學相機千眼狼Gloria 1605

在生命科學超分辨率成像、量子物理單光子探測、交叉領域單分子追蹤等應用場景中&#xff0c;具有單光子級探測能力的科學相機是科學實驗的關鍵設備。 千眼狼Gloria 1605采用16μm16μm大像元尺寸設計&#xff0c;基于Gpixel科學級背照式CMOS芯片&#xff0c;集成千眼狼底層圖像…

JS.Day2-堆選(Py)/三路快排-快速選擇-215,11,560,21,128,20,121

目錄 215.找第k大元素 三路的快速排序 快速選擇 法2.堆選 &#xff08;堆排序&#xff09; 11.盛更多水的容器 代碼1 代碼2 560.和為K的子數組&#xff08;題意&#xff01;&#xff09; 慣性思維 正解 21.合并生序鏈表 遞歸寫法 128.最長連續序列 20.有效的括號…

第8章 處理幾何圖形 面向 ArcGIS的Python腳本編程

一、折點坐標(.txt 或 .xlsx 或 .xls) > 點線面圖層(.shp) &#xff08;一&#xff09;.xlsx 或 .xls > .shp 新建一個文件夾&#xff0c;連接到該文件夾&#xff0c;并將其設置為工作空間 在該文件夾下&#xff0c;新建一個pts.xlsx的文件&#xff0c;并輸入下圖內容 …

使用(h3.js)繪制六角網格碼

今天來記錄一篇關于h3.js插件庫的使用&#xff0c;他可以很高效的計算出地球上某個經緯度坐標六邊形頂點。 前段時間領導突然給我個售前功能&#xff0c;要求是使用h3.js插件在地球上繪制出六邊形網格碼&#xff0c;本來以為挺棘手的&#xff0c;結果看完文檔后發現也挺簡單的…

GO 1.25

Go 1.25 發布說明&#xff08;草案&#xff09; Go 1.25 尚未發布。 本文檔是正在編寫中的發布說明。Go 1.25 預計于 2025 年 8 月發布。 語言變更 Go 1.25 中沒有影響 Go 程序的語法變更。然而&#xff0c;在語言規范中&#xff0c;“核心類型”&#xff08;core types&…