![](https://img-blog.csdnimg.cn/20201128140939689.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
【算法与数据结构】
文章平均质量分 94
算法与数据结构是程序员的内功,只有内功修炼好了,跳到大厂或突破自身技术瓶颈才能事半功倍,本专栏从头说起,将结合实际工作应用场景介绍常用和重要的数据结构与算法,与大家共同进步!
All_In_gzx_cc
这个作者很懒,什么都没留下…
展开
-
【ISP】相机标定及坐标系转换详解
相机标定,坐标系转换原创 2022-06-13 17:38:51 · 2134 阅读 · 0 评论 -
【基础知识】十大排序算法详解(C语言版)
文章转载自:https://blog.fiteen.top/2019/sorting-algorithm, 仅作学习使用~概述由于待排序的元素数量不同,使得排序过程中涉及的存储器不同,可将排序方法分为两类:一类是内部排序,指的是待排序列存放在计算机随机存储器中进行的排序过程;另一类是外部排序,指的是待排序的元素的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。我们可以将常见的内部排序算法可以分成两类:比较类排序:通过比较来决定元素间的相对次序,时间复杂度转载 2021-04-23 15:14:15 · 1044 阅读 · 0 评论 -
数据结构与算法(大数据存储)------bitmap位图详解
概述王者有一段时间没玩了,待再次上线的时候,TM(天美)发来了一封邮件,亲爱的召唤师,欢迎回归王者荣耀,你已有88日没有登录过游戏,这是为你精心准备的回归大礼包,礼包是一些体验卡和砖石等。but作为一名程序猿,让楼主更在意的是88这个数字的统计方式。我们知道王者荣耀用户数很多,假设有一亿用户,如何来记录用户的登录信息,如何来查询活跃用户(如一周内登录三次以上的),最常规的做法就是建一张用户登录信息表,有用户ID,有登录时间这样的,然后用户每登录一次就往表中插入一条数据,没毛病,那么假设一天之内有1亿用户转载 2021-02-04 19:32:35 · 814 阅读 · 0 评论 -
数据结构与算法(图论系列)------拓扑排序详解
定义在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:每个顶点出现且只出现一次。若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。例如,下面这个图:为什么会有拓扑排序?拓扑排序有何作用?举个例子,学习java系列的教程就比如学习java系类(部分)原创 2021-02-04 14:22:28 · 513 阅读 · 0 评论 -
数据结构与算法(图论系列)------并查集详解
并查集被很多OIer认为是最简洁而优雅的数据结构之一,主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中。当然,图论相关的问题,可以用并查集解决时,一般也可以用BFS或DFS来解决,此处不再展开,BFS和DFS相关算法可见此篇 文章。基本概念并查集是一种数据结构并查集这三个字,一个字代表一个意思:并(Union),代表合并查(Find),代表查找集(Set)原创 2021-02-04 11:41:36 · 490 阅读 · 0 评论 -
数据结构与算法(图论系列)------邻接矩阵与邻接表详解
图图的定义图(Graph)G由两个集合V和G组成,记作G = (V,G)。其中V是各顶点(结点)的有穷非空集合,V中的任意两个顶点配对后作为集合E的元素,顶点偶对亦称为边。在有向图中,E中的元素形式为<x,y>,表示从顶点x到顶点y的一条有向边,有向边也称作弧,x为弧尾,y为弧头;在无向图中,E中的元素形式为(x,y),仅表示连接顶点x和顶点y的一条边,效果同(y,x)。在实际应用中,每条边可以标上具有某种含义的数值,该数值称为边上的权,这些权可以表示从一个顶点到另一个顶点的距离或原创 2021-02-04 11:36:22 · 5560 阅读 · 0 评论 -
算法与数据结构(15)------二分查找代码的另一种理解(下)
我周围的人几乎都认为二分查找很简单,但事实真的如此吗?二分查找真的很简单吗?并不简单。看看 Knuth 大佬(发明 KMP 算法的那位)怎么说的:Although the basic idea of binary search is comparativelystraightforward, the details can be surprisingly tricky…这句话可以这样理解:思路很简单,细节是魔鬼。本文就来探究几个最常用的二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界。而且转载 2020-12-11 09:35:55 · 95 阅读 · 0 评论 -
算法与数据结构(14)------二分查找的几种复杂情况(中)
二分查找的变形问题很多,选择几个典型的来讲解,其他的可以借助这个思路自己来分析。假设数据是从小到大排列为前提,如果你要处理的数据是从大到小排列的,解决思路也是一样的。1.查找第一个值等于给定值的元素有序数据集合中存在重复的数据,我们希望找到第一个值等于给定值的数据,比如下面这样一个有序数组,其中,a[5],a[6],a[7]的值都等于 8,是重复的数据。我们希望查找第一个等于 8 的数据,也就是下标是 5 的元素。先看一种简洁的写法,但不是很好理解细节public int bsearch(i原创 2020-12-10 16:57:39 · 129 阅读 · 0 评论 -
算法与数据结构(13)------二分查找入门(上)
针对有序数据集合的查找算法:二分查找(Binary Search)算法,也叫折半查找算法。举个例子:假设有 1000 条订单数据,已经按照订单金额从小到大排序,每个订单金额都不同,并且最小单位是元。我们现在想知道是否存在金额等于 19 元的订单。如果存在,则返回订单数据,如果不存在则返回 null。最简单的办法当然是从第一个订单开始,一个一个遍历这 1000 个订单,直到找到金额等于 19 元的订单为止。但这样查找会比较慢,最坏情况下,可能要遍历完这 1000 条记录才能找到。那用二分查找能不能更快原创 2020-12-10 16:44:41 · 131 阅读 · 0 评论 -
算法与数据结构(11)------基于非比较的O(n)的线性排序(下)
待完成原创 2020-12-10 16:10:21 · 95 阅读 · 0 评论 -
算法与数据结构(10)------时间复杂度O(n*logn)的排序(中)
待完成原创 2020-12-10 16:08:20 · 162 阅读 · 0 评论 -
算法与数据结构(9)------时间复杂度O(n^2)的排序(上)
待完成原创 2020-12-10 16:07:49 · 92 阅读 · 0 评论 -
算法与数据结构(8)------递归
待完成原创 2020-12-10 16:05:12 · 87 阅读 · 0 评论 -
算法与数据结构(7)------队列
待完成原创 2020-12-10 16:03:19 · 83 阅读 · 0 评论 -
算法与数据结构(6)------栈
如何理解“栈”?关于“栈”,我有一个非常贴切的例子,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也是从上往下一个一个地依次取,不能从中间任意抽出。后进者先出,先进者后出,这就是典型的“栈”结构。从栈的操作特性上来看,栈是一种**“操作受限”的线性表**,只允许在一端插入和删除数据。当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,这时我们就应该首选“栈”这种数据结构。如何实现一个“栈”?从刚才栈的定义里,可以看出,栈主要包含两个操作原创 2020-12-10 15:59:08 · 135 阅读 · 0 评论 -
算法与数据结构(5)------链表(下)
一、理解指针或引用的含义1.含义:将某个变量(对象)赋值给指针(引用),实际上就是就是将这个变量(对象)的地址赋值给指针(引用)。2.示例:p—>next = q; 表示p节点的后继指针存储了q节点的内存地址。p—>next = p—>next—>next; 表示p节点的后继指针存储了p节点的下下个节点的内存地址。二、警惕指针丢失和内存泄漏(单链表)1.插入节点在节点a和节点b之间插入节点x,b是a的下一节点,,p指针指向节点a,则造成指针丢失和内存泄漏的代码:p—&g原创 2020-12-02 16:15:36 · 111 阅读 · 0 评论 -
算法与数据结构(4)------链表(上)
一、什么是链表?1.和数组一样,链表也是一种线性表。2.从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。二、为什么使用链表?即链表的特点1.插入、删除数据效率高O(1)级别(只需更改指针指向即可),随机访问效率低O(n)级别(需要从链头至链尾进行遍历)。2.和数组相比,内存空间消耗更大,因为每个存储数据的节点都需要额外的空间原创 2020-12-02 15:48:48 · 125 阅读 · 0 评论 -
算法与数据结构(3)------数组
数组看起来简单基础,但是很多人没有理解这个数据结构的精髓。带着为什么数组要从0开始编号,而不是从1开始的问题,进入主题。数组如何实现随机访问1) 数组是一种线性数据结构,用连续的存储空间存储相同类型数据I) 线性表:数组、链表、队列、栈 非线性表:树 图II) 连续的内存空间、相同的数据,所以数组可以随机访问,但对数组进行删除插入,为了保证数组的连续性,就要做大量的数据搬移工作a) 数组如何实现下标随机访问。引入数组再内存种的分配图,得出寻址公式b) 纠正数组和链表的错误认识。数组的查原创 2020-12-02 15:11:32 · 112 阅读 · 0 评论 -
算法与数据结构(2)------复杂度分析
int cal(int n) { int sum = 0; int i = 1; for (; i <= n; ++i) { sum = sum + i; } return sum; }原创 2020-11-28 16:19:39 · 137 阅读 · 0 评论 -
算法与数据结构(1)------前言
算法与数据结构(1)------前言** 身为非科班出身的AI算法从业人员,算法与数据结构相当于我们的内功,无论是长远地看,为了突破自身技术瓶颈;还是只看当前,为了跳到更好的公司,都有必要修炼好这门内功。以此记录这段学习历程,对自己既是总结也是激励。**** 我们学习数据结构和算法,并不是为了死记硬背几个知识点。我们的目的是建立时间复杂度、空间复杂度意识,写出高质量的代码,能够设计基础架构,提升编程技能,训练逻辑思维,积攒人生经验,以此获得工作回报,实现你的价值,完善你的人生。所以,不管你是原创 2020-11-28 16:12:04 · 232 阅读 · 0 评论