算法图解

注:此文主要用于《算法图解》一书各章节知识点概述。


第一章:

二分查找算法O(logn)
算法程序:

简单查找算法O(n)
大O运行时间:
O(logn) < O(n) < O(nlogn) < O(n²) < O(n!)

先排序,再查找


第二章:

数组:适用于读取很多
读取O(1) 插入O(n) 删除O(n)

链表:适用于插入很多
读取O(n) 插入O(1) 删除O(1)

数组与链表是所有复杂数据结构的基石

链表数组
散列表
数据库

选择排序:O(n²)
每一次都遍历,找出最大,次大,次小,最小


第三章:

递归
每个递归函数包含两部分:
基线条件:让函数不再自己调用自己,避免无限循环
递归条件:让函数自己调用自己

调用栈 用于存储多个函数的变量
递归函数调用栈


第四章:

快速排序
采用了分而治之的思想
平均时间,最佳时间 O(nlogn)
最糟时间 O(n²)
算法

分而治之
1、找出简单的基线条件
2、确定如何缩小问题的规模,使其符合基线条件

编写涉及数组的递归函数时,基线条件通常是数组为空或者只包含一个元素。


第五章:

散列表(散列映射、映射、字典、关联数组)
散列表通过散列函数来确定元素的存储位置,是一种包含额外逻辑的数据结构
数组和链表都是直接映射到内存

散列表由键和值组成
DNS解析就是一个字典过程,将网址转换成IP地址
散列表具有数组的查找速度和链接的删除插入速度


第六章:

广度优先搜索(BFS)
一种图算法
可以用来计算最短距离
图由节点(node)和边(edge)组成
邻居
有向图,关系为单向的,有箭头
无向图,关系为双向的,无箭头

广度优先搜索可解决两类问题:
1、从节点A出发,有前往节点B的路径么?
2、从节点A出发,前往节点B的哪条路径最短?

算法时间:
O(V+E)
V:顶点数
E:边数

树是一种特殊的图,其中没有往后指的边

队列
入队与出队
先进先出结构 队列
先进后出结构 栈


第七章:

迪克斯特拉算法:
可以找出加权图中前往目标的最短路径
只适用于有向无环图
步骤:
1、找出最便宜的节点,即可在最短时间内前往的节点
2、对于该节点的邻居,检查是否有前往他们的更短路径,如果有,就更新其开销
3、重复这个过程,直到对图中的每个节点都这样做了
4、计算最终路径

加权图:
提高或降低某些边的权重

图中的环

不能将迪克斯特拉算法用于包含负权边的图
在包含负权边的图中,要找出最短路径,可采用 贝尔曼-福德算法


第八章:

贪婪算法:
每一步都选择局部最优解,最终企图得到的就是全局最优解

此算法有bug
有可能只解出近似解,而不是最优解
但执行很简单
贪婪算法是一种近似算法

判断近似算法的优劣标准:
1、速度有多快
2、得到的近似解与最优解的接近程度

NP完全问题
NP完全问题不用寻找完美解决方案,一般采用近似算法
一般涉及组合,集合,序列问题,都很有可能是NP完全问题。
比如旅行商问题和集合覆盖问题


第九章:

动态规划:
需要在给定约束条件下优化某种指标时,动态规划很管用。
原理:先解决子问题,再逐步解决大问题

将问题进行网格化划分。
单元格中的值通常就是你要优化的值。
每个单元格都是一个子问题。

仅当每个子问题都是离散的,即不依赖于其他子问题时,动态规划才管用

最长公共子串
最长公共子序列


第十章:

K最近邻算法:

分类
可以用来创建分类系统
特征提取,进行数字化衡量
采用毕达哥拉斯公式进行距离相似度衡量
注意可以缩放数据尺寸,进行统一标准
或者进行权重分配,有所偏重

回归
回归就是预测结果
首先采用KNN找出最接近的几个邻居
邻居数量选择:一般总用户为n个,则选择sqrt(n)个
再对它们取平均值进行预测

余弦相似度,比较角度,而不是距离,可能更合理


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值