算法图解 读书笔记(下)

五、散列表(Hash)

  • 散列函数: 散列函数是这样的函数,即无论你给它什么数据,它都还你一个数字。
  • 散列(哈希)函数应用广泛:
  • 快速查找
  • 文件安全性传输交验
  • 可以防止重复 (一旦发现重复,该哈希函数就不安全了。也就是说被破译了。)
  • 缓存/ 记住数据,以免服务器再通过处理来生成它们。
  • 散列表的填装因子 = (散列表包含的元素数)/(位置总数)
  • 填装因子越低,发生冲突的可能性越小,散列表的性能越高。一个不错的经验规则是:一旦填装因子大于0.7 ,就调整散列表的长度。
  • 良好的散列函数让数组中的值呈均匀分布。
  • 糟糕的散列函数让值扎堆,导致大量的冲突。

六、广度优先搜索 (breadth-first search ,BFS ) 

广度优先搜索是一种用于图的查找算法,可帮助回答两类问题:

  • 第一类问题:从节点 A 出发,前往节点 B 有路径吗?
  • 第二类问题:从节点 A 出发,前往节点 B 哪条路径最短?

广搜采用双端队列

  • 处理过程中,将所有有关的节点都添加到处理队列中
  • 非加权图(无向图)中查找最短路径

七、狄克斯特拉算法( Dijkstra’s algorithm)

  • 可以处理:有向无环图(directed acyclic graph,DAG)
  • 加权图中查找最短路径
  • 不能将狄克斯特拉算法用于包含负权边的图。
  • 在包含负权边的图中,要找出最短路径,可使用另一种算法—— 贝尔曼-福德算法(Bellman-Ford algorithm)

八、贪婪算法(贪心算法)

  •  贪婪算法易于实现、运行速度快,是不错的近似算
  •  贪婪算法寻找局部最优解,企图以这种方式获得全局最优解

可解决:

  • 调度问题
  • 背包问题
  • 集合覆盖问题

九、动态规划

  • 将问题分成小问题,并先着手解决这些小问题
  • 动态规划,都可以画网格解决!
  • 动态规划功能强大,它能够解决子问题并使用这些答案来解决大问题。
  • 但仅当每个子问题都是离散的,即不依赖于其他子问题时,动态规划才管用。
  • 最优解可能导致背包没装满。
  • 最长公共子串。
  • 最长公共子序列。

十、K最近邻算法(KNN)

  • KNN用于分类和回归,需要考虑最近的邻居
  • 要计算两点的距离,可使用毕达哥拉斯公式:
  • KNN算法真的是很有用,堪称你进入神奇的机器学习领域的领路人!
  • 使用KNN 来做两项基本工作—— 分类和回归:
  • 分类就是编组
  • 回归就是预测结果(如一个数字)
  • 特征抽取意味着将物品(如水果或用户)转换为一系列可比较的数字
  • OCR指的是光学字符识别( optical character recognition),这意味着你可拍摄印刷页面的照片,
  • 计算机将自动识别出其中的文字。  一般而言,OCR 算法提取线段、点和曲线等特征
  • 垃圾邮件过滤器使用一种简单算法——朴素贝叶斯分类器 (Naive Bayes classifier )
  • 朴素贝叶斯分类器能计算出邮件为垃圾邮件的概率,其应用领域与KNN 相似。

 

其他算法

11.1 树

  • 二叉查找树: 平均访问时间也为O(log n)
  • B树是一种特殊的二叉树,数据库常用它来存储数据
  • 如果你对数据库或高级数据结构感兴趣,请研究如下数据结构:B 树,红黑树,堆,伸展树。

11.2 反向索引:

  • 一个散列表,将单词映射到包含它的页面。这种数据结构被称为反向索引 (inverted index ),常用于创建搜索引擎

11.3 傅立叶变换(分离数字信号,用sin+cos叠加):

  • 给定一首歌曲,傅里叶变换能够将其中的各种频率分离出来。与可扩展性和海量数据处理相关

11.4 并行算法( 要改善性能和可扩展性,并行算法可能是不错的选择!)

11.5 MapReduce( 分布式算法)

  •  映射(map )函数和归并(reduce )函数
  •  映射是将一个数组转换为另一个数组
  •  归并是将一个数组转换为一个元素

1.6 布隆过滤器和HyperLogLog

11.7 SHA 算法( 散列函数是安全散列算法(secure hash algorithm ,SHA )函数)

  • 给定一个字符串,SHA返回其散列值。
  • 可用于比较文件/检查密码

11.8 局部敏感的散列算法

  • 有时候,你希望结果相反,即希望散列函数是局部敏感的。在这种情况下,可使用Simhash

11.9 Diffie-Hellman 密钥交换( 公钥和私)

  • Diffie-Hellman算法解决了如下两个问题:
  • 双方无需知道加密算法。他们不必会面协商要使用的加密算法。
  • 要破解加密的消息比登天还难。

11.10 线性规划 (初中知识。。常考题)

  •  目标是利润最大化,而约束条件是拥有的原材料数量。
  •  线性规划使用Simplex 算法, 这个算法很复杂(最优化)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值