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;即"云…