【算法】算法图解

该博客介绍了多种算法。包括查找算法如二分查找,排序算法如选择排序、快速排序,还有递归、散列表、广度优先搜索、迪克斯特拉算法等。阐述了各算法的原理、适用场景,如散列表用于模拟映射关系,广度优先搜索找最短距离等,还提及后续可了解的算法知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一章 算法简介

  • 查找算法 - 二分查找
  • 算法的运行时间 - 大O表示法
  1. O(log n)对数时间,包括二分查找
  2. O(n),线性时间,包括简单查找
  3. O(n * log n),快速排序
  4. O(n2),选择排序
  5. O(n!),旅行商问题3
  • 算法设计方法 - 递归
  • 算法的速度并非时间,而是操作数的增速

第二章 选择排序

  • 最基本的数据结构 - 数组和链表
  1. 使用数组意味着使用连续的内存地址,擅长随机访问
  2. 链表使一连串的随机内存地址串在一起,擅长插入和删除
  3. 在同一个数组中,所有元素的类型必须都相同
  4. 元素的位置成为索引

第三章 递归

  • 每个递归函数都有两部分:基线条件(函数不再调用自己避免形成无限循环)和递归条件(函数调用自己)
  • 调用栈:压入(插入)和弹出(删除并读取)
  • 所有函数调用都进入调用栈
  • 调用栈可能很长,这将占用大量的内存

第四章 快速排序

  • 快速排序使用分而治之的策略DC(递归式问题解决办法)
  • 将问题逐步分解,基线条件很可能是空数组或只包含一个元素的数组

第五章 散列表

  • 散列表 - 最有用的基本数据结构之一,内部机制(实现、冲突和散列函数)
  • 散列函数将输入映射成数字:它必须是一致的、他应将不同的输入映射到不同的数字、只返回有效索引
  • 散列表适用于模拟映射关系、防止重复、缓存记住数据
  • 冲突:散列函数总是将不同的键映射到数组的不同位置,若两个键映射到同一个位置,在该位置存储一个链表
  • 散列表的填装因子:散列表包含的元素数/位置总数,一旦填装因子大于0.7,就调整列表的长度

第六章 广度优先搜索

  • 广度优先搜索可以找出两样东西之间的最短距离
  1. 使用图来建立问题模型(图由节点和边组成)
  2. 使用广度优先搜索解决问题
  • 按添加顺序进行检查,可实现该目的数据结构 - 队列,入队和出队,是一种先进先出的数据结构FIFO,而栈是后进先出的LIFO
  • 有向图与无向图;没有箭头直接相连的节点互为邻居
  • 对于检查过的人,务必不要再去检查,否则可能导致无限循环

第七章 迪克斯特拉算法

  • 加权图 - 提高或降低某些边的权重
  • 广度优先搜索找段数最少的路径;狄克斯特拉算法找出耗时最短的路径
  1. 找出最便宜的节点,即可在最短时间内到达的节点
  2. 更新该节点的邻居的开销
  3. 重复这个过程,直到对图中的每个节点都这样做了
  4. 计算最终路径
  • 无向图意味着两个节点彼此指向对方,其实就是环,狄克斯特拉算法只适用于有向无环图DAG,也不适用于负权边
  • 若图中包含负权边,请使用贝尔曼-福德算法

第八章 贪婪算法

  • 没有快速算法的问题(NP完全问题)
  • 近似算法 - 快速找到NP完全问题的近似解
  • 贪婪策略 - 一种非常简单的问题解决策略
  • 贪婪算法:每步都采取最优解,最终得到就是全局最优解
  • 面临NP完全问题。最佳大做法是使用近似算法,贪婪算法易于实现、运行速度快
  • NP完全问题识别:
  1. 元素较少算法运行速度很快,随着元素数量增加,速度变得很慢
  2. 涉及所有组合的问题
  3. 不能将问题分成小问题,必须考虑各种可能的情况
  4. 问题涉及序列且很难解决
  5. 问题涉及集合且很难解决
  6. 问题可转换成集合覆盖问题或旅行商问题 

第九章 动态规划

  • 动态规划解决子问题并使用这些答案来解决大问题;但仅当各子问题是离散的,即不依赖其他子问题是,动态规划才管用
  • 需要在给定约束条件下优化某种指标,动态规划很有用
  • 每种动态规划解决方案都涉及网格
  • 单元格中的值通常就是你要优化的值
  • 每个单元格都是一个子问题,因此你要考虑如何将问题分解成子问题
  • 没有放之四海而皆准的计算动态规划解决方案的公式

第十章 K最近邻算法

  • KNN(K最近邻算法)创建分类系统
  • 学习特征抽取
  • 回归就是预测结果
  • 特征抽取意味着将物品转换一系列可比较的数字
  • 能否挑选合适特征是关系KNN算法的成败

第十一章 接下去如何做

  1. 树(二叉查找树、B树、红黑树、堆)
  2. 反向索引(单词映射到包含它的页面,创建搜索引擎)
  3. 傅里叶变化(MP3/DNA分析、地震预测)
  4. 并行算法(并行性管理开销、负载均衡)
  5. MapReduce(分布式算法)
  6. 布隆过滤器和HyperLogLog(概率型数据结构:可能出现错报的情况;不可能出现漏报的情况)
  7. SHA算法(安全散列算法,单向计算密码,局部不敏感;最安全的密码散列函数是bcrypt)
  8. Diffie-Hellman密钥交换(无需双方知道加密算法,要破解密码很难,公钥和私钥)
  9. 线性规划(simplex.最酷的算法,在给定约束条件下最大限度的改善指定的指标)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值