【第一天】零基础入门刷题Python-算法篇-数据结构与算法的介绍(持续更新)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、Python数据结构与算法的详细介绍
    • 1.基本概念
    • 2.Python中的数据结构
      • 1. 列表(List)
      • 2. 元组(Tuple)
      • 3. 字典(Dictionary)
      • 4. 集合(Set)
      • 5. 字符串(String)
    • 3.Python中的常用算法
      • 1. 排序算法
      • 2. 搜索算法
      • 3. 递归算法
      • 4. 动态规划
      • 5. 贪心算法
      • 6. 分治算法
      • 7. 回溯算法
      • 8. 图论算法
      • 9. 字符串算法
    • 4.算法的时间复杂度和空间复杂度
      • 1. 时间复杂度
      • 2. 空间复杂度
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

第一天Python数据结构与算法的详细介绍
第二天五种常见的排序算法
第三天两种常见的搜索算法
第四天两种常见的递归算法
第五天一种常见的动态规划算法
第六天一种常见的贪心算法

提示:以下是本篇文章正文内容,下面案例可供参考

一、Python数据结构与算法的详细介绍

1.基本概念

数据结构:是指计算机中存储和组织数据的方式。不同的数据结构适用于不同的应用场景,选择合适的数据结构可以显著提高程序的运行效率。数据结构涵盖数据内容、数据之间关系和数据操作方法,具有以下设计目标:

  • 空间占用尽量少,以节省计算机内存。
  • 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。
  • 提供简洁的数据表示和逻辑信息,以便算法高效运行。

算法:是指完成特定任务的一系列步骤或规则,它在有限时间内解决特定问题的一组指令或操作步骤。算法具有以下特性:

  • 问题是明确的,包含清晰的输入和输出定义。
  • 具有可行性,能够在有限步骤、时间和内存空间下完成。
  • 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。

数据结构与算法高度相关、紧密结合,具体表现在以下三个方面:

  • 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。
  • 算法是数据结构发挥作用的舞台。数据结构本身仅存储数据信息,结合算法才能解决特定问题。
  • 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。

2.Python中的数据结构

Python内置了多种数据结构,涵盖了常见的线性和非线性数据结构。以下是Python中一些主要的数据结构

1. 列表(List)

  1. 列表(List):Python中最常用的内置数据结构之一,可以存储任意类型的元素,并且支持动态调整大小。 创建列表:my_list = [](空列表)或my_list = [1, 2, 3, 4, 5](包含元素的列表)。
    列表操作:添加元素my_list.append(6)、删除元素my_list.remove(3)、访问元素print(my_list[2])、列表切片print(my_list[1:4])。

2. 元组(Tuple)

  1. 元组(Tuple):不可变的序列,创建后不能修改。元组通常用于存储固定数量的元素。 创建元组:my_tuple = ()(空元组)或my_tuple = (1, 2, 3, 4, 5)(包含元素的元组)。
    元组操作:访问元素print(my_tuple[2])、元组切片print(my_tuple[1:4])。

3. 字典(Dictionary)

  1. 字典(Dictionary):键值对数据结构,支持快速查找、插入和删除操作。 创建字典:my_dict = {}(空字典)或my_dict = {‘name’: ‘Alice’, ‘age’: 25, ‘city’: ‘New York’}(包含键值对的字典)。
    字典操作:添加或更新键值对my_dict[‘age’] = 26、删除键值对del
    my_dict[‘city’]、访问值print(my_dict[‘name’])、遍历字典for key, value in
    my_dict.items(): print(f’{key}:{value}')。

4. 集合(Set)

  1. 集合(Set):无序的、不可重复的数据结构,支持集合运算如交集、并集和差集。 创建集合:my_set = set()(空集合)或my_set
    = {1, 2, 3, 4, 5}(包含元素的集合)。 集合操作:添加元素my_set.add(6)、删除元素my_set.remove(3)、集合运算(如并集my_set.union(other_set)、交集my_set.intersection(other_set)、差集my_set.difference(other_set))。

5. 字符串(String)

  1. 字符串(String):有序字符集合,支持多种字符串操作,如拼接、切片、查找等。
    此外,Python还支持其他更复杂的数据结构,如栈(Stack)、队列(Queue)、树(Tree)、图(Graph)等。

3.Python中的常用算法

以下是Python中的一些常用算法:

1. 排序算法

  1. 排序算法:将一组数据按特定顺序排列。常见的排序算法有冒泡排序、选择排序、插入排序、快速排序和归并排序等。
  • 冒泡排序:通过重复遍历要排序的数列,比较相邻元素的值,若发现逆序则交换,直到没有逆序为止。时间复杂度为O(n^2),空间复杂度为O(1)。
  • 选择排序:每次从未排序部分选择最小(或最大)元素,放到已排序部分的末尾。时间复杂度O(n^2),空间复杂度O(1)。
  • 插入排序:将每个新元素插入到已排序部分的适当位置。时间复杂度O(n^2)(最坏情况),空间复杂度O(1)。
  • 快速排序:选择一个基准元素,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,以达到整个数据变成有序序列。时间复杂度为O(n
    log n),空间复杂度为O(log n)(递归栈空间)。
  • 归并排序:采用分治法,将数组分成两半,递归排序后合并。时间复杂度O(n log n),空间复杂度O(n)(需要额外空间合并)。

2. 搜索算法

  1. 搜索算法:在数据集中查找特定元素。常见的搜索算法有线性搜索和二分搜索等。
  • 线性搜索:从数据集的第一个元素开始,依次比较每个元素,直到找到目标元素或搜索完整个数据集为止。时间复杂度为O(n),空间复杂度为O(1)。
  • 二分搜索:要求数据集必须是有序的,通过不断将搜索范围减半来查找目标元素。时间复杂度为O(log n),空间复杂度为O(1)。

3. 递归算法

  1. 递归算法:函数调用自身来解决问题的编程技巧。递归通常用于分治法、树和图的遍历等。
  • 斐波那契数列:通过递归调用自身来计算斐波那契数列的第n项。时间复杂度为O(2^n),空间复杂度为O(n)(递归栈空间)。
  • 阶乘:通过递归调用自身来计算一个数的阶乘。时间复杂度为O(n),空间复杂度为O(n)(递归栈空间)。

4. 动态规划

  1. 动态规划:解决最优化问题,通过将问题分解为子问题,并记录子问题的解以避免重复计算。时间复杂度和空间复杂度依具体问题而定,但通常较低于朴素递归解法。

5. 贪心算法

  1. 贪心算法:在每一步选择中都采取最好或最优(即最有利)的选择,从而希望能够导致结果是全局最好或最优的算法。时间复杂度依具体问题而定。

6. 分治算法

  1. 分治算法
    将问题划分为几个规模较小的子问题分别解决,然后将子问题的解合并得到原问题的解。快速排序和归并排序是分治算法的典型例子。

7. 回溯算法

  1. 回溯算法:通过搜索所有可能的候选解来找出所有解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化来丢弃该解,即“回溯”并尝试另一个可能的候选解。时间复杂度通常很高,因为需要探索所有可能的解空间。

8. 图论算法

  1. 图论算法
  • 深度优先搜索(DFS)
    用途:用于图的遍历或路径查找。
    时间复杂度:O(V+E),其中V是顶点数,E是边数。
    空间复杂度:O(V)(递归栈空间)。
  • 广度优先搜索(BFS)
    用途:用于图的遍历或最短路径查找(无权图)。
    时间复杂度:O(V+E)。
    空间复杂度:O(V)(队列空间)。
  • Dijkstra算法
    用途:用于计算单源最短路径(有权图)。
    时间复杂度:O(V^2)(朴素实现)或O((V+E) log V)(优先队列实现)。
    空间复杂度:O(V)。
    最小生成树算法:
  • Prim算法
    用途:用于求解最小生成树。
    时间复杂度:
    使用邻接矩阵:O(V^2)。
    使用斐波那契堆等数据结构:O(E log V)。
    空间复杂度:根据具体实现而定,通常与顶点数和边的数量相关。
  • Kruskal算法
    用途:用于求解最小生成树。
    时间复杂度:O(E log E),其中E是边的数量。
    空间复杂度:O(E)(存储边)和O(V)(并查集数据结构)。
  • Floyd-Warshall算法
    用途:用于计算所有顶点对之间的最短路径(有权图)。
    时间复杂度:O(V^3),其中V是顶点数。注意这里的复杂度是立方,与上述算法不同。
    空间复杂度:O(V^2)(存储距离矩阵)。

9. 字符串算法

  1. 字符串算法
  • KMP算法:用于字符串匹配,时间复杂度O(n+m),其中n和m分别是文本和模式的长度。空间复杂度O(m)。
  • Rabin-Karp算法:基于哈希的字符串匹配算法,时间复杂度平均O(n+m),最坏O(n*m)。空间复杂度O(1)(不考虑哈希表)。

4.算法的时间复杂度和空间复杂度

1. 时间复杂度

  1. 时间复杂度:是指算法运行时间随输入规模增长的变化情况。常见的时间复杂度包括常数时间O(1)、线性时间O(n)、对数时间O(log n)、线性对数时间O(n log n)、平方时间O(n2)、立方时间O(n3)和指数时间O(2^n)等。

2. 空间复杂度

  1. 空间复杂度:是指算法运行时所需的存储空间随输入规模增长的变化情况。空间复杂度主要衡量算法在运行过程中临时占用存储空间的大小。 在实际应用中,需要根据具体问题的需求和约束条件,选择合适的数据结构和算法,以优化程序的性能。同时,也需要关注算法的时间复杂度和空间复杂度,以确保程序在可接受的范围内运行。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文简单介绍数据结构与算法的介绍。

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

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

相关文章

流行的开源高性能数据同步工具 - Apache SeaTunnel 整体架构运行原理

概述 背景 数据集成在现代企业的数据治理和决策支持中扮演着至关重要的角色。随着数据源的多样化和数据量的迅速增长,企业需要具备强大的数据集成能力来高效地处理和分析数据。SeaTunnel通过其高度可扩展和灵活的架构,帮助企业快速实现多源数据的采集、…

消息队列篇--原理篇--Pulsar(Namespace,BookKeeper,类似Kafka甚至更好的消息队列)

Apache Pulusar是一个分布式、多租户、高性能的发布/订阅(Pub/Sub)消息系统,最初由Yahoo开发并开源。它结合了Kafka和传统消息队列的优点,提供高吞吐量、低延迟、强一致性和可扩展的消息传递能力,适用于大规模分布式系…

VS Code i18n国际化组件代码code显示中文配置 i18n ally

VUE项目做i18n国际化之后,代码中的中文都变成了code这时的代码就会显得非常难读,如果有一个插件能把code转换成中文显示就好了 vscode插件搜索“i18n ally” 在项目根文件夹下创建文件:.vscode/settings.json settings.json 内容如下 {"…

图论汇总1

1.图论理论基础 图的基本概念 二维坐标中,两点可以连成线,多个点连成的线就构成了图。 当然图也可以就一个节点,甚至没有节点(空图) 图的种类 整体上一般分为 有向图 和 无向图。 有向图是指 图中边是有方向的&a…

为什么机器学习中梯度下降是减去斜率,而不是按照其数学意义减去斜率的倒数

做个简单假设,Loss函数的某一个参数的函数曲线是二次方程,其导数函数为 r 2 ∗ w r 2*w r2∗w 按照斜率意义来看,要减去斜率倒数 降低LOSS需要将w1更新为w2,所以更新公式为 w w − Δ L Δ w w w - \frac{\Delta L}{\Delta w…

iptables和ipvs差异

iptables和ipvs都是Linux内核中用于网络流量管理的工具,它们在实现方式、功能、性能以及使用场景上存在一些显著的差异。以下是对两者的详细比较: 一、实现方式 iptables: 基于Netfilter框架。使用链表(chain)和规则&…

Effective C++ 规则51:编写 new 和 delete 时需固守常规

1、背景 在 C 中,如果你需要为类自定义 new 和 delete,必须遵循一些约定和规则,以确保内存管理的一致性、可维护性和安全性。当我们使用 new 和 delete 操作时,C 编译器会: 调用全局或类特定的 operator new 来分配内…

JS面相对象小案例:自定义安全数组

在JS中,数组不像其他语言(java、python)中那样安全,它具有动态性和弱类型性,切越界访问没有具体的报错,而是返回空,为提升数组的安全性,我们可以自行定义一个安全数组。 一、增加报…

本地大模型编程实战(02)语义检索(2)

文章目录 准备按批次嵌入加载csv文件,分割文档并嵌入测试嵌入效果总结代码 上一篇文章: 本地大模型编程实战(02)语义检索(1) 详细介绍了如何使用 langchain 实现语义检索,为了演示方便,使用的是 langchain 提供的内存数据库。 在实…

windows平台intel-vpl编译

需要先在本机编译好opencl库 git clone --recursive https://github.com/KhronosGroup/OpenCL-SDK.git cmake -A x64 -T v143 -D OPENCL_SDK_BUILD_OPENGL_SAMPLESOFF -B OpenCL-SDK\build -S OpenCL-SDKcmake --build OpenCL-SDK\build --config Releasecmake --install O…

Vue 3 30天精进之旅:Day 05 - 事件处理

引言 在前几天的学习中,我们探讨了Vue实例、计算属性和侦听器。这些概念为我们搭建了Vue应用的基础。今天,我们将专注于事件处理,这是交互式Web应用的核心部分。通过学习如何在Vue中处理事件,你将能够更好地与用户进行交互&#…

[C语言日寄]exit函数的使用及其拓展

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…

React 中hooks之useSyncExternalStore使用总结

1. 基本概念 useSyncExternalStore 是 React 18 引入的一个 Hook,用于订阅外部数据源,确保在并发渲染下数据的一致性。它主要用于: 订阅浏览器 API(如 window.width)订阅第三方状态管理库订阅任何外部数据源 1.1 基…

激光雷达和相机早期融合

通过外参和内参的标定将激光雷达的点云投影到图像上。 • 传感器标定 首先需要对激光雷达和相机(用于获取 2D 图像)进行外参和内参标定。这是为了确定激光雷达坐标系和相机坐标系之间的转换关系,包括旋转和平移。通常采用棋盘格等标定工具&…

Linux--权限

Linux系统的权限管理是保障系统安全的重要机制,以下详细讲解权限相关概念及操作指令: 一、基础权限机制 1. 权限的三元组,读(r)、写(w)、执行(x) 每个文件或目录有三组…

iic、spi以及uart

何为总线? 连接多个部件的信息传输线,是部件共享的传输介质 总线的作用? 实现数据传输,即模块之间的通信 总线如何分类? 根据总线连接的外设属于内部外设还是外部外设将总线可以分为片内总线和片外总线 可分为数…

“破冰”探索两周年,AI和媒体碰撞出了什么火花?

2022年末,大模型浪潮席卷而来。在“所有行业都值得用AI重塑”的氛围下,各个行业都受到了影响和冲击。 其中新闻媒体可以说是受影响最为剧烈的行业。 因为内容的生产方式被重新定义,媒体从业者普遍存在焦虑情绪:担心错过新一轮的…

DeepSeek明确学术研究方向效果如何?

明确学术研究方向 在学术写作中,选择一个出色的研究主题至关重要,因为它直接关系到论文是否能登上高级别的学术期刊。不少学者在这个过程中走入了误区,他们往往将大把的时间花在写作本身,而忽略了对选题的深入思考,这…

WPF实战案例 | C# WPF实现大学选课系统

WPF实战案例 | C# WPF实现大学选课系统 一、设计来源1.1 主界面1.2 登录界面1.3 新增课程界面1.4 修改密码界面 二、效果和源码2.1 界面设计(XAML)2.2 代码逻辑(C#) 源码下载更多优质源码分享 作者:xcLeigh 文章地址&a…

《 C++ 点滴漫谈: 二十四 》深入 C++ 变量与类型的世界:高性能编程的根基

摘要 本文深入探讨了 C 中变量与类型的方方面面,包括变量的基本概念、基本与复合数据类型、动态类型与内存管理、类型推导与模板支持,以及类型系统的高级特性。通过全面的理论讲解与实际案例分析,展示了 C 类型系统的强大灵活性与实践价值。…