当前位置: 首页 > news >正文

Python知识分享第二十二天-数据结构入门

数据结构

“”"
基础概念:
程序 = 数据结构 + 算法
数据结构 = 存储和组织数据的方式.
算法 = 解决问题的思维, 思路, 方式.

算法的特性:独立性: 算法 = 思维, 是解决问题的思路和方式, 不依赖语言.5大特性: 有输入, 有输出, 有穷性, 确定性, 可行性.问: 如何衡量算法的优劣?
答: 时间复杂度.
例如: 下述的两个代码, 执行时长为: 代码的总步骤 * 每步的基本时间方式1: 1001³ * 9 * 每步的基本时间方式2: 1001² * 9 * 每步的基本时间虽然上述的方式可以计算代码执行时间, 但是我们在考虑算法的时间复杂度的时候, 只考虑 主要条件, 而会忽略次要条件.时间复杂度介绍:它适用于衡量算法的优劣的, 一般采用大O标记法, 把次要条件都忽略, 最终形成的表达式就叫: 大O标记法.名词解释:问题规模: 程序(算法)的计算量, 计算范围...主要条件: 随着问题规模变化而变化的代码.次要条件: 随着问题规模变化而不变的代码.计算方式:常数项: O(1)顺序结构: 加法分支结构: 最高次项循环结构: 乘法分析的时候, 只参考 主要条件, 忽略 次要条件 和 常数项.如果没有特殊说明的情况下, 我们分析时间复杂度, 指的都是: 最坏时间复杂度.最优时间复杂度: 最理想, 最乐观的状态, 算法需要的最少步骤.最坏时间复杂度: 算法的保证, 最多需要多少步能计算出结果.常用的时间复杂度介绍:从低到高分别是:常数阶 < 对数阶 < 线性阶 < 常数对数阶 < 平方阶 < 立方阶O(1) < O(logn) < O(n) < O(nlogn) < O(n²) < O(n³)空间复杂度(了解):概述: 算法执行过程中, 临时占用的内存空间大小.分类:O(1) < O(logn) < O(n) < O(n²) < O(n³)细节:内存是通过 字节 的形式来存储数据的, 每块空间都有自己的地址值. 

“”"

import time# 需求: 演示算法 -> 穷举法. 已知: a² + b² = c², 且 a + b + c = 1000, 问: a,b,c可以是哪些组合.
start = time.time()
# 方式1: 穷举法, 3层循环嵌套.
for a in range(0, 1001):for b in range(0, 1001):for c in range(0, 1001):# if a + b + c == 1000 and a ** 2 + b ** 2 == c ** 2:   # 122秒if a ** 2 + b ** 2 == c ** 2 and a + b + c == 1000:     # 235秒print(a, b, c)
end = time.time()
print(f'程序共执行了: {(end - start):.2f} 秒')     # 122.01秒# 方式2: 穷举法 + 代入法, 2层循环嵌套.
start = time.time()
# 方式1: 穷举法, 3层循环嵌套.
for a in range(0, 1001):for b in range(0, 1001):c = 1000 - a - bif a ** 2 + b ** 2 == c ** 2:print(a, b, c)
end = time.time()
print(f'程序共执行了: {(end - start):.2f} 秒')     # 0.34s

“”"
数据结构介绍:
概述:
数据结构 = 存储,组织属于的方式, 也是算法解决问题时的载体.
分类:
线性结构
非线性结构

线性结构:特点:每个节点有且只能有1个前驱节点(父节点) 和 1个后继节点(子节点)举例:栈, 队列, 链表...分类:顺序表:概述:采用 连续 的内存空间来存储.根据存储方式不同, 又分为:一体式存储: 信息区 和 数据区在一起.分离式存储: 信息区 和 数据区分开存储.扩容策略:一体式: 扩容时, 信息区和数据区整体搬迁.分离式: 只搬迁数据区, 然后用信息区重新关联即可.思路:方式1: 每次增加固定的容量, 假设: 每次扩容增加100个字节.       拿时间换空间.方式2: 每次扩容容量翻倍.                                  拿空间换时间(推荐做法).链表:概述:采用 非连续 的内存空间来存储.非线性结构:特点:每个节点都可以有多个前驱节点(父节点) 和 多个后继节点(子节点)举例:树图...

“”"

"""
链表介绍:概述:它属于数据结构的一种, 属于: 线性结构(每个节点都只能有1个前驱节点 和 1个后继节点)回顾: 顺序表的弊端扩容时要求有足够的连续的内存空间, 否则扩容失败.链表扩容:比较简单, 有地儿就行, 可以不连续, 最后通过"链条"连接起来.链表 = 通过 一条线把各个节点链接起来, 形成一个 链条就叫: 链表.组成:元素域(数值域) + 链接域(地址域)分类:单向链表:每个节点由 元素域(数值域) + 链接域(地址域), 前边节点的链接域指向后1个节点的地址, 最后1个节点的链接域为: None.单向循环链表:每个节点由 元素域(数值域) + 链接域(地址域), 前边节点的链接域指向后1个节点的地址, 最后1个节点的链接域为: 第1个节点的地址.双向链表:每个节点由 链接域(地址域) + 元素域(数值域) + 链接域(地址域),每个节点的链接域会分别指向: 前, 后节点的地址.第1个节点的: 前链接域(地址域) 和 最后1个节点的 后链接域(地址域)为 None双向循环链表:每个节点由 链接域(地址域) + 元素域(数值域) + 链接域(地址域),每个节点的链接域会分别指向: 前, 后节点的地址.第1个节点的: 前链接域(地址域) 指向最后1个节点的 地址.最后1个节点的 后链接域(地址域)指向第1个节点的 地址.需求:自定义代码, 采用面向对象思维, 模拟链表.
"""

“”"
案例: 自定义代码, 采用面向对象思维, 模拟: (单向)链表.

回顾:
链表 由节点组成, 节点 = 数值域(元素域) + 地址域(链接域)

分析:
节点类: SingleNode
属性:
item: 数值域(元素域)
next: 地址域(链接域)

链表类: SingleLinkedList属性:head: 指向头结点

“”"

# 定义节点类
class SingleNode(object):def __init__(self, item):self.item = itemself.next = None#定义链表类
class SingleLinkedList(object):def __init__(self, head=None):self.head = head# 判断链表为空def is_Empty(self):return self.head == None# 返回链表长度def length(self):cur = self.headcount = 0while cur is not None:count += 1cur = cur.nextreturn count# 遍历打印链表def travel(self):cur = self.headcount = 0while cur is not None:print(cur.item)cur = cur.next#  链表头部增加元素def add(self, item):new_node = SingleNode(item)new_node.next = self.headself.head = new_node# 链表尾部添加元素def append(self, item):new_node = SingleNode(item)if self.is_Empty():self.head = new_nodeelse:cur = self.headwhile cur.next is not None:cur = cur.nextcur.next = new_nodeif __name__ == '__main__':# 创建对象s1 = SingleLinkedList()# 测试判空函数print(s1.is_Empty())# 测试添加元素s1.add('坤坤')# 测试遍历元素s1.travel()# 测试在尾部添加数据s1.append('鸡叫')# 测试遍历元素s1.travel()

相关文章:

Python知识分享第二十二天-数据结构入门

数据结构 “”" 基础概念: 程序 数据结构 算法 数据结构 存储和组织数据的方式. 算法 解决问题的思维, 思路, 方式. 算法的特性:独立性: 算法 思维, 是解决问题的思路和方式, 不依赖语言.5大特性: 有输入, 有输出, 有穷性, 确定性, 可行性.问: 如何衡量算法的优劣?…...

【WRF理论第十三期】详细介绍 Registry 的作用、结构和内容

目录 1. Introduction&#xff1a;介绍 Registry 的作用和功能。2. Registry Contents&#xff1a;详细描述 Registry 的结构和内容&#xff0c;包括各个部分的条目类型。2.1. DIMSPEC ENTRIES&#xff08;维度规格条目&#xff09;2.2. STATE ENTRIES&#xff08;状态变量条目…...

Android启动优化指南

文章目录 前言一、启动分类与优化目标1、冷启动1.1 优化思路1.2 延迟初始化与按需加载1.3 并行加载与异步执行1.4 资源优化与懒加载1.5 内存优化与垃圾回收控制 2. 温启动2.1 优化应用的生命周期管理2.2 数据缓存与懒加载2.3 延迟渲染与视图优化 3. 热启动3.1 保持应用的状态3.…...

【ETCD】【源码阅读】configureClientListeners () 函数解析

逐步解析 configureClientListeners 函数 configureClientListeners 是 ETCD 的一个重要函数&#xff0c;用于配置客户端通信的监听器&#xff08;Client Listeners&#xff09;。这些监听器主要负责处理外部客户端与 ETCD 服务之间的通信&#xff0c;包括 HTTP 和 gRPC 请求。…...

IO进程学习笔记

man手册 普通命令。系统调用的函数。库函数。特殊文件。文件格式。游戏。附加的一些变量 IO介绍 I&#xff1a;input 输入 O&#xff1a;output 输出 对文件的输入和输出 输入-》写文件&#xff0c;将文件中的内容写到内存中去 输出-》读文件&#xff0c;将内存中的内容读取到文…...

智能手机回暖:华为点火,小米荣耀OV拱火

进入11月中下旬&#xff0c;智能手机圈再度热闹起来。包括华为、小米、OPPO、vivo等诸多手机厂商&#xff0c;都在陆续预热发布新机&#xff0c;其中就包括华为Mate 70、小米Redmi K80、vivo的S20&#xff0c;IQOO Neo10等热门新机&#xff0c;这些热门新机的集中上市迅速吸引了…...

Sqoop导入数据(mysql---->>hive)

目录 数据传输流程脚本报错和异常说明1. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf2. 数据导入hive后显示NULL 数据传输流程 mysql---->>hdfs---->>hive 数据从mysql表中取出&#xff0c;放到hdfs上&#xff08;由targ…...

实验3-实时数据流处理-Flink

1.前期准备 &#xff08;1&#xff09;Flink基础环境安装 参考文章&#xff1a; 利用docker-compose来搭建flink集群-CSDN博客 显示为这样就成功了 &#xff08;2&#xff09;把docker&#xff0c;docker-compose&#xff0c;kafka集群安装配置好 参考文章&#xff1a; …...

深度学习实验十四 循环神经网络(1)——测试简单循环网络的记忆能力

目录 一、数据集构建 1.1数据集的构建函数 1.2加载数据集并划分 1.3 构建Dataset类 二、模型构建 2.1嵌入层 2.2SRN层 2.3模型汇总 三、模型训练 3.1 训练指定长度的数字预测模型 3.2 损失曲线展示 四、模型评价 五、修改 附完整可运行代码 实验大体步骤&#x…...

k8s部署odoo18(kubeshpere面板)

Postgresql部署 链接: kubesphere搭建 postgres15 因为我的是在另一台服务器使用kubesphere进行部署的&#xff0c;如果有和我一样情况的&#xff0c;可以参考上面的文档部署postgreasql。 注意事项&#xff1a; 因为odoo不允许使用postgresql的默认用户&#xff0c;也就是po…...

【模型对比】ChatGPT vs Kimi vs 文心一言那个更好用?数据详细解析,找出最适合你的AI辅助工具!

在这个人工智能迅猛发展的时代&#xff0c;AI聊天助手已经深入我们的工作与生活。你是否曾在选择使用ChatGPT、Kimi或是百度的文心一言时感到一头雾水&#xff1f;每款AI都有其独特的魅力与优势&#xff0c;那么&#xff0c;究竟哪一款AI聊天助手最适合你呢&#xff1f;本文将带…...

Java——容器(单例集合)(上)

一 容器介绍 容器&#xff0c;是用来容纳物体、管理物体。生活中,我们会用到各种各样的容器。如锅碗瓢盆、箱子和包等 程序中的“容器”也有类似的功能&#xff0c;用来容纳和管理数据。比如&#xff0c;如下新闻网站的新闻列表、教育网站的课程列表就是用“容器”来管理 视频…...

如何配置Github并在本地提交代码

前提: 可以流畅访问github, 需要一些上网技巧, 这就自行处理了 申请一个github账号 Github官网地址 首先就是邮箱注册啦, github没有对邮箱的限制, 只要是能收邮件的就ok, qq邮箱, 163等都可以使用. 然后和普通注册账号一样, 一路填写需要的信息, 验证邮箱即可. 如何新增代…...

工作bug,keil5编译器,理解int 类型函数返回值问题,详解!!!

编写不易&#xff0c;禁止搬运&#xff0c;仅供学习&#xff0c;感谢理解 问题现象 下面是一个在keil5里面写的一个&#xff0c;int类型的返回值函数&#xff0c;这个函数里面&#xff0c;只有if else if else这三个判断条件语句&#xff0c;正常来说任何情况下&#xff0c;…...

简明速通Java接口

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文从代码层面直接整理Java接口 让老油子们无需再理解繁杂的概念了。 Java接口在代码层面是做什么的 说白了老铁&#xff0c;Java的接口就是一个类&#xff0c;这个类中只能声明属性和方法&#xff0c;属性需要…...

MVC基础——市场管理系统(二)

文章目录 项目地址三、Produtcts的CRUD3.1 Products列表的展示页面(Read)3.1.1 给Product的Model里添加Category的属性3.1.2 View视图里展示Product List3.2 增加Product数据(Add)3.2.1 创建ViewModel用来组合多个Model3.2.2 在_ViewImposts里引入ViewModels3.2.3 添加Add的…...

java------------常用API preiod duration 计算时间差

1&#xff0c;preiod 如果末天数比初天数小&#xff0c;需要进一位 package API;import java.time.LocalDate; import java.time.Period;public class preiod {public static void main(String[] args) {// 计算时间差// LocalDate获取对象其中的一个方法LocalDate d1 LocalD…...

使用 FAISS 进行高效相似性搜索:从文本检索到动态数据处理

在现代数据科学和人工智能应用中&#xff0c;处理大量高维数据并从中找到相似项是一个常见任务。无论是在推荐系统、搜索引擎&#xff0c;还是在自然语言处理应用中&#xff0c;如何高效地进行相似性搜索&#xff08;Similarity Search&#xff09;一直是一个挑战。为了解决这个…...

执行“go mod tidy”遇到“misbehavior”错误

执行“go mod tidy”报错下错误&#xff0c;执行“go clean -modcache”和删除“go env GOMODCACHE”指定目录均无效&#xff1a; SECURITY ERROR go.sum database server misbehavior detected!old database:go.sum database tree3397826xyyhzdyAOat5li/EXx/MK1gONQf3LAGqArh…...

深入详解人工智能机器学习:强化学习

目录 强化学习概述 强化学习的基本概念 定义 关键组件 强化学习过程 常用算法 应用示例 示例代码 代码解释 应用场景 强化学习核心概念和底层原理 核心概念 底层原理 总结 强化学习概述 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是机器学习中的…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...