Python算法實戰:從排序到B+樹全解析

Python中常見的算法示例

以下是Python中常見的算法示例,涵蓋基礎算法和經典問題解決方案,代碼可直接運行:

排序算法

冒泡排序
def bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]
快速排序
def quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[len(arr)//2]left = [x for x in arr if x < pivot]middle = [x for x in arr if x == pivot]right = [x for x in arr if x > pivot]return quick_sort(left) + middle + quick_sort(right)

搜索算法

二分查找
def binary_search(arr, target):low, high = 0, len(arr)-1while low <= high:mid = (low + high) // 2if arr[mid] == target:return midelif arr[mid] < target:low = mid + 1else:high = mid - 1return -1

廣度優先搜索(BFS)
from collections import deque
def bfs(graph, start):visited = set()queue = deque([start])while queue:vertex = queue.popleft()if vertex not in visited:visited.add(vertex)queue.extend(graph[vertex] - visited)return visited


動態規劃

斐波那契數列(帶緩存)

def fib(n, memo={}):if n in memo: return memo[n]if n <= 2: return 1memo[n] = fib(n-1, memo) + fib(n-2, memo)return memo[n]

背包問題

def knapsack(W, wt, val, n):dp = [[0]*(W+1) for _ in range(n+1)]for i in range(1, n+1):for w in range(1, W+1):if wt[i-1] <= w:dp[i][w] = max(val[i-1] + dp[i-1][w-wt[i-1]], dp[i-1][w])else:dp[i][w] = dp[i-1][w]return dp[n][W]

圖算法

Dijkstra最短路徑

import heapq
def dijkstra(graph, start):distances = {node: float('inf') for node in graph}distances[start] = 0heap = [(0, start)]while heap:current_dist, node = heapq.heappop(heap)for neighbor, weight in graph[node].items():distance = current_dist + weightif distance < distances[neighbor]:distances[neighbor] = distanceheapq.heappush(heap, (distance, neighbor))return distances

字符串處理

KMP字符串匹配

def kmp_search(pattern, text):def build_lps(pattern):lps = [0] * len(pattern)length = 0for i in range(1, len(pattern)):while length > 0 and pattern[i] != pattern[length]:length = lps[length-1]if pattern[i] == pattern[length]:length += 1lps[i] = lengthreturn lpslps = build_lps(pattern)i = j = 0while i < len(text):if pattern[j] == text[i]:i += 1j += 1if j == len(pattern):return i - jelse:if j != 0:j = lps[j-1]else:i += 1return -1

數學算法

素數篩選(埃拉托斯特尼篩法)

def sieve_of_eratosthenes(limit):sieve = [True] * (limit+1)sieve[0] = sieve[1] = Falsefor num in range(2, int(limit**0.5)+1):if sieve[num]:sieve[num*num::num] = [False]*len(sieve[num*num::num])return [i for i, is_prime in enumerate(sieve) if is_prime]

其他經典算法

漢諾塔問題

def hanoi(n, source, target, auxiliary):if n > 0:hanoi(n-1, source, auxiliary, target)print(f"Move disk {n} from {source} to {target}")hanoi(n-1, auxiliary, target, source)

LRU緩存實現

from collections import OrderedDict
class LRUCache:def __init__(self, capacity):self.cache = OrderedDict()self.capacity = capacitydef get(self, key):if key not in self.cache: return -1self.cache.move_to_end(key)return self.cache[key]def put(self, key, value):if key in self.cache:self.cache.move_to_end(key)self.cache[key] = valueif len(self.cache) > self.capacity:self.cache.popitem(last=False)

以上示例覆蓋了排序、搜索、動態規劃、圖算法等核心領域,可根據實際需求調整參數和數據結構。每個算法均經過簡化以突出核心邏輯,實際應用時需考慮邊界條件和異常處理。

于Python中B+樹

以下是關于Python中B+樹實現的實用示例,涵蓋基礎操作、高級應用及優化場景。內容基于開源項目、算法書籍和實際工程案例整理,避免理論贅述,直接提供可運行的代碼片段。

基礎實現類

class BPlusTreeNode:def __init__(self, is_leaf=False):self.keys = []self.children = []self.is_leaf = is_leafself.next_leaf = None  # 用于葉子節點連接

插入操作

def insert(self, key, value):if not self.root:self.root = BPlusTreeNode(is_leaf=True)self.root.keys.append(key)self.root.children.append(value)returnleaf = self._find_leaf(key)self._insert_into_leaf(leaf, key, value)if len(leaf.keys) > self.order:self._split_leaf(leaf)

范圍查詢

def range_query(self, start, end):results = []leaf = self._find_leaf(start)while leaf:for i, key in enumerate(leaf.keys):if start <= key <= end:results.append(leaf.children[i])elif key > end:return resultsleaf = leaf.next_leafreturn results

磁盤持久化

def save_to_disk(self, filename):with open(filename, 'wb') as f:pickle.dump({'root': self.root,'order': self.order}, f)

實際應用場景示例

1. 數據庫索引
class DatabaseIndex:def __init__(self):self.bptree = BPlusTree(order=50)def add_record(self, pk, record):self.bptree.insert(pk, record)
2. 時間序列數據存儲
def store_time_series(timestamps, values):tree = BPlusTree(order=100)for ts, val in zip(timestamps, values):tree.insert(ts, val)return tree

3. 文件系統目錄
class FileSystemDir:def __init__(self):self.tree = BPlusTree(order=32)def add_file(self, filename, inode):self.tree.insert(filename, inode)


高級優化技巧

批量加載(Bulk Loading)
def bulk_load(sorted_items):tree = BPlusTree()leaves = []for i in range(0, len(sorted_items), tree.order):leaf = BPlusTreeNode(is_leaf=True)leaf.keys = sorted_items[i:i+tree.order][0]leaf.children = sorted_items[i:i+tree.order][1]leaves.append(leaf)_build_non_leaf_levels(leaves)

并發控制
from threading import Lockclass ConcurrentBPlusTree:def __init__(self):self.lock = Lock()self.tree = BPlusTree()def safe_insert(self, key, value):with self.lock:self.tree.insert(key, value)


完整實現參考

推薦以下開源項目:

  1. bplustree - 純Python實現
  2. pybtree - 帶磁盤存儲支持
  3. BPlusTree - 教學級清晰實現

每個項目包含完整的插入、刪除、搜索實現,以及性能測試案例。實際工程中建議直接使用這些成熟實現而非重復造輪子。


性能測試片段

import time
test_tree = BPlusTree(order=100)
start = time.time()
for i in range(100000):test_tree.insert(i, f"value_{i}")
print(f"Insert time: {time.time()-start:.2f}s")

特殊場景處理

變長鍵支持
def _compare_keys(a, b):if isinstance(a, str) or isinstance(b, str):return str(a) < str(b)return a < b
自定義序列化
def serialize_node(node):return {'is_leaf': node.is_leaf,'keys': pickle.dumps(node.keys),'children': pickle.dumps(node.children)}

以上示例覆蓋了B+樹在Python中的核心應用場景,可根據具體需求組合使用。實際開發時需注意:

  • 節點大小與磁盤頁對齊(通常4KB)
  • 內存緩沖層設計
  • 并發訪問時的鎖粒度控制

完整工程實現建議參考PostgreSQL或MySQL的B+樹索引源碼。

Python操作PostgreSQL的實用示例

以下是使用Python操作PostgreSQL的實用示例,涵蓋連接、CRUD、事務管理等常見操作。假設已安裝psycopg2庫(可通過pip install psycopg2安裝)。


基礎連接與配置

連接PostgreSQL數據庫
import psycopg2
conn = psycopg2.connect(host="localhost",database="testdb",user="postgres",password="yourpassword"
)
cursor = conn.cursor()
使用環境變量管理連接參數
import os
from psycopg2 import connect
conn = connect(host=os.getenv("DB_HOST"),database=os.getenv("DB_NAME"),user=os.getenv("DB_USER"),password=os.getenv("DB_PASS")
)

檢查連接狀態
print(conn.closed)  # 0表示連接正常

使用上下文管理器自動關閉連接
with psycopg2.connect(**params) as conn:with conn.cursor() as cursor:cursor.execute("SELECT version()")print(cursor.fetchone())

配置連接池(需psycopg2.pool
from psycopg2 import pool
connection_pool = pool.SimpleConnectionPool(minconn=1,maxconn=10,**params
)
conn = connection_pool.getconn()


表操作

創建表
cursor.execute("""CREATE TABLE IF NOT EXISTS users (id SERIAL PRIMARY KEY,name VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE)
""")
conn.commit()

刪除表
cursor.execute("DROP TABLE IF EXISTS temp_data")
conn.commit()

添加列
cursor.execute("ALTER TABLE users ADD COLUMN age INTEGER")
conn.commit()

創建索引
cursor.execute("CREATE INDEX idx_user_email ON users(email)")
conn.commit()

查看所有表
cursor.execute("""SELECT table_name FROM information_schema.tables WHERE table_schema='public'
""")
print(cursor.fetchall())


CRUD操作

插入單條數據
cursor.execute("INSERT INTO users (name, email) VALUES (%s, %s)",("Alice", "alice@example.com")
)
conn.commit()

批量插入
data = [("Bob", "bob@test.com"), ("Charlie", "charlie@test.com")]
cursor.executemany("INSERT INTO users (name, email) VALUES (%s, %s)",data
)
conn.commit()

查詢數據
cursor.execute("SELECT * FROM users WHERE name LIKE %s", ("A%",))
rows = cursor.fetchall()
for row in rows:print(row)

更新數據
cursor.execute("UPDATE users SET email = %s WHERE id = %s",("new_email@test.com", 1)
)
conn.commit()

刪除數據
cursor.execute("DELETE FROM users WHERE id = %s", (5,))
conn.commit()

帶返回值的INSERT
cursor.execute("""INSERT INTO users (name, email) VALUES (%s, %s) RETURNING id
""", ("Dave", "dave@test.com"))
new_id = cursor.fetchone()[0]
print(f"New record ID: {new_id}")


高級查詢

分頁查詢
page = 2
limit = 10
offset = (page - 1) * limit
cursor.execute("SELECT * FROM users ORDER BY id LIMIT %s OFFSET %s",(limit, offset)
)

使用JOIN查詢
cursor.execute("""SELECT u.name, o.order_date FROM users u JOIN orders o ON u.id = o.user_id
""")

聚合函數
cursor.execute("""SELECT COUNT(*), AVG(age) FROM users WHERE age > 18
""")
count, avg_age = cursor.fetchone()

事務處理
try:cursor.execute("INSERT INTO table1 VALUES (%s)", (value1,))cursor.execute("UPDATE table2 SET col1 = %s", (value2,))conn.commit()
except:conn.rollback()

使用WITH子句(CTE)
cursor.execute("""WITH active_users AS (SELECT * FROM users WHERE last_login > NOW() - INTERVAL '30 days')SELECT COUNT(*) FROM active_users
""")

查看表結構
cursor.execute("""SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'users'
""")
print(cursor.fetchall())

數據類型處理

處理JSON數據
import json
data = {"key": "value"}
cursor.execute("INSERT INTO config (config_data) VALUES (%s)",(json.dumps(data),)
)

處理數組類型
cursor.execute("INSERT INTO products (tags) VALUES (%s)",(['electronics', 'gadgets'],)
)

處理日期時間
from datetime import datetime
cursor.execute("INSERT INTO events (event_name, event_date) VALUES (%s, %s)",("Meeting", datetime.now())
)

處理二進制數據
with open('image.png', 'rb') as f:cursor.execute("INSERT INTO images (name, data) VALUES (%s, %s)",("logo", f.read()))


性能優化

使用PREPARE語句
cursor.execute("PREPARE userplan AS SELECT * FROM users WHERE id = $1")
cursor.execute("EXECUTE userplan (1)")

大批量數據COPY
with open('data.csv', 'w') as f:cursor.copy_expert("COPY users TO STDOUT WITH CSV HEADER", f)

使用EXPLAIN分析查詢
cursor.execute("EXPLAIN ANALYZE SELECT * FROM users")
print(cursor.fetchall())

設置超時參數
cursor.execute("SET statement_timeout TO 1000")  # 毫秒
監控長時間運行查詢
cursor.execute("""SELECT pid, query, now() - query_start AS duration FROM pg_stat_activity WHERE state = 'active'
""")

維護與監控

備份數據庫(需pg_dump)
import subprocess
subprocess.run(["pg_dump", "-U", "postgres", "-d", "dbname", "-f", "backup.sql"])
查看鎖信息
cursor.execute("""SELECT locktype, relation::regclass, mode FROM pg_locks WHERE relation = 'users'::regclass
""")
查看數據庫大小
cursor.execute("SELECT pg_size_pretty(pg_database_size(current_database()))")
print(cursor.fetchone())
清理數據庫
cursor.execute("VACUUM FULL ANALYZE")
conn.commit()
查看擴展列表
cursor.execute("SELECT * FROM pg_available_extensions")
print(cursor.fetchall())

以上示例覆蓋了PostgreSQL的常見使用場景。實際應用中需根據業務需求調整參數和安全措施(如使用參數化查詢防止SQL注入)。

Python在AI中實例

Python在AI中的應用方法

Python是人工智能領域的主流語言,擁有豐富的庫和框架支持。其簡潔語法和強大生態使其成為開發機器學習、深度學習等AI項目的首選。

常用Python AI庫與框架

TensorFlow與PyTorch

  • TensorFlow由Google開發,適合大規模分布式訓練和生產部署,提供Keras高層API簡化開發
  • PyTorch由Facebook維護,動態計算圖更靈活,研究領域使用廣泛
# PyTorch示例
import torch
model = torch.nn.Sequential(torch.nn.Linear(8, 32),torch.nn.ReLU(),torch.nn.Linear(32, 1)
)

Scikit-learn

  • 提供經典機器學習算法實現
  • 包含數據預處理、模型評估工具
  • 適合中小規模結構化數據
from sklear

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

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

相關文章

【C++算法】85.BFS解決最短路徑問題_最小基因變化

文章目錄題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;題目鏈接&#xff1a; 433. 最小基因變化 題目描述&#xff1a; 解法 先看懂題目 先把這個問題轉化&#xff1a;圖論問題 邊權為1的最短路問題。 為什么可以這么想&#xff1f;&#xff01; 因為每…

基于單片機汽車少兒安全預警系統

文章目錄一、前言1.1 項目介紹【1】項目開發背景【2】設計實現的功能【3】項目硬件模塊組成【4】設計意義【5】市面上同類產品研究現狀【6】摘要1.2 設計思路1.3 系統功能總結1.4 開發工具的選擇【1】設備端開發【2】上位機開發1.5 模塊的技術詳情介紹1.6 框架圖框架圖說明&…

Mac 上配置jdk 環境變量

核心步驟是設置 JAVA_HOME 變量&#xff0c;并將其 bin 目錄添加到系統的 PATH 變量中。 macOS 從 Catalina (10.15) 版本開始&#xff0c;默認的終端 Shell 從 bash 切換到了 zsh。因此&#xff0c;你需要先確定你正在使用的 Shell&#xff0c;然后編輯對應的配置文件。步驟一…

硬件-音頻學習DAY1——音箱材料選擇:密度板為何完勝實木

每日更新教程&#xff0c;評論區答疑解惑&#xff0c;小白也能變大神&#xff01;" 目錄 一.音箱材料選擇的關鍵因素 二.密度板的聲學優勢 三.材料穩定性的對比 四.生產工藝的適應性 五.成本與環保的平衡 六.特殊場景的例外情況 七.消費者選購指南 八.行業發展趨勢…

微波(Microwave)與毫米波(Millimeter wave)簡介

一、電磁波頻段劃分&#xff0c;微波與毫米波所屬 二、微波 可以看出UHF及以上的頻段都可以統稱為微波。記得之前上微波技術實驗課的時候會接觸比巴掌還大的金屬波導&#xff0c;后來每次看到微波技術的時候都還是感到陌生。今天突然想到&#xff0c;不像在手機里就能完成的5G頻…

ObjectMapper教程

ObjectMapper 簡介ObjectMapper 是 Jackson 庫的核心類&#xff0c;用于 Java 對象與 JSON 數據之間的相互轉換。它支持序列化&#xff08;對象轉 JSON&#xff09;和反序列化&#xff08;JSON 轉對象&#xff09;&#xff0c;廣泛應用于 REST API、數據存儲和配置處理等場景。…

【Node.js安裝注意事項】-安裝路徑不能有空格

問題描述&#xff1a;在項目中使用 nodemon時&#xff0c;出現了nodemon 啟動問題&#xff1a;nodemon : 無法將“nodemon”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。解決辦法&#xff1a;在網上找了很多教程&#xff0c;試了很多辦法&#xff0c;什么重新配置環境…

Shader開發(六)什么是著色器

在前面的章節中&#xff0c;我們簡要提到了著色器的概念&#xff0c;現在有了渲染管線的基礎知識&#xff0c;我們可以更深入地理解著色器的真正含義。著色器&#xff08;Shader&#xff09;是運行在圖形處理單元&#xff08;GPU&#xff09;上的專用程序&#xff0c;這與我們日…

操作系統-lecture4(進程的調度)

進程的切換 接下來需要了解兩個問題 誰觸發了進程切換進程切換的動作 中斷技術 中斷源 中斷處理過程&#xff08;陷阱機制&#xff09; 特權指令和非特權指令 Privileged Instructions&#xff1a;特權指令 ?The Instructions that can run only in Kernel Mode are called…

機器人程序優化

機器人程序優化核心摘要 本視頻詳細講解了機器人程序優化的方法與實踐&#xff0c;旨在提高程序的可讀性和復用性。通過學習文件夾、子程序調用以及路點優化等核心概念&#xff0c;觀眾將掌握如何將復雜的機器人搬運程序進行結構化整理&#xff0c;使其更易于理解、調試和在不…

一套視頻快速入門并精通PostgreSQL

PostgreSQL從入門到精通系列PostgreSQL數據庫是一個對理論知識與操作能力并重的技術&#xff0c;想要快速入門PostgreSQL數據庫&#xff0c;這兩個方面都要重視。這里的PostgreSQL從入門到精通&#xff0c;是專門針對剛入門的新手小白而錄制的一套&#xff0c;有理論講解也有動…

供應商管理系統有哪些功能?

在企業供應鏈數字化體系中&#xff0c;供應商管理系統是連接企業與外部合作伙伴的核心樞紐。以鯨采云采購管理系統的供應商模塊為例&#xff0c;其功能設計圍繞 “全生命周期管理 風險防控 協同效率” 三大核心&#xff0c;通過技術手段解決傳統供應商管理中的信息碎片化、流…

新手向:國內外大模型體驗與評測

國內外大模型體驗與評測技術詳解 近年來,人工智能領域的大模型技術取得了突破性進展,以GPT-4、Claude、文心一言等為代表的大語言模型(LLM)已經成為行業熱點。國內外科技巨頭紛紛布局這一賽道:國外有OpenAI的GPT系列、Anthropic的Claude、Google的PaLM,國內則有百度的文…

深度解讀 CSGHub:開源協議、核心功能與產品定位

在大模型時代&#xff0c;“可用”不再足夠&#xff0c;企業更需要“可管”、“可控”、“可演進”的一體化解決方案。作為國產開源陣營的中堅力量&#xff0c;CSGHub 如何從“開源與協議”到“功能定位”層層打磨&#xff0c;滿足不同行業對合規、安全和靈活部署的訴求&#x…

本土化DevOps實踐新篇章:Gitee引領企業高效協作新時代

本土化DevOps實踐新篇章&#xff1a;Gitee引領企業高效協作新時代 在數字化轉型的浪潮席卷全球的當下&#xff0c;軟件開發與運維的協同效率已經成為決定企業競爭力的關鍵因素。隨著國內企業對于數據安全和合規性的要求日益嚴格&#xff0c;尋找一套既符合本土監管要求又能提升…

B樹、B+樹、紅黑樹區別

一、核心概念與性質對比1. B樹&#xff08;Balanced Tree&#xff09;定位&#xff1a;多路平衡搜索樹&#xff0c;專為磁盤存儲優化核心性質&#xff1a;每個節點存儲 k-1個鍵值和k個子節點指針&#xff08;m/2 ≤ k ≤ m&#xff0c;m為階數&#xff09;所有葉子節點位于同一…

Spring AI 使用阿里百煉平臺實現流式對話:基于 SSE 的實踐

Spring AI阿里百煉平臺實現流式對話&#xff1a;基于 SSE 的實踐指南 在大模型應用開發中&#xff0c;流式對話是提升用戶體驗的關鍵特性。本文將詳細介紹如何利用 Spring AI 結合 Spring Boot&#xff0c;基于 SSE&#xff08;Server-Sent Events&#xff09;協議實現高效的流…

Ubuntu lamp

Ubuntu lamp 前言 在Ubuntu安裝lamp架構 我們了解到 lamp是完整的架構 我們前面了解到了 集合了Linux系統 apache MySQL 和PHP語言的完整架構 我們前面說了Centos7中編譯安裝 lamp 那么 我們去說一下在Ubuntu中安裝 ? ? 安裝apache2 ? apt直接安裝apache2 apt -y install a…

開源向量LLM - Qwen3-Embedding

1 Qwen3-Embedding介紹 Qwen3-Embedding遵循 Apache 2.0 許可證&#xff0c;模型大小從0.6B到8B&#xff0c;支持32k長文本編碼。 Model TypeModelsSizeLayersSequence LengthEmbedding DimensionMRL SupportInstruction AwareText EmbeddingQwen3-Embedding-0.6B0.6B2832K10…

云計算服務模式全解析:IaaS、PaaS、SaaS與DaaS的區別與應用

一、云計算概述 云計算是一種通過互聯網提供計算服務的模式&#xff0c;其核心特點是輸入/輸出與計算不在同一主機上。一個完整的云計算環境由云端&#xff08;計算設備&#xff09;、計算機網絡和終端&#xff08;輸入/輸出設備&#xff09;三部分組成&#xff0c;即"云…