
算法与数据结构
文章平均质量分 90
介绍常用数据结构及各类算法相关知识。
阿_旭
专注Python、人工智能相关内容研究分享。
展开
-
【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总
【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总原创 2023-12-31 16:27:40 · 1366 阅读 · 0 评论 -
五种常用距离的代码实现:欧式距离、曼哈顿距离、闵可夫斯基距离、余弦相似度、杰卡德距离
五种常用距离的代码实现:欧式距离、曼哈顿距离、闵可夫斯基距离、余弦相似度、杰卡德距离原创 2023-12-24 23:17:15 · 1117 阅读 · 0 评论 -
【数据结构】布隆过滤器原理详解及其代码实现
【数据结构】布隆过滤器原理详解及其代码实现原创 2023-12-24 23:00:40 · 1586 阅读 · 0 评论 -
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成原创 2023-12-23 17:17:00 · 1179 阅读 · 0 评论 -
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素原创 2023-12-23 17:11:34 · 873 阅读 · 0 评论 -
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏原创 2023-12-23 17:07:34 · 1661 阅读 · 0 评论 -
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串原创 2023-12-22 22:40:29 · 927 阅读 · 0 评论 -
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表原创 2023-12-19 18:43:59 · 952 阅读 · 0 评论 -
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值原创 2023-12-18 23:31:06 · 1214 阅读 · 0 评论 -
【经典LeetCode算法题目专栏分类】【第5期】贪心算法:分发饼干、跳跃游戏、模拟行走机器人
【经典LeetCode算法题目专栏分类】【第5期】贪心算法:分发饼干、跳跃游戏、模拟行走机器人原创 2023-12-18 23:27:14 · 2066 阅读 · 1 评论 -
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径原创 2023-12-17 23:15:04 · 1110 阅读 · 0 评论 -
【经典LeetCode算法题目专栏分类】【第3期】回溯问题系列:单词搜索、N皇后问题、判断有效数独、解数独
【经典LeetCode算法题目专栏分类】【第3期】回溯问题系列:单词搜索、N皇后问题、判断有效数独、解数独原创 2023-12-17 23:10:30 · 922 阅读 · 0 评论 -
【经典LeetCode算法题目专栏分类】【第2期】组合与排列问题系列
【经典LeetCode算法题目专栏分类】【第2期】组合与排列问题系列原创 2023-12-17 23:05:11 · 1339 阅读 · 0 评论 -
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和原创 2023-12-17 22:54:29 · 1282 阅读 · 0 评论 -
python实现最常见的排序算法
python实现最常见的排序算法算法分类常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行O(n),因此也称为线性时间非比较类排序。算法复杂度分析以上排序算法的复杂度分析如下图所示:相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a原创 2020-12-02 08:57:53 · 249 阅读 · 0 评论 -
python实现【希尔排序】(Shell Sort)
python实现【希尔排序】(Shell Sort)算法原理及介绍1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动态的定义间隔序列。算法过程描述先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;按增量序列个数k原创 2020-12-01 15:26:27 · 355 阅读 · 0 评论 -
python实现【基数排序】(Radix Sort)
python实现【基数排序】(Radix Sort)算法原理及介绍基数排序核心思想是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。算法过程描述取得数组中的最大数,并取得位数;arr为原始数组,从最低位开始取每个位组成radix数组;对radix进行计数排序(利用计数排序适用于小范围数的特点);算法排序图解如下python实原创 2020-12-01 15:24:55 · 1166 阅读 · 0 评论 -
python实现【桶排序】(Bucket Sort)
python实现【桶排序】(Bucket Sort)算法原理及介绍桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。算法过程描述设置一个定量的数组当作空桶;遍历输入数据,并且把数据一个一个放到对应的桶里去;对每个不是空的桶进行排序;从不是空的桶里把排好序的数据拼接起来。原创 2020-12-01 15:23:56 · 839 阅读 · 1 评论 -
python实现【计数排序】(Count Sort)
python实现【计数排序】(Coun Sort)算法原理及介绍计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中,将数组的索引当做每一个元素,然后统计每个索引即元素出现的次数记录在该所索引位置处。如:nums[i]=j:表示数值i在序列中出现的次数为j。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。算法过程描述找出待排序的数组中最大和最小的元素;统计数组中每个值为i的元素出现的次数,存入count_nums数组的第i项原创 2020-12-01 15:22:17 · 1965 阅读 · 1 评论 -
python实现【堆排序】(Heap Sort)
python实现【堆排序】(HeapSort)算法原理及介绍堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法*。堆实质是一个近似完全二叉树的结构*,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。算法过程描述将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,……Rn-1)和新的有序区(Rn原创 2020-12-01 15:20:56 · 1125 阅读 · 0 评论 -
python实现【快速排序】(QuickSort)
python实现【快速排序】(QuickSort)算法原理及介绍快速排序的基本思想:通过选择一个关键字,一趟排序将待排记录分隔成独立的两部分,其中一部分数据均比选取的关键字小,而另一部分数据均比关键字大,则可分别对这两部分记录继续进行排序,以达到整个序列有序。快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。算法过程描述快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描原创 2020-12-01 14:34:59 · 5131 阅读 · 0 评论 -
python实现【归并排序】(MergeSort)
python实现【归并排序】(MergeSort)算法原理及介绍归并排序的核心原理是采用分治法(Divide and Conquer),递归调用;将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。然后将两个有序表合并成一个有序表,最终完成所有元素的排序。算法过程描述具体算法过程描述如下:把长度为n的输入序列分成两个长度为n/2的子序列;对这两个子序列分别采用归并排序(递归调用);将两个排序好的子序列合并成一个最终的排序序列。算法排序图解如下pyt原创 2020-12-01 14:33:00 · 1601 阅读 · 2 评论 -
python实现【插入排序】(InsertSort)
python实现【插入排序】(InsertSort)算法原理及介绍插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。算法过程描述具体算法描述如下:从第一个元素开始,该元素可以认为已经被排序;取出下一个元素,在已经排序的元素序列中从后向前扫描;如果该元素(已排序)大于新元素,将该元素移到下一位置;重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;原创 2020-12-01 14:31:25 · 1150 阅读 · 0 评论 -
python实现【选择排序】(SelectionSort)
python实现【选择排序】(SelectionSort)算法原理及介绍选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。简单的说就是每次从剩余元素中选择最小或最大的元素,进行依次排序。算法过程描述n个记录的直接选择排序可经过n-1趟的选择排序得到有序结果。具体算法描述如下:初始状态:无原创 2020-12-01 14:29:14 · 3327 阅读 · 0 评论 -
python实现【冒泡排序】(bubbleSort)
python实现【冒泡排序】(bubbleSort)算法原理介绍冒泡排序是一种简单的排序算法。它的基本原理思想是重复地走访过要排序的数列,并且依次比较两个元素,如果它们的顺序错误就把它们的位置进行交换。重复地遍历未排序的数组序列,直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的头部,因此称之为冒泡。算法过程描述比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最原创 2020-12-01 14:26:26 · 3801 阅读 · 0 评论 -
算法及数据结构基础知识汇总
算法定义算法(Algorithm)是对特定问题求解步骤的一种描述。衡量算法的指标1.时间复杂度:执行这个算法需要消耗多少时间;(大O表示法)2.空间复杂度:这个算法需要占用多少内存。算法在时间的高效性和空间的高效性之间通常时矛盾的,所以一般需要一个平衡点。通常我们假设程序运行在足够大的空间中,所以研究更多的是算法的时间复杂度。常见的时间复杂度有:常数阶O(1);对数阶O(Log2n...原创 2018-12-03 22:37:26 · 320 阅读 · 0 评论