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

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

前言

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

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

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

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

我理解的算法之美

化繁为简

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

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

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

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

降本提效

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

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)。

自问自答

我为什么要学算法?

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

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

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

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

未完待续

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

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

目录
相关文章
|
1月前
|
存储 算法
数据结构与算法学习二二:图的学习、图的概念、图的深度和广度优先遍历
这篇文章详细介绍了图的概念、表示方式以及深度优先遍历和广度优先遍历的算法实现。
52 1
数据结构与算法学习二二:图的学习、图的概念、图的深度和广度优先遍历
|
21天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
1月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
65 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
1月前
|
算法
动态规划算法学习三:0-1背包问题
这篇文章是关于0-1背包问题的动态规划算法详解,包括问题描述、解决步骤、最优子结构性质、状态表示和递推方程、算法设计与分析、计算最优值、算法实现以及对算法缺点的思考。
67 2
动态规划算法学习三:0-1背包问题
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
21天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
21天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
21天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
21天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
21天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!