算法图解(未详细介绍内容)


  1. 二叉查找树对于其中每个节点,左边节点的值都比它小,而右边节点的值都比它大。
    在这里插入图片描述
    检查时,首先检查根节点,然后根据顺序检查子节点。
    在二叉查找树中查找节点时,平均运行时间为O(log n),但在最糟的情况下所需时间为O(n)。但是二叉查找树的插入和删除操作的速度要快得多。在这里插入图片描述

  2. 反向索引
    创建一个散列表

THEREA,C
HIA,B
ADITB
WEC

A页面中包含单词THERE,由THERE映射到包含它的页面即为反向索引。

  1. 傅里叶变换
    (回归老本行zzzzzz)

  2. 并行算法
    并行算法设计起来很难,要确保它们能够正确地工作并实现期望的速度提升也很难。有一点
    是确定的,那就是速度的提升并非线性的,因此即便你的笔记本电脑装备了两个而不是一个内核,
    算法的速度也不可能提高一倍,其中的原因有两个。
    并行性管理开销。假设你要对一个包含1000个元素的数组进行排序,如何在两个内核之
    间分配这项任务呢?如果让每个内核对其中500个元素进行排序,再将两个排好序的数组
    合并成一个有序数组,那么合并也是需要时间的。
    负载均衡。假设你需要完成10个任务,因此你给每个内核都分配5个任务。但分配给内核
    A的任务都很容易,10秒钟就完成了,而分配给内核B的任务都很难,1分钟才完成。这意
    味着有那么50秒,内核B在忙死忙活,而内核A却闲得很!你如何均匀地分配工作,让两
    个内核都一样忙呢?

  3. MapReduce
    分布式算法非常适用于在短时间处理海量的工作,MapReduce基于映射(map)和归并(reduce)函数。
    映射是将一个数组转换为另一个数组
    归并是将一个数组转换为一个元素

映射函数

>>> arr1 = [1, 2, 3, 4, 5]
>>> arr2 = map(lambda x: 2 * x, arr1)
[2, 4, 6, 8, 10]

map函数用法
map(function, iterable, …)
function – 函数
iterable – 一个或多个序列

归并函数

>>> arr1 = [1, 2, 3, 4, 5]
>>> reduce(lambda x,y: x+y, arr1)
15
  1. 布隆过滤器和HyperLogLog
    布隆过滤器是一种概率型数据结构,它提供的答案有可能不对,也有可能是正确的。

  2. SHA算法
    SHA还让你能在不知道原始字符串的情况下对其进行比较。例如,假设Gmail遭到攻击,攻
    击者窃取了所有的密码!你的密码暴露了吗?没有,因为Google存储的并非密码,而是密码的
    SHA散列值!你输入密码时,Google计算其散列值,并将结果同其数据库中的散列值进行比较。
    这种散列算法是单向的。可以根据字符串算出散列值,但是无法根据散列值推断出原始的字符串。
    abc123到6ca13d,但是无法从6ca13d推断出abc123

  3. 局部敏感的散列算法

  4. Diffie-Hellman 密钥交换

  5. 线性规划
    线性规划用于在给定约束条件下最大限度地改善指定的指标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值