
数据结构与算法之美
文章平均质量分 91
读书笔记
JWei_7
这个作者很懒,什么都没留下…
展开
-
数据结构与算法之美(散列表)
数据结构与算法之美(散列表)一、散列表的由来二、如何设计散列函数?三、散列冲突的解决方法开放寻址法①核心思想②线性探测法(Linear Probing)一、散列表的由来1.散列表来源于数组,它借助散列函数对数组这种数据结构进行扩展,利用的是数组支持按照下标随机访问元素的特性。2.需要存储在散列表中的数据我们称为键,将键转化为数组下标的方法称为散列函数,散列函数的计算结果称为散列值。3.将数据存储在散列值对应的数组下标位置。二、如何设计散列函数?散列函数计算得到的散列值是一个非负整数;如果ke原创 2022-03-14 11:17:57 · 561 阅读 · 0 评论 -
数据结构与算法之美(二叉树)
数据结构与算法之美(二叉树)一、树1.树的常用概念2.概念解释二、二叉树1.概念①什么是二叉树?②什么是满二叉树?③什么是完全二叉树?2.完全二叉树的存储①链式存储②顺序存储3.二叉树的遍历三、二叉查找树1.要求2.二叉查找树支持快速查找、插入、删除操作1.二叉查找树的查找操作2.二叉查找树的插入操作3.二叉查找树的删除操作4.二叉查找树的其他操作3.支持重复数据的二叉查找树4.时间复杂度一、树1.树的常用概念根节点、叶子节点、父节点、子节点、兄弟节点,还有节点的高度、深度以及层数,树的高度。2.概原创 2022-03-12 21:44:23 · 251 阅读 · 1 评论 -
数据结构与算法之美(排序优化)
如何实现一个通用的高性能的排序函数一、如何选择合适的排序算法?1.排序算法一览表2.为什选择快速排序?二、如何优化快速排序?1.三数取中法2.随机法3.警惕快排的递归发生堆栈溢出三、通用排序函数实现技巧一、如何选择合适的排序算法?1.排序算法一览表2.为什选择快速排序?1)线性排序时间复杂度很低但使用场景特殊,如果要写一个通用排序函数,不能选择线性排序。2)为了兼顾任意规模数据的排序,一般会首选时间复杂度为O(nlogn)的排序算法来实现排序函数。3)同为O(nlogn)的快排和归并排序相比,原创 2022-03-12 20:54:30 · 120 阅读 · 0 评论 -
数据结构与算法之美(线性排序)
数据结构与算法之美(线性排序)一、线性排序算法介绍二、桶排序(Bucket sort)1.算法原理:2.使用条件3.适用场景4.应用案例三、计数排序(Counting sort)算法原理案例分析:使用条件四、基数排序(Radix sort)算法原理(以排序10万个手机号为例来说明)使用条件一、线性排序算法介绍线性排序算法包括桶排序、计数排序、基数排序。线性排序算法的时间复杂度为O(n)。此3种排序算法都不涉及元素之间的比较操作,是非基于比较的排序算法。对排序数据的要求很苛刻,重点掌握此3种排序算原创 2022-03-12 20:22:26 · 266 阅读 · 0 评论 -
数据结构与算法之美(二分)
数据结构与算法之美(二分)二分查找一、什么是二分查找二、时间复杂度分析?1.时间复杂度2.认识O(logn)三、如何实现二分查找?1.非递归(循环实现)2.递归实现注意事项1.循环退出条件2.mid的取值3.low和high的更新四、使用条件(应用场景的局限性)1.顺序表结构2.有序数据3.数据量太小4.数据量太大五、四种常见的二分查找变形问题1.查找第一个值等于给定值的元素2.查找最后一个值等于给定值的元素3.查找第一个大于等于给定值的元素4.查找最后一个小于等于给定值的元素六、适用性分析二分查找一、原创 2022-03-09 10:57:29 · 242 阅读 · 0 评论 -
数据结构与算法之美(排序)
数据结构与算法之美(排序)几种基本排序及其时间复杂度二、如何分析一个排序算法?1.执行效率(从以下3个方面来衡量)2.内存消耗3.稳定性三、排序算法1.冒泡排序1)执行效率:最小时间复杂度、最大时间复杂度、平均时间复杂度排序原理性能分析2)空间复杂度3)算法稳定性2.插入排序算法原理性能分析1)时间复杂度:最好、最坏、平均情况2)空间复杂度3)算法稳定性3.归并排序几种基本排序及其时间复杂度几种最经典、最常用的排序方法 :冒泡排序、插入排序、选择排序、快速排序、归并排序、计数排序、基数排序、桶排序。原创 2022-03-08 22:59:36 · 538 阅读 · 0 评论 -
数据结构与算法之美(跳表)
数据结构与算法之美(跳表)原创 2022-02-12 00:38:58 · 569 阅读 · 0 评论 -
数据结构与算法之美(递归)
数据结构与算法之美(递归)原创 2022-02-11 22:07:09 · 373 阅读 · 0 评论 -
数据结构与算法之美(链表)
数据结构与算法之美(链表)一、什么是链表二、为什么使用链表?三、常用链表1.单链表2.循环链表3.双向链表4.双向循环链表四、数组和链表的区别1.插入、删除和随机访问的时间复杂度2.数组缺点3.链表缺点五、如何分别用链表和数组实现LRU缓冲淘汰策略?1)什么是缓存?2)为什么使用缓存?3)什么是缓存淘汰策略?4)有哪些缓存淘汰策略?5)链表实现LRU缓存淘汰策略6)数组实现LRU缓存淘汰策略方式一:首位置保存最新访问数据,末尾位置优先清理方式二:首位置优先清理,末尾位置保存最新访问数据六、如何轻松的写出正确原创 2022-02-11 00:45:52 · 772 阅读 · 0 评论 -
数据结构与算法之美(数组 栈和队列)
目录数据结构与算法之美(数组)一、如何实现随机访问?数组是什么二、低效的“插入”和“删除”先看看插入操作:对于删除操作:三、警惕数组的访问越界问题四、容器能否完全替代数组数据结构与算法之美(数组)一、如何实现随机访问?数组是什么数组(Array)是一种线性表 数据结构。它用一组连续的内存空间 ,来存储一组具有相同类型的数据。关键词一: 线性表顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。而与它相对立的概原创 2022-02-09 22:39:21 · 1023 阅读 · 1 评论 -
数据结构与算法之美(时间复杂度分析)
目录数据结构与算法之美(时间复杂度分析)时间复杂度分析1.只关注循环执行次数最多的一段代码数据结构与算法之美(时间复杂度分析)前言:数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是算法一个非常重要的考量指标。今天的内容主要围绕:时间复杂度和空间复杂度来讲时间复杂度表示方法:大O复杂度表示法(不会的可以点进去看一下)1 是什么数据结构和算法解决是“如何让计算机更快时间、更省空间的解决问题”。..原创 2022-02-09 21:45:27 · 947 阅读 · 1 评论