代码改变世界

[置顶] 分布式系统理论 - 从放弃到入门

2017-01-01 02:45 by bangerlee, 5956 阅读, 收藏, 编辑
摘要:随承载用户数量的增加和容灾的需要,越来越多互联网后台系统从单机模式切换到分布式集群。回顾自己毕业五年来的工作内容,同样有这样的转变。 毕业头两年负责维护运行在刀片机上的业务,在机房里拔插单板的日子是我逝去的青春。设备之间通过VCS组成冷备,但即使有双机软件保护,宕机、网络丢包等问题发生时业务仍会受影 阅读全文

算法与数据结构基础 - 递归(Recursion)

2019-09-17 15:03 by bangerlee, 184 阅读, 收藏, 编辑
摘要:递归基础 递归(Recursion)是常见常用的算法,是DFS、分治法、回溯、二叉树遍历等方法的基础,典型的应用递归的问题有求阶乘、汉诺塔、斐波那契数列等,可视化过程。 应用递归算法一般分三步,一是定义基础条件(base case),二是改变状态、向基础条件转移,三是递归地调用自身。例如 LeetC 阅读全文

算法与数据结构基础 - 贪心(Greedy)

2019-08-31 13:04 by bangerlee, 56 阅读, 收藏, 编辑
摘要:贪心基础 贪心(Greedy)常用于解决最优问题,以期通过某种策略获得一系列局部最优解、从而求得整体最优解。 贪心从局部最优角度考虑,只适用于具备无后效性的问题,即某个状态以前的过程不影响以后的状态、紧接下来的状态仅与当前状态有关。和分治、动态规划一样,贪心是一种思路,不是解决某类问题的具体方法。 阅读全文

算法与数据结构基础 - 双指针(Two Pointers)

2019-08-15 15:02 by bangerlee, 166 阅读, 收藏, 编辑
摘要:双指针基础 双指针(Two Pointers)是面对数组、链表结构的一种处理技巧。这里“指针”是泛指,不但包括通常意义上的指针,还包括索引、迭代器等可用于遍历的游标。 同方向指针 设定两个指针、从头往尾(或从尾到头)遍历,我称之为同方向指针,第一个指针用于遍历,第二个指针满足一定条件下移动。例如 L 阅读全文

算法与数据结构基础 - 分治法(Divide and Conquer)

2019-08-13 13:11 by bangerlee, 274 阅读, 收藏, 编辑
摘要:分治法基础 分治法(Divide and Conquer)顾名思义,思想核心是将问题拆分为子问题,对子问题求解、最终合并结果,分治法用伪代码表示如下: 分治法简单而言分三步 Divide、Conquer、Combine,图示如下: 和动态规划、贪心等一样,分治法是一种算法思想,不是用于解决专门某类问 阅读全文

算法与数据结构基础 - 排序(Sort)

2019-08-12 11:44 by bangerlee, 239 阅读, 收藏, 编辑
摘要:排序基础 排序方法分两大类,一类是比较排序,快速排序(Quick Sort)、归并排序(Merge Sort)、插入排序(Insertion Sort)、选择排序(Selection Sort)、希尔排序(Shell Sort)、堆排序(Heap Sort)等属于比较排序方法,比较排序方法理论最优时 阅读全文

算法与数据结构基础 - 链表(Linked List)

2019-08-06 23:40 by bangerlee, 149 阅读, 收藏, 编辑
摘要:链表基础 链表(Linked List)相比数组(Array),物理存储上非连续、不支持O(1)时间按索引存取;但链表也有其优点,灵活的内存管理、允许在链表任意位置上插入和删除节点。单向链表结构一般如下: 相关LeetCode题: 707. Design Linked List 题解 237. De 阅读全文

算法与数据结构基础 - 哈希表(Hash Table)

2019-08-05 17:50 by bangerlee, 196 阅读, 收藏, 编辑
摘要:Hash Table基础 哈希表(Hash Table)是常用的数据结构,其运用哈希函数(hash function)实现映射,内部使用开放定址、拉链法等方式解决哈希冲突,使得读写时间复杂度平均为O(1)。 HashMap(std::unordered_map)、HashSet(std::unord 阅读全文

算法与数据结构基础 - 二叉树(Binary Tree)

2019-07-31 13:23 by bangerlee, 42 阅读, 收藏, 编辑
摘要:二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树、右子树, 左右子树节点同样最多有两个子树。 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如LeetCode题目 104. Maximum Depth of Binary Tree: 相关LeetCo 阅读全文

算法与数据结构基础 - 广度优先搜索(BFS)

2019-07-28 16:43 by bangerlee, 66 阅读, 收藏, 编辑
摘要:BFS基础 广度优先搜索(Breadth First Search)用于按离始节点距离、由近到远渐次访问图的节点,可视化BFS 通常使用队列(queue)结构模拟BFS过程,关于queue见:算法与数据结构基础 - 队列(Queue) 最直观的BFS应用是图和树的遍历,其中图常用邻接表或矩阵表示,例 阅读全文

算法与数据结构基础 - 堆(Heap)和优先级队列(Priority Queue)

2019-07-18 18:33 by bangerlee, 45 阅读, 收藏, 编辑
摘要:堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值: 图片来源:这里 堆可以用数组存储,插入、删除会触发节点shift_down、shift_up操作,时间复杂度O(logn),可视化构建堆 堆是优先级队列(Priority queue) 阅读全文