Python算法探索:从经典到现代(二)

一、引言

        Python作为一种高级编程语言,其简洁明了的语法和丰富的库资源,使得它成为算法实现的理想选择。本文将带您从经典算法出发,逐步探索到现代算法,感受Python在算法领域的魅力。


二、经典算法:贪心算法

  • 贪心算法是一种在每一步选择中都采取当前情况下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。

示例代码:背包问题

def knapsack(weights, values, capacity):  n = len(weights)  K = [[0 for w in range(capacity + 1)]  for i in range(n + 1)]  # Build table K[][] in bottom  # up manner  for i in range(n + 1):  for w in range(capacity + 1):  if i == 0 or w == 0:  K[i][w] = 0  elif weights[i - 1] <= w:  K[i][w] = max(values[i - 1]  + K[i - 1][w - weights[i - 1]],  K[i - 1][w])  else:  K[i][w] = K[i - 1][w]  return K[n][capacity]  # Test the function  
values = [60, 100, 120]  
weights = [10, 20, 30]  
capacity = 50  
print(knapsack(weights, values, capacity))  # Output: 220

三、现代算法:动态规划

  • 动态规划是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式来求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构特性的问题。

示例代码:斐波那契数列

def fibonacci(n):  dp = [0, 1] + [0] * (n - 1)  for i in range(2, n + 1):  dp[i] = dp[i - 1] + dp[i - 2]  return dp[n]  print(fibonacci(10))  # 输出:55

四、现代算法:分治算法

  • 分治算法是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。

示例代码:(归并排序)

def merge_sort(arr):  if len(arr) <= 1:  return arr  mid = len(arr) // 2  left = merge_sort(arr[:mid])  right = merge_sort(arr[mid:])  return merge(left, right)  def merge(left, right):  merged = []  left_index = 0  right_index = 0  while left_index < len(left) and right_index < len(right):  if left[left_index] <= right[right_index]:  merged.append(left[left_index])  left_index += 1  else:  merged.append(right[right_index])  right_index += 1  # 将剩余的元素添加到结果列表中  while left_index < len(left):  merged.append(left[left_index])  left_index += 1  while right_index < len(right):  merged.append(right[right_index])  right_index += 1  return merged  # 测试归并排序  
arr = [38, 27, 43, 3, 9, 82, 10]  
print(merge_sort(arr))  # 输出:[3, 9, 10, 27, 38, 43, 82]

五、现代算法:机器学习算法

  • 现代算法还包括了各种机器学习算法,如线性回归、逻辑回归、决策树、随机森林、支持向量机(SVM)、神经网络等。这些算法通常用于处理大数据集,并能够从数据中自动学习模型来进行预测或分类。

示例代码:(使用scikit-learn进行线性回归)

from sklearn.model_selection import train_test_split  
from sklearn.linear_model import LinearRegression  
from sklearn.metrics import mean_squared_error  
import numpy as np  # 假设我们有一些数据  
X = np.array([[1], [2], [3], [4], [5]])  
y = np.array([2, 4, 6, 8, 10])  # 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 创建线性回归模型  
model = LinearRegression()  # 训练模型  
model.fit(X_train, y_train)  # 预测测试集  
y_pred = model.predict(X_test)  # 计算均方误差  
mse = mean_squared_error(y_test, y_pred)  
print("Mean Squared Error:", mse)  # 使用模型进行预测  
print("Prediction for X = 6:", model.predict([[6]]))

        这只是算法世界中的冰山一角。随着技术的不断发展和数据量的不断增长,将会有更多高效和创新的算法被开发出来。Python作为一门灵活且强大的编程语言,将继续在算法实现和应用中扮演重要角色。

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

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

相关文章

[日常使用] Shell常用命令

Shell是什么&#xff1f; Shell简介 Shell是操作系统的外壳&#xff0c;是用户与操作系统内核之间的主要接口。它接收用户的命令并将其传递给内核执行&#xff0c;然后将执行结果返回给用户。Shell不仅是一个命令解释器&#xff0c;也是一种强大的编程语言。常见的Shell分为图…

【MySQL】-16 MySQL综合-2(MySQL的优点+MySQL5.7新特性+MySQL客户端和服务器端工具集)

MySQL的优点MySQL5.7新特性MySQL客户端和服务器端工具集 MySQL的优势&#xff08;优点&#xff09;MySQL 5.7的新特性1) 随机 root 密码2) 自定义 test 数据库3) 默认 SSL 加密4) 密码过期策略5) 用户锁6) 全面支持JSON7) 支持两类生成列&#xff08;generated column&#xff…

Web基础01-HTML+CSS

目录 一、HTML 1.概述 2.html结构解析 3.HTML标签分类 4.HTML标签关系 5.HTML空元素 6.HTML属性 7.常用标签 &#xff08;1&#xff09;HTML标签 &#xff08;2&#xff09;标题标签 &#xff08;3&#xff09;换/折行标签 &#xff08;4&#xff09;段落标签 &am…

开源软件:推动技术繁荣

目录 开源软件的影响力 开源软件的优点 开源软件如何推动技术创新 开源软件的商业模式 开源软件的安全风险 开源软件的未来发展趋势 开源软件的影响力 随着信息技术的快速发展&#xff0c;开源软件已经成为软件开发的趋势&#xff0c;并产生了深远的影响。开源软件的低成…

平常开发java项目时也没用序列化,没感觉到有啥影响呢,这是为什么?

平常开发java项目时也没用序列化&#xff0c;没感觉到有啥影响呢&#xff0c;这是为什么&#xff1f; 在日常的Java开发中&#xff0c;可能不会直接感受到序列化的存在&#xff0c;特别是在使用现代框架和技术栈时。这主要是因为很多底层细节已经由框架或库隐藏起来&#xff0…

<网络安全>《31 网络信息安全基础(2)中英术语整理》

A 01 高级持久威胁&#xff08;APT&#xff09; 一种网络攻击&#xff0c;使用复杂的技术持续对目标政府和公司进行网络间谍活动或其他恶意活动。通常由具有丰富专业知识和大量资源的对手进行-通常与民族国家参与者相关。 这些攻击往往来自多个入口点&#xff0c;并且可能使…

Django学习全纪录:Django视图和路由的配置,应用的创建以及注册

导言 在之前的文章中,我们已经将Django的环境部署完成,包括一些注意事项以及前期工作,都已经完成。这篇文章,我们就可以正式开始干活了。 学习目标 1、学习创建应用以及注册APP 2、初步认识视图和路由,以及编写简单的代码 3、启动应用观察变化 创建第一个应用(APP) …

发掘GPT-4商业创新的潜力

GPT-4在商业创新方面的应用潜力巨大&#xff0c;它能够基于庞大的训练数据集和强大的语言生成能力&#xff0c;协助企业或个人用户在多个商业场景中推动创新&#xff1a; 市场分析与战略规划&#xff1a;GPT-4可以对历史数据、行业趋势、竞争对手信息进行深度分析&#xff0c;并…

华为机考入门python3--(14)牛客14-字符串排序

分类&#xff1a;列表、排序 知识点&#xff1a; 字典序排序 sorted(my_list) 题目来自【牛客】 def sort_strings_by_lex_order(strings): # 使用内置的sorted函数进行排序&#xff0c;默认是按照字典序排序 sorted_strings sorted(strings) # 返回排序后的字符串列…

php基础学习之运算符(重点在连接符和错误抑制符)

运算符总结 在各种编程语言中&#xff0c;常用的运算符号有这三大类&#xff1a; 算术运算符&#xff1a;&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;%位运算符&#xff1a;&&#xff0c;|&#xff0c;^&#xff0c;<<&#xff0c;>>赋值运算符&…

洛谷C++简单题小练习day11—字母转换,分可乐两个小程序

day11--字母转换--2.14 习题概述 题目描述 输入一个小写字母&#xff0c;输出其对应的大写字母。例如输入 q[回车] 时&#xff0c;会输出 Q。 代码部分 #include<bits/stdc.h> using namespace std; int main() { char n;cin>>n;cout<<char(n-32)<…

代码+视频基于R语言进行K折交叉验证

我们在建立数据模型后通常希望在外部数据验证模型的检验能力。然而当没有外部数据可以验证的时候&#xff0c;交叉验证也不失为一种方法。交叉验验证&#xff08;交叉验证&#xff0c;&#xff23;&#xff36;&#xff09;则是一种评估模型泛化能力的方法&#xff0c;广泛应用…

尚硅谷最新Node.js 学习笔记(二)

目录 五、HTTP协议 5.1、概念 5.2、请求报文的组成 5.3、HTTP 的请求行 5.4、HTTP 的请求头 5.5、HTTP 的请求体 5.6、响应报文的组成 5.7、创建HTTP服务 操作步骤 测试 注意事项 5.8、浏览器查看 HTTP 报文 查看请求行和请求头 查看请求体 查看URL查询字符串 …

PHP脉聊交友系统网站源码,可通过广告变现社交在线聊天交友即时通讯APP源码,附带视频搭建教程

探索全新社交体验&#xff1a;一站式PHP交友网站解决方案 &#x1f310; 全球化交友&#xff0c;无界沟通 在数字化的浪潮下&#xff0c;社交已不再受地域限制。我们的PHP交友网站不仅支持多国语言&#xff0c;还配备了即时翻译功能&#xff0c;让您轻松跨越语言障碍&#xff…

编译OpenSSL时报错,Can‘t locate IPC/Cmd.pm in @INC

编译OpenSSL 3.0.1时报错&#xff0c;错误信息如下 解决方法&#xff1a; 安装perl-CPAN yum install -y perl-CPAN进入CPAN的shell模式&#xff0c;首次进入需要配置shell&#xff0c;按照提示操作即可&#xff08;本人perl小白&#xff0c;全部选择默认配置&#xff0c;高…

python3 中try 异常调试 raise 异常抛出

一、什么是异常&#xff1f; 异常即是一个事件&#xff0c;该事件会在程序执行过程中发生&#xff0c;影响了程序的正常执行。 一般情况下&#xff0c;在Python无法正常处理程序时就会发生一个异常。 异常是Python对象&#xff0c;表示一个错误。 当Python脚本发生异常时我…

山脉的个数/攀登者

题目描述 攀登者喜欢寻找各种地图&#xff0c;并且尝试攀登到最高的山峰。 地图表示为一维数组&#xff0c;数组的索引代表水平位置&#xff0c;数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如&#xff1a;[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0]&#xff0c;代表如下…

Github 2024-02-14 开源项目日报 Top9

根据Github Trendings的统计&#xff0c;今日(2024-02-14统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Rust项目4TypeScript项目1PowerShell项目1Java项目1JavaScript项目1Jupyter Notebook项目1非开发语言项目1Pyth…

使用知识图谱来表示普通操作系统实时操作系统以及物联网操作系统

在计算机科学领域&#xff0c;操作系统&#xff08;Operating System&#xff0c;OS&#xff09;是一种至关重要的软件&#xff0c;它管理计算机硬件和软件资源&#xff0c;为用户和应用程序提供交互界面。操作系统有多种类型&#xff0c;包括普通操作系统、实时操作系统&#…

Linux网络基础1

目录 计算机网络背景协议OSI七层模型TCP/IP五层&#xff08;四层&#xff09;模型网络传输基本流程以太网通信原理IP地址理解 计算机网络背景 到目前为止&#xff0c;我们之前所有的编程都是单机的&#xff0c;不是多机互联。以前计算机被发明的时候是为了军事用途&#xff0…