算法第一遍看真的是只能面上过过, 难度还是挺高的, 不过至少原理懂了一些. 前边的排序和散列表除了红黑树删除那部分之外, 其他的倒也能懂, 问题不大. 图算法之前接触的很少, 现在来试着了解一下吧. 顶点与边 图的常用API 图的数据结构 搜索图的API 深度优先搜索 - 连通性问题 深度优先搜索
如果一个符号表里所有的键都是小整数, 那么用数组存放无序的符号表, 其速度要快很多, 无论是插入还查找, 都是常数级别. 现实中的键不可能这么好, 所以需要一种方法, 就是将任意类型的键转换成一个范围内的索引. 此外还有一个问题, 就是不同的键转换成相同的索引, 这时候就会发生碰撞, 即两个实际上不
只要是一棵树, 就得看看如何生长, 如果树不平衡, 在进行查找操作的时候, 就可能出现性能低下. 什么是平衡呢, 在排序的时候已经简单的用图表示过, 可以加权或者将小树附加到大树上. 平衡二叉树的思路也是如此. 那么什么是平衡呢, 所谓平衡, 就是指所有空节点到根节点的距离应该是相同的. 看了一晚上
符号表及API 有序符号表 二叉查找树 - 核心实现 二叉查找树 - 排序相关API 二叉查找树 - 删除 二叉查找树 - 遍历 符号表 简单的说, 符号表就类似字典, 是键和值的对应关系. 在这样一种抽象数据结构之下, 隐藏着算法和对应的数据结构. 对于一个字典, 核心的操作是put, 即插入一对
优先队列 二叉堆 二叉堆的操作: 下沉和上浮 优先队列的实现 堆排序 排序总结 优先队列 算法这书看到现在, 基本上能看明白算法讲什么和代码, 但是数学分析真的是看不来, 太刺激了. 堆排序是从一个优先队列的抽象数据结构引入的. 所谓优先队列, 就是一个某个长度的队列, 可以放入元素, 但是取出的时
这一节的算法都基于归并, 所以会给算法的模板新增加一个操作. 归并就是将两个有序的数组归并成一个更大的有序数组. 归并和之前的快速排序有一个区别是, 我们开始使用递归, 而且给递归函数传递的都是索引, 这样比较清晰. 实现归并方法 自顶向下的归并排序方法 自底向上的归并排序 快速排序 快速排序的改进
排序算法是解决很多问题的第一步, 而且排序算法发展时间长, 都非常经典, 优雅和高效. 初级排序算法 选择排序 插入排序 希尔排序 初级排序算法 算法这里很好, 没有上来就讲排序, 而是将排序算法类抽象出了一个共同的模板. 将排序抽象为排一个数组中元素的序, 每个元素都有一个主键(我个人理解就是据以
这一部分是结合Coursera上边塞奇威克本人的视频来看的, 讲的确实不错. 定量测量程序的运行时间 union-find 动态连通性算法 动态连通性算法 类似于集合的实现 动态连通性算法 树结构实现 动态连通性算法 加权树实现 动态连通性算法 加权+路径压缩 定量测量程序的运行时间 有一个三嵌套循
为了继续提高自己的水平, 是时候开始接触算法了. 看了很多算法的推荐, 这本算法第四版是很好的入门教材. 在Coursera上找到了这门课程的第一部分和第二部分, 还有书的配套网站 材料备
之前的加锁并发其实并没有真正的提高效率, 因为还是就一个共享变量来操作, 本质上还是执行完了全部计算. 实际上现代处理器具有多个核心, 可以同时执行与核心数量相等的线程. 现在来看一下真正利用多个线程并行处理的程序 提高并行性的代码 并行程序的性能评价 线程安全 - 线程不安全的函数 线程安全 -