61 天前 / bigsai
先看效果图 ( 在线电脑尝试地址 http://biggsai.com/maze.html): 起因 又到深夜了,我按照以往在 公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 超越妹妹时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有啥作用。而我答道:能干事情多了,比如写个小游戏啥的! 当我码完字准备睡觉时:写不好别睡觉! 分析如果用数据结构与算法造出东西来呢? 什么东西简单容易呢?我百度一下,我靠,这个鸟游戏原来不好搞啊,得接触一堆不熟悉的东西,搞不来搞不来。
106 天前 / Yew_
堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节点的键值或索引总是小于(或者大于)它的父节点,堆排序的时间复杂度为 O(nlogn)。( 来自维基百科) 什么是堆 堆是一种特殊的完全二叉树,它的性质为:任意节点大于等于或者小于等于它的左右节点。如果任意节点大于等于它的左右节点,此堆称为最大堆;反之,任意节点小于等于它的左右节点,此堆称为最小堆。
107 天前 / Yew_
快速排序在实际应用中使用广泛,效果也高。快排使用的是分治策略,一组序列基于某一个基准值分成两个大小的子序列,递归排序子序列,最终得到有序的序列。快排的平均时间复杂度为 O(nlogn)。 算法的实现步骤: 1. 在序列中挑选一个基准值,我们可以默认第一个数为基准值 2. 从两边的数值跟基准值作对比,数值小的放在基准值左边,数值大的放在基准值右边 3. 递归将小于基准值的子序列和大于基准值的子序列排序 例子: 乱序序列:4,3,9,7,5,6,8,1 圆圈 1:原始序列 圆圈 2:以第一个数 4 为基准值 圆圈 3:分成两个子序列,3、1 小于基准值 4...
127 天前 / 沉默王二
前几天和丙弟交流,他说我们写作的人都是在不停地燃烧自己,所以需要不停地补充燃料。对于他的观点,我不能再苟同了——所以我开始狂补计算机方面的基础知识,这其中就包括我相对薄弱的数据结构。 百度百科对数据结构的定义是:相互之间存在一种或多种特定关系的数据元素的集合。定义很抽象,需要大声地朗读几遍,才有点感觉。怎么让这种感觉来得更强烈,更亲切一些呢?我来列举一下常见的 8 种数据结构,数组、链表、栈、队列、树、堆、图、哈希表。
159 天前 / Yew_
归并排序的核心思想是使用分治的策略来进行排序。分治是将大问题分成一些小问题,小问题解决后在合并在一起。 我们来看一下这一排数据:9,4,5,1,2,7,3,8,6,0。算法流程大概就是以下图所示,将数组拆分,然后每一个小数组进行排序合并。 再看一下局部的两个小数组如何进行合并的,进行合并的两个红色数组里面的数已经是有序的,上图黑色框部分 申请一个临时数据,存放排序后的结果。 第一行:红色左边数组跟红色右边数组进行对比,小的就放入黑色的临时数组中 第二行:进行下一个数的对比...
160 天前 / 互联网平头哥
Redis 数据库虽然一直都在使用,但是对其内部存储结构之类的,都没有研究过,哪怕是面试的时候都没有准备过这方面的东西。最近在看一门网课,里面有讲到过这一块的内容,结合了《Redis 设计与实现》这本书,粗略的整理了 Redis 的内部存储结构。就是下面这张图。 对于 Redis 数据库,绝大多数人都知道有每个 Redis 实例有 16 个数据库,但是对于内部是怎么扭转的大部分人可能不太清楚,反正我是不清楚。整体流程差不多就是上图表示的那样吧,知识面有限,难免存在缺漏,凑合着看吧。
165 天前 / openio
阿里妹导读:有哪些常见的数据结构?基本操作是什么?常见的排序算法是如何实现的?各有什么优缺点?本文简要分享算法基础、常见的数据结构以及排序算法,给同学们带来一堂数据结构和算法的基础课。 文末福利:阿里云开发者训练营来了。 一 前言 1 为什么要学习算法和数据结构? 解决特定问题。 深度优化程序性能的基础。 学习一种思想:如何把现实问题转化为计算机语言表示。 2 业务开发要掌握到程度? 了解常见数据结构和算法,沟通没有障碍。 活学活用:遇到问题时知道要用什么数据结构和算法去优化。
165 天前 / 林晓编程
一、回顾 通过对 Redis 的数据结构学习,简单回顾一下数据结构在 Redis 中的实现有哪些? 简单动态字符串(SDS),它用于 Redis 字符串键值对的底层实现。 链表,它是列表键的底层实现之一,以及发布、订阅、慢查询、监视器等。 字典,它是哈希键的底层实现之一,以及 Redis 数据库的底层实现。 跳跃表,它是有序集合键的底层实现之一。 通过以上的数据结构学习,基本上覆盖了 Redis 中所支持的五大数据类型,字符串、列表、哈希、集合、有序集合的底层实现。 那么今天,要继续学习的是,Redis 中的另外两个数据结构。
186 天前 / Monica2333
近来有小伙伴问我:刷 leetcode 真的有用吗,觉得收益很小,越刷越迷茫了… 诚然每个人刷题的目的不一样,233 酱还不是为了能水几篇文章… 当然不止。我觉得刷题是一件有意思的事,就像小猫小狗咬自己尾巴,玩弄的不亦乐乎。比喻可能不太恰当,是有种沉迷小游戏的感觉。 可是在艰难打野的过程中,我们不要忘了,最重要的是: 了解每种技能包的特点,适合解决的问题和场景。在特定实战场景下能够使用特定的技能包,自创技能包。这才是武功的至高境界。 装 X 结束,浅谈开始。
186 天前 / 林晓编程
一、回顾 在学习跳跃表之前,可以先回忆一下什么是数组、什么是链表。学习过数据结构应该知道。 数组属于顺序存储,用一段连续的内存位置来存储元素。我们可以通过数组的索引,快速访问到具体某一个元素,它的查询时间复杂度为 O(1)。由于各个元素之间是有顺序的。当我们在插入或删除一个元素时,在执行动作的那个位置之后的所有元素,都会依次被动的变动一次。所以插入和删除的执行时间复杂度为 O(n)。下图是一个数组,删除元素的案例示意图。 链表属于链式存储,用一组任意的存储单元来存储,并不要求物理上相邻。
196 天前 / u136065
Redis作为当前使用非常广泛的内存数据库,在代码层面做了很多极致的优化,已获取更好的性能。其中重要的一部分,就是对于底层数据结构的使用。Redis会根据数据量、数据大小等来优化对于不同结构的使用,从而获得更佳的运行效率和内存占用。Redis的核心数据结构包括简单动态字符串、列表、字典、跳跃表、整数集合、压缩列表。 接下来,我们就依次讲讲这些数据结构。 简单动态字符串(SDS)Redis是用C语言实现的。先复习一下C,C里的字符串中不记录字符串长度,以空字符标记结尾。
197 天前 / 林晓编程
前言 字典有多种叫法。可以叫“符号表”,“关联数组”以及“映射”。字典主要存储的是键值对。键值对的键必须唯一。其中 Redis 的数据库和哈希键的底层实现就是字典。 由于 Redis 的字典使用了散列表 ( 哈希表)作为底层实现,下面先了解一下什么是散列表。 一、什么是散列表(哈希表) 学习了数据结构我们应该知道,顺序存储结构的底层存储位置是一块连续的存储空间。想要查找某元素,通常是采用循环法逐个对比。如果元素比较多,查询效率就会很低。
205 天前 / 林晓编程
一、回顾 学习了数据结构,可以知道链表已经内置在了很多高级编程语言里。链表具有如下特点。 例如: 采用连续或非连续的物理地址 不需要预分配存储空间的大小 插入和删除的时间复杂度为 O(1) 查询的时间复杂度为 O(n) 不会出现溢出等 除此之外,链表的实现方式也有很多种。比如:单链表,双向链表,循环链表等。 基于链表的特点,Redis 也构建了自己的链表实现。其特性类似 C 语言中的链表,在 Reids 中,它采用了无环双端链表。简称 adlist即一个通用的双端链表实现。 其中,redis 的列表键的底层实现之一就有链表。
222 天前 / 林晓编程
一、回顾 单链表是由一段连续或不连续的物理地址来存储元素的。通过存储指针的方式,链表的每个结点中都储存了下一个结点元素的地址。另外,单链表可以快速的采用头插法或尾插法来增加新元素。亦可通过交换指针的方式去变更元素的顺序,以及删除一个元素。所以单链表不再需要动用其他元素即可完成以上操作。 二、什么是循环链表 所谓循环链表,就是将单链表的表尾指针从 null 指向了表头的地址。从而实现了一个环的形状。其特性仍然和单链表相似,加了这一点点小变动,则称为循环链表。 单链表的表尾指向 null,而循环链表的表尾指向表头。
230 天前 / 林晓编程
一、回顾 简单回顾一下前面学习到的知识。我们已经知道数据结构中的线性表包含顺序存储结构和链式存储结构。其中链式存储结构中包含了单链表。 在顺序存储结构的实现中,主要是申请了一块连续的内存来存储数据元素。而单链表的存储结构中是不需要提前申请内存的。它可随时随地申请一块连续或不连续的物理内存来存储数据元素。单链表可以通过头插法和尾插法来实现数据元素的顺序储存格式或逆序的存储格式。和顺序存储结构相比,都秉持着各自的优缺点。 二、静态链表的诞生 基于顺序储存结构和链式存储结构之后。