兰州网站设计厂家,福州网站建设专业定制,网站建设和营销,北京产品设计公司目录 布隆过滤器HyperLogLogSHA算法比较文件检查密码 Diffie-Hellman密钥交换线性规划结语#xff08;完结#xff09; 布隆过滤器
在元素很多的情况下#xff0c;判断一个元素是否在集合中可以使用布隆过滤器。布隆过滤器#xff08;Bloom Filter#xff09;是 1970 年由… 目录 布隆过滤器HyperLogLogSHA算法比较文件检查密码 Diffie-Hellman密钥交换线性规划结语完结 布隆过滤器
在元素很多的情况下判断一个元素是否在集合中可以使用布隆过滤器。布隆过滤器Bloom Filter是 1970 年由布隆提出的是一种非常节省空间的概率数据结构运行速度快占用内存小但是有一定的误判率且无法删除元素。它实际上是一个很长的二进制向量和一系列随机映射函数组成主要用于判断一个元素是否在一个集合中。 布隆过滤器(Bloom Filter)详解
HyperLogLog
Redis 在 2.8.9 版本添加了 HyperLogLog 结构简介HLL在数量级特别大的情况下占用空间很小。如果使用我们平常的数据结构比如set,HashMap,等虽然也可以实现去重统计的工作但是当数据量上升到一定级别之后其占用的空间也是非常的大。需要注意的是HyperLogLog算法的去重计数方案并不精确当然不是特别不精确标准误差只有0.81%
当然HyperLogLog虽说占据空间小但也不是不占空间它需要占据一定12k存储空间所以如果我们的统计量可能比较小使用HyperLogLog可能就是大材小用了但是如果百万级、千万级那节省的空间就大的大了去了。
SHA算法
散列算法有一键将相关的值放入数组中。 使用散列函数来确定应将这个值放在数组的什么地方。这样查找时间是固定的。当你想要知道指定键对应的值时可再次执行散列函数它将告诉你这个值存储在什么地方需要的时间为O(1)。在这个示例中你希望散列函数的结果是均匀分布的。散列函数接受一个字符串并返回一个索引号。
比较文件
另一种散列函数是安全散列算法(secure hash algorithm,SHA)函数。给定一个字符串SHA返回其散列值。 这里的术语有点令人迷惑。SHA是一个散列函数它生成一个散列值——一个较短的字符串。用于创建散列表的散列函数根据字符串生成数组索引而SHA根据字符串生成另一个字符串。 ‘Hello’: 24cf24db 对于每个不同的字符串SHA生成的散列值都不同。SHA生成的散列值很长这里截短了。如果散列值相同说明是同一个文件。
检查密码
当你在注册或者更改密码时Google并不直接将你的密码存储在数据库中而是将密码通过一个特定的哈希函数进行转换生成一个固定长度的哈希值。哈希函数是一种将任意长度的输入数据转换为固定长度输出的算法其特点是单向的即无法从哈希值反推出原始输入数据。
SHA被广泛用于计算密码的散列值。这种散列算法是单向的。你可根据字符串计算出散列值。但你无法根据散列值推断出原始字符串。这意味着计算攻击者窃取了Gmail的SHA散列值也无法据此推断出原始密码你可将密码转换为散列值但反过来不行。这意味着计算攻击者窃取了Gmail的SHA散列值也无法据此推断出原始密码你可将密码转换为散列值但反过来不行
Diffie-Hellman密钥交换
Diffie-Hellman使用两个密钥公钥和私钥。顾名思义公钥就是公开的可将其发布到网站上通过电子邮件发送给朋友或使用其他任何方式来发布。你不必将它藏着掖着。有人要向你发送消息时他使用公钥对其进行加密。加密后的消息只有使用私钥才能解密。只要只有你知道私钥就只有你才能解密消息
线性规划
例如假设你所在的公司生产两种产品衬衫和手提袋。衬衫每件利润2美元需要消耗1米布料和5粒扣子手提袋每个利润3美元需要消耗2米布料和2粒扣子。你有11米布料和20粒扣子为最大限度地提高利润该生产多少件衬衫、多少个手提袋呢
from scipy.optimize import linprog# 定义目标函数的系数
c [-2, -3] # -2x-3y求最小值# 定义约束条件的系数
A [[1, 2], [5, 2]] # 第一个约束条件表示布料消耗第二个表示扣子消耗。
b [11, 20] # 右侧向量(限制# 定义变量的取值范围
x0_bounds (0, None) # x的取值范围为非负数
x1_bounds (0, None) # y的取值范围为非负数# 求解线性规划问题
res linprog(c, A_ubA, b_ubb, bounds[x0_bounds, x1_bounds], methodhighs)#ubupper bound# 输出结果
print(最大利润, -res.fun)
print(生产衬衫数量, round(res.x[0]))
print(生产手提袋数量, round(res.x[1])) 最大利润 17.625 生产衬衫数量 2 生产手提袋数量 4 结语完结
本章简要地介绍了10个算法唯愿这让你知道还有很多地方等待你去探索。在我看来最佳的学习方式是找到感兴趣的主题然后一头扎进去而本书便为你这样做打下了坚实的基础。