算法学习 | 从无到有,我为什么要学算法

简介: 开启算法学习之旅,对我来说,这是从无到有的过程,让我改变了原本对算法爱恨交织的态度,真是一个好的开始。

前言

开始文章输出之前,我没有着急下笔,而是认真的问了自己几个问题。

  • 我为什么要学算法?
  • 如何保持学习的热情和积极性?
  • 学到的算法是否可以应用到工作中?
  • 学到的算法怎么应用到工作中?
  • 如何实现从掌握到精通?

我想每个学习周期,总要收获自己想要得到的东西,到底什么才是自己想要的或者需求要的。

于是我面对比较新的技术,养成了提问自己->探索过程->找出答案的习惯。

我理解的算法之美

化繁为简

日常无论是工作还是生活,有些场景可以借助算法,将复杂问题简单化。

比如买东西时怎么挑性价比高的商品、怎么用优惠组合可以让价格更低、出行时哪条路线更便捷等。

复杂一些的比如估算某件事的成本、某个规律性事件的数量、还有一些事件发生的概率以及什么概率下做决定比较多。

这些事,单纯靠想象,是比较难处理的,如果代入一些公式进行计算得到结果,怎么做选择就一目了然了。

降本提效

我在探索算法的使用场景的时候,发现了很多有趣的例子。

37%法则

经过数学家欧拉的实验,以37%作为分界点,前面的时间用来观察,后面的时间用来作决策的一种方法。

卖房子的时机

只要你可以得到一系列报价,清楚报价金额的变化幅度,并且在这个变化范围内各种报价出现的可能性是相同的。只要报价不会中断(积蓄也不会花完),就可以单纯地考虑你对收获或损失的期望值,以决定是否继续等待更有利的交易。

最优停车位置

停车难题在于停车位占用率,即目前被占用的所有停车位占总停车位的比例。

如果占用率很低,很容易找到一个好的停车位;如果占用率很高,想为你的车找到一席之地就困难了。

上面这些被例子被涵盖进最优停止理论中,合理的选择停止观望的时机,可以帮助节省成本,提高效率。

有规划成方圆

  • 在搜索省份和城市数据的时候,希望按照首字母进行分类展示。
  • 打开外卖APP,查看美食商家,可以按照距离筛选,也可以按照好评筛选。
  • 整理好装有100本书的书架和两个各有50本书的书架,哪个更费时?

这些问题,如果没有建立排序,想想数据量,就令人头皮发麻。

合理利用算法,可以为我们解决大数据量问题,也可以通过结果了解社会的本质。

所谓社会,就是我们维持的另外一种更重要、规模更大的秩序。

初探算法之门

算法是指对特定问题求解步骤的一种描述。

想要学好算法,一本专业的有趣的书籍,即可以帮助学习,又可以让人有读下去的欲望。

我选择的是《趣学算法》这本书。

下面通过阅读书籍,整理了算法的基础知识点。

算法描述方式

使用自然语言、程序设计语言描述算法,也可以使用流程图、框图等图形化的方式来描述算法。

伪代码

伪代码介于自然语言和程序设计语言之间,它更符合人们的表达方式,容易理解。但不是严格的程序设计语言,所以不能真实调试运行,想要调试运行伪代码,需要转换成标准的程序设计语言。

一般使用“伪代码”的方式来描述算法。

算法特性

书总结了算法有以下特性:

有穷性:算法是由若干条指令组成的有穷序列,总是在执行若干次后结束,不可能永不停止。

确定性:每条语句有明确的含义,无歧义。

可行性:算法在当前环境条件下可以通过有限次运算实现。

输入输出:有零个或多个输入,有一个或多个输出。

「好」算法的标准

书总结了算法有以下特性:

  • 正确性:算法能够满足具体问题的需求,程序运行正常,无语法错误。
  • 易读性:算法遵循标识符命名规则,注释语句恰当适量,简洁易懂,便于阅读。
  • 健壮性:算法对非法数据及操作有较好的反应和处理。
  • 高效性:算法运行消耗的时间短。(与时间复杂度有关)
  • 低存储性:算法所需的存储空间低。(与空间复杂度有关)

时间复杂度

算法的时间复杂度是指运行需要的时间。一般会将算法运算的执行次数作为时间复杂度的衡量标准。

来看一个简单的求和的例子

let sum = 0; // 运行1次

let total = 0; // 运行1次

for (let i = 1; i < 10; i++) { // 运行10次

 sum = sum + i; // 运行10次

 for (let j = 1; j < 10; j++) { // 运行10*10次

   total = sum + i + j; // 运行10*10次

 }

}

这个例子中,所有的运行次数加起来是:1+1+10+10+10*10+10*10。

可以用一个函数表达:T(10) = 2*10²+2*10+2。

当运行次数是n的时候,表达为:T(n) = 2*n²+2*n+2。如果n足够大,那么算法运行时间主要取决于第一项,后面的可以忽略不计。

空间复杂度

空间复杂度是算法占用的空间大小。一般讲算法的辅助空间作为衡量空间复杂度的标准。

来看一个简单的数字交换的例子

function exchange(a, b) {

 let temp;

 temp = x;

 x = y;

 y = temp;

}


exchange(1, 2);

该算法使用了一个辅助控件temp,空间复杂度为O(1)。

自问自答

我为什么要学算法?

前面的算法之美就这个问题的答案。

如何保持学习的热情和积极性?

我一般会保持下面这张图中的良性循环

学习中分阶段取得收获,每个阶段的收获可以鼓舞自己继续学习下去。

未完待续

上面问题列表中,后面三个问题,我会完成一系列的算法学习之后,将经验进行总结,再发出来。

这个从无到有的过程,让改变了原本对算法爱恨交织的态度,这就是一个好的开始。

目录
相关文章
|
2月前
|
存储 算法 Go
算法学习:数组 vs 链表
算法学习:数组 vs 链表
33 0
|
2月前
|
机器学习/深度学习 算法 PyTorch
【从零开始学习深度学习】43. 算法优化之Adam算法【RMSProp算法与动量法的结合】介绍及其Pytorch实现
【从零开始学习深度学习】43. 算法优化之Adam算法【RMSProp算法与动量法的结合】介绍及其Pytorch实现
|
10天前
|
机器学习/深度学习 人工智能 资源调度
【博士每天一篇文献-算法】连续学习算法之HAT: Overcoming catastrophic forgetting with hard attention to the task
本文介绍了一种名为Hard Attention to the Task (HAT)的连续学习算法,通过学习几乎二值的注意力向量来克服灾难性遗忘问题,同时不影响当前任务的学习,并通过实验验证了其在减少遗忘方面的有效性。
27 12
|
2天前
|
算法 Java
掌握算法学习之字符串经典用法
文章总结了字符串在算法领域的经典用法,特别是通过双指针法来实现字符串的反转操作,并提供了LeetCode上相关题目的Java代码实现,强调了掌握这些技巧对于提升算法思维的重要性。
|
4天前
|
算法 NoSQL 中间件
go语言后端开发学习(六) ——基于雪花算法生成用户ID
本文介绍了分布式ID生成中的Snowflake(雪花)算法。为解决用户ID安全性与唯一性问题,Snowflake算法生成的ID具备全局唯一性、递增性、高可用性和高性能性等特点。64位ID由符号位(固定为0)、41位时间戳、10位标识位(含数据中心与机器ID)及12位序列号组成。面对ID重复风险,可通过预分配、动态或统一分配标识位解决。Go语言实现示例展示了如何使用第三方包`sonyflake`生成ID,确保不同节点产生的ID始终唯一。
go语言后端开发学习(六) ——基于雪花算法生成用户ID
|
10天前
|
存储 机器学习/深度学习 算法
【博士每天一篇文献-算法】连续学习算法之HNet:Continual learning with hypernetworks
本文提出了一种基于任务条件超网络(Hypernetworks)的持续学习模型,通过超网络生成目标网络权重并结合正则化技术减少灾难性遗忘,实现有效的任务顺序学习与长期记忆保持。
14 4
|
10天前
|
存储 机器学习/深度学习 算法
【博士每天一篇文献-算法】连续学习算法之RWalk:Riemannian Walk for Incremental Learning Understanding
RWalk算法是一种增量学习框架,通过结合EWC++和修改版的Path Integral算法,并采用不同的采样策略存储先前任务的代表性子集,以量化和平衡遗忘和固执,实现在学习新任务的同时保留旧任务的知识。
46 3
|
11天前
|
存储 机器学习/深度学习 算法
【博士每天一篇文献-综述】基于脑启发的连续学习算法有哪些?附思维导图
这篇博客文章总结了连续学习的分类,包括经典方法(重放、正则化和稀疏化方法)和脑启发方法(突触启发、双系统启发、睡眠启发和模块化启发方法),并讨论了它们在解决灾难性遗忘问题上的优势和局限性。
13 2
|
1月前
|
机器学习/深度学习 数据采集 算法
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机回归模型(SVR算法)项目实战
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机回归模型(SVR算法)项目实战
|
1月前
|
机器学习/深度学习 数据采集 算法
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机分类模型(SVC算法)项目实战
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机分类模型(SVC算法)项目实战

热门文章

最新文章