数据结构与算法
此系列教程已全部更新完毕,通过本系列教程的学习,基本可以应付中小型公司的算法面试,还可以帮助你理解常见开源系统、编程语言底层组件实现,并且有助于你编写出更加高性能的代码,而不只是循环、数组走天下,性能全靠硬件抗。
你需要升级为订阅用户才能阅读所有教程内容,可以通过点击下面的按钮按照提示升级为订阅用户(已经是订阅用户忽略):
基础部分
掌握基本部分内容已经可以应付大部分中小互联网公司的PHP面试算法相关问题。
1、前导篇
2、线性表结构
3、排序算法
4、查找算法
- 二分查找
- 二分查找的变形版本(上)
- 二分查找的变形版本(下)
- 二分查找案例剖析:IP地址对应城市查询
- 索引查找(一):稠密索引(数据库索引技术基础)
- 索引查找(二):分块索引(数据库索引技术基础)
- 索引查找(三):倒排索引(搜索引擎技术基础)
5、散列表
- 散列表概述
- 散列函数设计与散列冲突处理
- 哈希算法及其应用(安全加密、唯一标识、数据校验、散列函数、负载均衡、分布式缓存)
- PHP 数组底层实现原理(一):散列表结构及有序性实现
- PHP 数组底层实现原理(二):初始化、插入、哈希冲突处理、查找、删除
6、字符串匹配
- BF算法(最简单、最暴力的匹配算法)
- KMP算法(最知名的匹配算法)
- Trie树算法(多模式匹配算法,适用于构建敏感词过滤系统)
- PHP 字符串匹配函数 strstr 底层实现算法剖析
进阶部分
7、二叉树
- 树及二叉树的概念和特性
- 二叉树的创建和存储(数组、链表)
- 二叉树的遍历(前序、中序、后序)
- 二叉排序(查找)树的定义及实现
- 理想二叉排序树:平衡二叉树(AVL树)的定义和实现
- 理想二叉排序树:平衡二叉树的构建过程演示
- 理性二叉排序树:平衡二叉树的实现代码和算法复杂度
- 工程二叉排序树:红黑树的定义及算法复杂度
- 工程二叉排序树:红黑树的动态平衡实现原理分析
- 二叉树的应用(一):堆和堆的构建
- 二叉树的应用(二):堆排序及其应用(队列优先级、TopK 排行榜)
- 二叉树的应用(三):赫夫曼树及其构建
- 二叉树的应用(四):赫夫曼编码及压缩算法的简单实现
8、图
注:图是数据结构集大成者,掌握了图就等于掌握了数据结构。
- 图的各种概念(无向图、有向图、稀疏图、稠密图、连通图等)
- 图的存储(邻接矩阵、邻接表)
- 图的遍历(上)—— 深度优先搜索
- 图的遍历(下)—— 广度优先搜索
- 最小生成树的定义及应用场景
- 最小生成树的实现算法之普里姆(Prim)算法
- 最小生成树的实现算法之克鲁斯卡尔(Kruskal)算法
- 最短路径及实现算法之迪杰斯特拉(Dijkstra)算法
- 最短路径及实现算法之弗洛伊德(Floyd)算法
- 拓扑排序的定义及其应用场景(AOV网)
- 拓扑排序实现算法及复杂度分析
- 关键路径的定义及其应用场景(AOE网)
- 关键路径实现算法及复杂度分析(拓扑排序解决工程可行性问题,关键路径在此基础上解决工程最短工期问题)
本系列教程已经更新完毕,对于一些更高级的数据结构和算法及使用实例,我们放到后续系列中结合具体场景进行解说,比如数据库查询实现原理、Redis中的数据结构、分布式实现算法等。
你还可以通过下面的应用部分来检测自己的学习和掌握情况:
应用部分
数据结构篇
线性表/数组
- 用两个栈实现队列
- 在 O(1) 时间删除链表结点
- 调整数组顺序使奇数位于偶数前面
- 链表中倒数第 k 个结点
- 手动反转链表
- 合并两个排序的链表
- 包含 min 函数的栈
- 栈的压入、弹出序列
- 复杂链表的复制
字符串
二叉树
- 重建二叉树(前序遍历、中序遍历)
- 树的子结构
- 二叉树的镜像
- 从上往下打印二叉树(按层遍历)
- 二叉搜索树的后序遍历序列(后序遍历)
- 二叉树中和为某一值的路径(前序遍历)
- 二叉搜索树和双向链表的转换(中序遍历)
- 二叉树的深度
- 判断一棵树是否是平衡二叉树
常用算法篇
排序算法
- 对公司员工年龄进行排序(快速排序)
- 数组中出现次数超过一半的数字(快速排序)
- 最小的k个数(快速排序、堆排序、红黑树)
- 把数组元素排成最小的数(快速排序、大数问题)
- 丑数(空间换时间)
- 数组中的逆序对(借助归并排序的流程统计)
查找算法
- 旋转数组的最小数字(二分查找)
- 数字在排序数组中出现的次数(二分查找的变形版本)
编程技巧篇
递归
循环
位运算
动态规划
上述应用部分代码可以在 Github 上查看:https://github.com/nonfu/php_interviews
24 Comments
为什么目录里部分文章跳转无权限访问了?
需要升级为订阅用户才可以访问,加入学院君和他的朋友们社群升级为订阅用户:
已加入的话在星球里面把学院用户名发我,我帮你升级下
以前看能是权限问题,是可以访问的,现在不行了
现在首页,重点不突出
嗯 会持续优化的 感谢反馈?
##君子不累吗??。我看的学习文档都很累?
我以此为乐 ?
发微信用户名吗?我之前加入了的。应该出个通告。
搞错,是星球里面发学院用户名是吧。
怎么发啊?星球评论里面?没有好友发送消息的地方。