
数据结构与算法学习
文章平均质量分 86
笔者记录自己学习数据结构与算法、python的历程,通过蓝桥杯、PTA、洛谷、牛客等网站的算法题目分析、解答来巩固算法基础
終不似少年遊*
Python、人工智能、计算机视觉、RAG、NLP、深度学习、机器学习、云计算、数据结构与算法等。
展开
-
Python数据结构与算法-提升篇
基于python的数据结构与基础算法讲解,从地基开始,为后续人工智能的学习打下基础。原创 2025-04-04 12:08:44 · 1093 阅读 · 0 评论 -
Python数据结构与算法-基础预热篇
基于python的数据结构与基础算法讲解,从地基开始,为后续人工智能的学习打下基础。原创 2025-03-28 11:01:48 · 903 阅读 · 0 评论 -
数据结构与算法之排序
不同的排序算法适用于不同的场景,选择合适的排序算法可以提高程序的效率。例如,插入排序适用于部分有序的数据,而归并排序适用于大规模数据的排序.外排序适用于数据量较大的情况,通常需要将数据分块处理,然后合并排序结果。设待排序的表有10个元素,其关键字分别为(9,8,7,6,5,4,3,2,1,0):每次从未排序区取出一个元素,插入到有序区的适当位置,使得有序区仍然保持有序。:初始时,有序区只有一个元素(通常是第一个元素),无序区包含其余所有元素。:将数据分成多个小部分进行排序,然后将排序好的部分合并。原创 2025-01-07 00:12:31 · 1193 阅读 · 0 评论 -
数据结构之线性表
链表是线性表的一种物理存储结构,使用一组任意的存储单元来存储线性表的数据元素。每个元素包含一个数据域和一个指针域,指针域指向下一个元素。:元素之间的关系集合 S={<ai,ai+1>∣ai,ai+1∈D,i=1,2,…:循环链表是一种特殊的链表,其特点是最后一个节点的指针域指向链表的头节点,形成一个环形结构。线性表是数据结构中最基本的一种,其逻辑结构简单明了,每个元素都有明确的前驱和后继关系。开始的所有元素向前移动一个位置,覆盖被删除的元素。:平均需要移动一半的元素,时间复杂度为 O(n)。原创 2025-01-05 23:51:09 · 1121 阅读 · 0 评论 -
Python数据结构与算法03
例如,如果硬币面值改为1元、2元、4元、5元、6元,支付9元时,贪心算法可能会选择6+2+1,需要3枚硬币,但最优解是4+5,只需要2枚硬币。这意味着在每个决策步骤中,选择当前看起来最优的选择,最终能够导致整个问题的最优解。提取重复的部分:在编程过程中,如果发现有重复的代码块,应该将其提取出来,写成独立的函数或子模块,以提高代码的可读性和可维护性。贪心算法是一种在每一步选择中都采取当前状态下最好或最优的选择,从而希望导致结果是全局最好或最优的算法。重叠子问题:在动态规划中,子问题是原问题的小版本。原创 2024-12-17 20:35:10 · 991 阅读 · 0 评论 -
Python数据结构与算法02
循环排序过程中,将序列逻辑上分为左半边(已排序,比对从后往前看)和右半边(未排序, 正常顺序到数组结束),新元素(右半边选到的当前待排元素)、当前元素(左半边比对到的已 排元素),左已排>右未排,左后移一位,直到右在有序的左半边找到位置(一轮结束)。区间下标从0开始([0,n-1]),以第一次比对来说,第0次循环从[0,n-1]找最小元素a[x]与 a[0]换位,如果a[0]就是最小的则不动,但这就算一次操作。不稳定:[5,4,3,2,1] --> [1,2,3,4,5]时,时间复杂度差不多O(n**2)原创 2024-12-17 20:32:11 · 865 阅读 · 0 评论 -
语言基础01
accumulate([1,2,3,4,5], max) 将返回 [1, 2, 3, 4, 5],因为 max 函数在累积过程中总是返回当前最大值。accumulate([1,2,3,4,5], operator.mul) 将返回 [1, 2, 6, 24, 120],因为。accumulate([1,2,3,4,5]) 将返回 [1, 3, 6, 10, 15],这是元素的累积和。chain('ABC', 'DEF') 将返回一个迭代器,该迭代器生成 'ABCDEF',即两个字符串的串联。原创 2024-12-17 10:09:19 · 787 阅读 · 0 评论 -
基础数据结构01python
堆堆(Heap)是一种特殊的完全二叉树数据结构,满足以下特性:1.完全二叉树:堆是一棵完全二叉树,即除最后一层外,其他层的节点都被元素填满,且最后一层的节点尽可能地从左到右排列。2.堆序性质:在最大堆中,每个节点的值都大于或等于其子节点的值;在最小堆中,每个节点的值都小于或等于其子节点的值。堆通常通过数组来实现,因为完全二叉树可以高效地映射到数组中。在数组表示中,假设根节点存储在数组的第一个位置(索引为0),对于任意一个节点,其父节点和子节点的位置可以通过以下公式计算:父节原创 2024-12-16 17:25:57 · 678 阅读 · 0 评论 -
图论2图的应用补充
拓扑排序针对有向无环图的顶点进行线性排列的算法,使得对于任何来自顶点A指向顶点B的边,A都在序列中出现在B之前。重复上述至所有点加入集合(过程中有两个分区,一个是加入集合的点,另一个是还未加入的点)生成树是连通图的极小连通子图,多一条边就会成环,少一条边即无法构成连通图。用于处理多源最短路,从多个点出发到一个点的最短路,利用点u更新其它的点(加入离当前集合最近的点)上图中代价min=1+7+10+7+5=30。如果该边的加入不会成换,则加入,否则不加入。在d中选择最小未加入集合的点作为新一轮的u。原创 2024-11-28 22:41:04 · 903 阅读 · 0 评论 -
1语言基础
数据结构与算法可以说是每位程序员的必修课,即使是AI高速发展的今天,熟悉数据结构与算法都无疑是面向开发的一项加分项。先从一个问题看起:# 怎么让=后面不带空格方案可能有更多,就像一个问题,设计程序去实现的方法也可能很多# 1# 2# 3# 4。原创 2024-11-25 22:02:20 · 705 阅读 · 2 评论 -
图论1基础内容
对于一幅图G = (V,E),若有另一幅图G' = (V',E'),当V包含V'、E包含E'时,G'是G的子图,可以用集合来理解G={1,2,3,4},G'={3,4}有向图中,一个点到另一个点的边指向性是单一的,例如A->B表示A有一条可以通向B的路,但不代表B也有一条可以通向A的路;在图(有向图、无向图)中,若节点a和节点b是边e的两个端点,则a和b是邻接的,边e关联与点a和点b。假设一幅图有n个节点m条边,当 m>nlog2n,即边的数量远大于节点的数量的图。节点集合V,其中的元素称为节点或者顶点。原创 2024-11-27 20:04:45 · 1534 阅读 · 0 评论 -
排序算法2
最后将所有桶中的数据合并起来得到最终的排序结果。桶排序适用于数据分布均匀且数据量较大的情况,其时间复杂度为 O(n+k),其中 n 是待排序元素的数量,k 是桶的数量。和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是 O(nlogn) 的时间复杂度。2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。值得注意的是,从每次‘分区’的过程中看,除了筛选相较于‘基准值’小或者大的数以外,不做额外的排序。原创 2024-11-26 15:45:14 · 1189 阅读 · 0 评论 -
排序算法1
从蓝桥一道算法题切入来理解排序算法,常见的排序算法有10种,本篇先提及其中3种原创 2024-11-25 21:07:53 · 1277 阅读 · 1 评论 -
数据结构与算法-学习笔记
这段时间笔者开始学习和研究数据结构与算法,也同时借此学习和熟悉python,这篇博客先探讨一下快速幂吧,在一些赛事,比如蓝桥的模拟赛中会见到。这是蓝桥1514快速幂模板题。先分析一下快速幂的思想:快速幂(也称为“二分幂”)是一种高效的算法,用于计算大整数的幂次。它利用了二进制表示和倍增思想,将时间复杂度从 O(p)降低到 O(logp),即对数的复杂度。原创 2024-11-19 11:27:43 · 447 阅读 · 3 评论 -
数据结构与算法-学习笔记
用一个字典记录汉字0-9的笔画和数字的对应关系,用datatime模块将2000 年 1 月 1 日到 2024 年 4 月 13 日的日期转换为“YYYYMMDD” 的8 位数,对于每一个8位数再跑一次for循环去对应字典里的笔画数做相加,得到的和与50作比较,做判断,如果大于50就cnt+=1,cnt记录打篮球的天数。4.调用到python的时间处理库,需要注意的是时间对象是不能作为可迭代对象的,笔者一开始尝试用for循环来遍历区间内的每天,结果是报错,即。3.第二个函数用作统计打篮球的天数,原创 2024-11-20 18:17:01 · 1100 阅读 · 3 评论