[Python]算法 & 数据结构

python开发之算法&数据结构(一) python开发之算法入门一、算法基础1. 时间复杂度2. 空间复杂度3. 递归二、列表查找1. 顺序查找1.1 代码实现1.2 时间复杂度(O(n))2. 二分查找2.1 查找过程2.2 代码实现2.3 时间复杂度(O(logn))三、排序lowB三人组1. 冒泡排序1.1 排序过程1.2 代码实现1.3 时间复杂度(O(n²)) 一、算法基础 1. 时间复杂度 在计算机科学中,时间复杂性,又称... 阅读详情

0 一些定义

  • 什么是数据结构:存储、组织数据的方式
  • 什么是算法:为了满足业务需求、实现业务目的的各种方法和思路
  • 程序=算法+数据结构

1 算法

  • 算法的特性:
    • 独立性:独立于编程语言Python
    • 五大特性:
      • 有输入:>=0
      • 有输出:>0
      • 有穷性:执行有限步
      • 可行性:每一步都能执行
      • 确定性:每一步都有确定的意义

1.1 时间复杂度

  • 时间复杂度表示一个算法随着问题规模不断变化的最主要趋势。
  • 时间效率:算法的总执行步数。
  • 时间复杂度T(n):时间效率中主趋势O()

1.1.1 时间复杂度的计算规则

  • 基本操作:时间复杂度为O(1)
  • 顺序结构:时间复杂度按加法进行计算
  • 循环结构:时间复杂度按乘法进行计算
  • 分支结构:时间复杂度取最大值
  • 判断一个算法的效率时,只需要关注操作数量的最高次项,其他次要项和常数项可以忽略
  • 没有特殊说明,时间复杂度指最坏时间复杂度
# 时间复杂度为O(1)
def f():
    a=100
    b=200
    c=a+b

# 时间复杂度为O(n)
def f(n):
    for i in range(0,n):
        print(i)

# 时间复杂度为O(n),而不是O(2n)
def f(n):
    for j in range(0,2):
        for i in range(0,n):
            print(i)

1.1.2 最优最坏时间复杂度

  • 最优时间复杂度:最少需要多少基本操作。反映最乐观理想的情况,无参考价值。
  • 最坏时间复杂度:最多需要多少基本操作。主要关注的情况。
  • 平均时间复杂度:平均需要多少基本操作。

1.1.3 常见时间复杂度

  • o(1) :基本操作

  • o(logn): 一层循环,二分法

  • o(n): 一层循环

  • o(nlogn) 一层循环+二分法

  • o(n2):二层循环

  • o(n3):三层循环

执行次数函数举例 阶 非正式术语
12 O(1) 常数阶
2n+3 O(n) 线性阶
3n2+2n+1 O(n2) 平方阶
5log2n+20 O(logn) 对数阶
6n3+2n2+3n+4 O(n3) 立方阶

# 时间复杂度为O(log n)
def func(n):
    i=1
    while i<n:
        i*=2
        print(i)

1.2 空间复杂度

算法在运行过程中临时占用存储空间的大小的度量S(n)。

常见的空间复杂度:

  • o(1) : 常量

  • o(logn): list 二分法

  • o(n): list

  • o(nlogn)

  • o(n2): 矩阵

  • o(n3): 三维数据

1.2.1 常数阶O(1)

普通常量、变量、对象、元素数量与输入数据大小N无关的集合

# 空间复杂度为O(1)
for i in range(n):
    a=i
    print(a)

1.2.2 线性阶O(n)

元素数量与n呈线性关系的任一类型集合(一维数组、链表等),均使用线性大小的空间。

# 空间复杂度为O(n)
list1=[]
for i in range(n):
    list1.append(i)

1.2.3 平方阶O(n2)

元素数量与n呈平方关系的任一类型集合(矩阵),使用平方大小的空间。

# 以下代码循环了n次,但是使用的临时空间list1会随n的变化进行平方增长,空间复杂度为O(n2)
list1=[]
for i in range(n):
    list2=[]
    for j in range(n):
        list2.append(j)
    list1.append(list2)

2 数据结构

python开发之算法&数据结构(三) python开发之查找与排序(三)一、基于桶排序思想1. 计数排序1.1 排序过程1.2 排序优化1.3 代码实现1.4 时间复杂度(O(n+k))1.5 空间复杂度(O(n+k))2. 基数排序2.1 排序过程2.2 代码实现2.3 时间复杂度(O(d(n+k)))2.4 空间复杂度(O(n+k))3. 桶排序3.1 排序过程3.2 代码实现3.3 时间复杂度(O(N+N\*logN-N\*lo... 阅读详情

相关推荐

NXP(imx8qxp)系列DDR校准以及android镜像烧录

文章目录一、 不得不吐槽以下nxp的这个代码镜像烧写的过程,做得太开源了,导致镜像根本烧录不进去,实属令人头痛。 一、

永不秃头的程序员的博客 5993

FunASR与FreeSWITCH融合实战:从零构建高精度语音质检系统

本文详细介绍了如何将FunASR与FreeSWITCH融合,构建高精度语音质检系统。通过实时语音听写技术,结合热词定制和多模型切换,实现客服中心等场景的自动化质检,显著提升识别准确率和效率。系统架构涵盖音频采集、识别处理和业务应用三层,支持负载均衡和性能优化,适用于工业级部署。

weixin_29198045的博客 980

AD2428与SigmaStudio:从节点自动配置与EEPROM存储实战

本文详细介绍了AD2428 A2B收发器与SigmaStudio开发环境的集成应用,重点讲解从节点自动配置与EEPROM存储的实战流程。通过硬件连接、属性配置、数据导出及嵌入式系统集成等步骤,实现设备上电自启动,提升汽车音频系统的可靠性与部署效率。

g8f9d0s1a2的博客 653

WRF移动嵌套结合伏羲模型与CFD(PALM)高精度多尺度降尺度分析研究

WRF移动嵌套(Moving Nesting):动态调整高分辨率嵌套网格位置,追踪天气系统(如台风、强对流系统)以提高局地预报精度。伏羲(Fuxi)模型:国产数值模式,提供对WRF模拟的初始及边界条件优化。CFD(Computational Fluid Dynamics)PALM模型:精细化局地流场、湍流、温度分布。

m0_57411304的博客 1717

从零开始:如何利用Device Monitoring Studio构建高效数据监控系统

本文详细介绍了如何利用HHD Device Monitoring Studio从零开始构建高效数据监控系统。涵盖基础架构设计、核心功能解析、实战部署指南及高级数据分析技术,帮助用户实现非侵入式监控,提升设备调试和网络协议分析效率。特别适合物联网和工业自动化领域的开发者与运维人员。

weixin_29201859的博客 329

通过两个mark点确定某一个点的位置

read_image (Image0, '0.bmp') binary_threshold (Image0, Region, 'max_separability', 'dark', UsedThreshold) connection (Region, ConnectedRegions) fill_up (ConnectedRegions, RegionFillUp) select_shape_std (RegionFillUp, SelectedRegions, 'max_area', 70) red...

优快云博客 3889

OpenHarmony深度定制:从系统到模块的全景剖析与自定义模块实战

目标:在中新增一个算法库,让产品可直接调用。关闭不用的 20+ 系统部件,ROM 缩小 50 %;为自家芯片新增专用驱动模块,快速点亮开发板;内将核心算法库以部件形式集成,实现商业闭源。万物互联时代,差异化才是护城河。

m0_67505153的博客 1044

【硬件的单元测试 UT 3】PCIe 3.0及信号完整性测试方法

PCIe标准自从推出以来,1代和2代标准已经在PC和Server上逐渐普及,用于满足高速显卡、高速存储设备对于高速数据传输的要求。出于支持更高总线数据吞吐率的目的,PCI-SIG组织在2010年制定了PCIe 3.0,即PCIe 3代的规范,数据速率达到8Gbps。

qq_43416206的博客 1416

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: [Python]使用生成器节约内存
下一篇: [Python]浅拷贝&深拷贝
Letmooning
博客等级 码龄2年 503粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值