10种算法
1、二叉查找树
节点:左子节点的值都比它小,而右子节点的值都比它大
插入后无需排序,
2、反向索引
搜索引擎的工作原理,创建一个散列表,键为“搜索词”,值为“包含搜索词的界面”;
3、傅里叶变换
“给它一杯冰沙,它能告诉你其中包含哪些成分”,例如:给定一首歌曲,傅里叶变换能够将其中的各种频率分离出来。使用傅里叶变换可创建类似于“酷狗”这样的音乐识别软件。
4、并行算法
为了提高算法的速度,我们需要让它们能够在多个内核中并行地执行。例如:对数组进行排序,在最佳情况下,排序算法的速度大致为O(nlongn)。但是在快速排序的并行版本所需的时间为O(n)。
并行算法设计的速度提升并非线性的,因此即便你的笔记本电脑装备了两个而不是一个内核,算法的速度也不可能提高一倍,其中的原因有两个:
a、并行性管理开销。假设你要对一个包含1000个元素的数组进行排序,如何在两个内核之间分配这项任务呢?如果让每个内核对其中500个元素进行排序,再将两个排好序的数组合并成一个有序数组,那么合并也是需要时间的。
b、负载均衡。假设你需要完成10个任务,因此你给每个内核都分配5个任务。但分配给内核A的任务都很容易,10秒钟就完成了,而分配给内核B的任务都很难,1分种才完成。这意味着有那么50秒,内核B在忙死忙活,而内核A去闲得很,你如何均匀地分配工作,让两个内核都一样忙呢?