![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
山羊君
缓慢坚定的学习,将自己用到的东西记下来
展开
-
数据结构与算法之美-递归树-极客时间笔记
递归树是用来分析递归算法的时间复杂度,将递归分解的过程画出来就是一个类似树的结构。比如下图,归并排序递归树是将数据不断分解到单个元素,然后再向上合并。统计递归树代表的时间复杂度通常是计算每一层的时间,然后再看最多会分解到多少层。归并操作主要是和归并函数相关,也就是数据规模,这里递归树每层的数据规模都是n。我们只需要知道这棵树的高度 h,用高度 h 乘以每一层的时间消耗 n,就可以得到总...原创 2020-01-09 22:59:25 · 247 阅读 · 0 评论 -
数据结构与算法之美-二叉树-极客时间学习笔记
树是一种二维的数据结构,每个节点后面跟着不止1个后续节点,树与图的区别是,树沿着链接走下去,不会走回头路。走回头路了就是图。二叉树是指最多只有2个分叉的树结构。满二叉树,叶子节点全都在最底层,除了叶子节点之外,每个节点都有左右两个子节点。完全二叉树,叶子节点都在最底下两层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他层的节点个数都要达到最大。说到完全二叉树,要介绍下树的...原创 2020-01-04 23:45:50 · 183 阅读 · 0 评论 -
数据结构与算法之美-哈希算法-极客时间学习笔记
‘Hash'音译是’哈希‘,意译是’散列‘。哈希算法不是仅仅应用于我们常用结构哈希表中,哈希算法是一个更加广泛的概念。将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。这里注意任意长度,因为哈希表中通常是把长的变短,但也可以把短的变长。哈希算法理论上应该满足下列要求:从哈希值不能反向推导出原始数据(所以哈希算法也...原创 2020-01-02 22:04:57 · 1042 阅读 · 0 评论 -
数据结构与算法之美-散列表-极客时间笔记
散列表或者哈希表,就是数组的一种延伸应用,主要还是利用数组可以方便的理由下标索引进行元素操作。概念的核心点在于原始数据可能是键值对,将Key值通过哈希函数进行转化变成唯一(希望是唯一,但并无法保证,所以才有后面的散列冲突问题)的下标索引,以此来保证Value值。散列函数的设计有下列三点要求:1、散列函数计算得到的散列值是一个非负整数;——因为散列的结果对应数组下标,必要要求非负整数。...原创 2019-12-22 23:11:00 · 137 阅读 · 0 评论 -
数据结构与算法之美-跳表-极客时间学习笔记
二分查找是针对数组结构的,那么链表结构有没有类似的方法可以实现快速查找?按照以空间换时间的思路,我们把单链表想象成一本书,每个节点都是1页,那么快速搜索的方法就是建立目录索引(并非完全相同的概念,这里的索引也需要遍历,不能跳跃)。从一页页翻页变成在按照索引一个个查找,然后再下一层进入到节点层查找。为了加快搜索速度,可以建立不止一级索引,上一层以下一层为基础,每次跳过1个元素(这里并...原创 2019-12-17 23:38:38 · 188 阅读 · 0 评论 -
数据结构与算法之美-二分查找-极客时间笔记
二分查找是一种针对有序数据的查找方式,通过每次选择数据中间点进行比较,来将目标范围降低一半的方法。在日常生活中,我们应该都不自觉的使用过,比如经典的猜数字游戏,一个人默写下1个数字,其他人来猜这个数字,为了不让游戏无聊的延续下去,都是每次一半的进行猜测。类似这种每次按照固定比例降低数据范围的查找方法统一叫作对数级的查找效率O(logn),对数查找效率是很高效的,在大数据量面前,甚至比常...原创 2019-12-15 16:22:43 · 146 阅读 · 0 评论 -
数据结构与算法之美-排序-极客时间笔记
排序是最常使用到的一种算法类型,很大编程语言中都内置排序函数。这里主要是记录下述三种不同时间复杂度的排序算法。目录如何分析排序算法?冒泡排序插入排序选择排序O()排序比较归并排序快速排序快排和归并的差别桶排序/计数排序基数排序如何分析排序算法?执行效率:针对不同有序度的数据,排序算法的执行效率是存在差异的。所以需要做不同情况下的时间复杂度分...原创 2019-11-28 16:01:06 · 235 阅读 · 0 评论 -
数据结构与算法之美-递归-极客时间笔记
递归操作是一种高效、简洁的编码技巧,在代码中的表现就是方法调用自己本身。可以采用递归的问题需要满足三个条件:一个问题可以分解为几个子问题的解; 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样; 存在递归终止条件,即问题分解到底层后可以终止再层层回溯。写递归代码的关键就是找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止...原创 2019-11-27 19:53:11 · 165 阅读 · 0 评论 -
数据结构与算法之美-线性表-极客时间笔记
线性表,指数据排成像一条线一样的结果,每个线性表的数据最多只有前后两个方向。对应的非线性表,则没有明显的数据前后关系。目录数组链表栈队列数组数组是用一组连续的内存空间,来存储一组具有相同类型的数据。通过上述两点(连续内存,相同类型),可以实现(基于索引的)随机访问。因为内存地址是连续的,可以根据每个数据类型的存储大小乘以自己希望访问元素的索引位置,通过数组首地址...原创 2019-11-15 00:00:44 · 306 阅读 · 0 评论 -
数据结构与算法之美-复杂度分析-极客时间笔记
数据结构和算法结构是代码世界的基础,我们通常使用的工具包/函数库都是将复杂操作包装起来只留出接口给我们调用。但如果想用的明明白白,还是要自己学会不同的数据结构的特点以及如何设计算法。程序的性能无非是通过“快”和“省”来体现,也就是运行速度和存储空间,实现相同功能的代码之间也可能存在天差地别,我们不能仅仅是写能用的代码,而是好代码。对比代码的性能,首先想到的就是以实际运行环境来跑一遍测试(事...原创 2019-11-11 15:55:12 · 204 阅读 · 0 评论