二叉查找树(Binary Search Tree) 支持动态数据集合的快速插入删除查找 要求?节点值:左<父<右 【二叉排序树】中序遍历二叉查找树可输出有序的数据序列,时间复...
二叉查找树(Binary Search Tree) 支持动态数据集合的快速插入删除查找 要求?节点值:左<父<右 【二叉排序树】中序遍历二叉查找树可输出有序的数据序列,时间复...
树:非线性表结构orz 概念直觉理解(节点、父子关系、兄弟节点、根节点、叶节点)高度(类比楼房,叶节点为0,下往上递增)vs深度(类比水面,根节点为0,上往下递增)vs层数=...
应用五:负载均衡 会话粘滞(session sticky)的负载均衡算法要求?在同一个客户端上,在一次会话中的所有请求都路由到同一个服务器上 维护映射关系表(客户端IP地址/...
哈希算法=映射规则,将任意长度的二进制值串映射为固定长度的二进制值串(哈希值) 要求? 单向:从哈希值不能反推出原始数据 对输入数据敏感 散列冲突的概率小 执行高效 应用一:...
优秀的散列函数 设计不能太复杂避免消耗计算时间 生成的值尽可能随机且均匀分布 装载因子过大?——动态扩容(阈值设置权衡时间空间复杂度) 避免低效扩容?装载因子达阈值后,只申请...
数组的一种拓展,利用数组支持按照下标随机访问数据的特性。通过散列函数把元素键值映射为下标,将数据存储在数组中对应下标的位置。 key --hash function--> t...
动态数据结构:支持快速插入删除查找操作(改造后的链表以支持类似二分的查找算法) 理解?(跳表=链表加多级索引的结构)对链表建立索引,提高查找效率(每两个节点提取一个到上一级,...
针对有序的数据集合。每次都通过与区间的中间元素对比,将待查找区间缩小为原来一半,直到找到所需元素或区间缩小为0 时间复杂度O(logn) 易错点(low、high、mid指数...
快速排序 理想的分区点——被分区点分开的两个分区中数据的数量差不多 分区算法 三数取中法(每间隔某个固定的长度,取数据出来比较,将中间值作为分区点) 随机法(每次从要排序的区...
桶排序(Bucket sort) 核心思想——将要排序的数据分到几个有序的桶里,每个桶里的数据单独进行排序,再把每个桶里的数据按照顺序依次取出 较适合用在外部排序(数据存储在...
归并排序(Merge Sort) 核心思想——把数组从中间分成前后两部分,分别排序后再合并在一起 分治思想——分治就是分而治之,将一个大问题分解成小的子问题来解决 分治是一种...
原地排序(Sorted in place)特指空间复杂度是 O(1) 的排序算法 稳定性——排序后值相等的元素间前后顺序不变 冒泡排序(Bubble Sort) 核心思想 只...
使用条件 一个问题的解可以分解为几个子问题(数据规模更小的问题)的解 这个问题与分解之后的子问题,除数据规模不同,求解思路一样 存在递归终止条件 关键 找到将大问题分解为小问...
先进先出(类比排队买票&不允许插队) 操作受限的线性表数据结构 顺序队列——用数组实现的队列(有界队列(bounded queue)的大小有限) 链式队列——用链表实现的队列...
特点 后进先出,先进后出(类比往桶里放东西) 操作受限的线性表,只允许在一端插入和删除数据 顺序栈——用数组实现链式栈——用链表实现 应用 函数调用栈 表达式求值 括号匹配
指针/引用含义 存储所指对象的内存地址 将某个变量赋值给指针=将这个变量的地址赋值给指针指针中存储了变量的内存地址指向这个变量,通过指针就能找到这个变量 警惕指针丢失和内存泄...
通过“指针”将一组零散的内存块串联使用,支持动态扩容 单链表 链表的结点——内存块 后继指针next——记录下个节点地址的指针 头结点记录链表的基地址 尾结点指向空地址NUL...
数组=线性表数据结构=用一组连续的内存空间存储一组具有相同类型的数据 线性表=数据间只有前后关系,排成一条线 连续的内存空间&相同类型的数据=> 随机访问(寻址公式计算元素存...
事后统计法(跑一遍)局限性:测试结果依赖测试环境、受数据规模影响 大O复杂度表示法粗略估计=>假设每行代码执行时间相等执行时间T(n)与每行代码实行次数n成正比 时间/空间复...
1.为什么要学习? 助于阅读框架源码、理解设计思想 优化细节:数据存取效率、节省内存等 改变看待问题深度、解决问题角度,高效解决实际问题 2.如何抓住学习重点? 理解概念 !...